You've already forked oauth2-proxy
mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-07-13 01:40:48 +02:00
Merge pull request #1379 from janrotter/fix-htpasswd-user-group
Store groups from the htpasswd-user-group in the session during the manual sign in process
This commit is contained in:
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
## Changes since v7.1.3
|
## Changes since v7.1.3
|
||||||
|
|
||||||
|
- [#1379](https://github.com/oauth2-proxy/oauth2-proxy/pull/1379) Fix the manual sign in with --htpasswd-user-group switch (@janrotter)
|
||||||
- [#1337](https://github.com/oauth2-proxy/oauth2-proxy/pull/1337) Changing user field type to text when using htpasswd (@pburgisser)
|
- [#1337](https://github.com/oauth2-proxy/oauth2-proxy/pull/1337) Changing user field type to text when using htpasswd (@pburgisser)
|
||||||
- [#1239](https://github.com/oauth2-proxy/oauth2-proxy/pull/1239) Base GitLab provider implementation on OIDCProvider (@NickMeves)
|
- [#1239](https://github.com/oauth2-proxy/oauth2-proxy/pull/1239) Base GitLab provider implementation on OIDCProvider (@NickMeves)
|
||||||
- [#1276](https://github.com/oauth2-proxy/oauth2-proxy/pull/1276) Update crypto and switched to new github.com/golang-jwt/jwt (@JVecsei)
|
- [#1276](https://github.com/oauth2-proxy/oauth2-proxy/pull/1276) Update crypto and switched to new github.com/golang-jwt/jwt (@JVecsei)
|
||||||
|
@ -78,6 +78,7 @@ type OAuthProxy struct {
|
|||||||
sessionStore sessionsapi.SessionStore
|
sessionStore sessionsapi.SessionStore
|
||||||
ProxyPrefix string
|
ProxyPrefix string
|
||||||
basicAuthValidator basic.Validator
|
basicAuthValidator basic.Validator
|
||||||
|
basicAuthGroups []string
|
||||||
SkipProviderButton bool
|
SkipProviderButton bool
|
||||||
skipAuthPreflight bool
|
skipAuthPreflight bool
|
||||||
skipJwtBearerTokens bool
|
skipJwtBearerTokens bool
|
||||||
@ -200,6 +201,7 @@ func NewOAuthProxy(opts *options.Options, validator func(string) bool) (*OAuthPr
|
|||||||
trustedIPs: trustedIPs,
|
trustedIPs: trustedIPs,
|
||||||
|
|
||||||
basicAuthValidator: basicAuthValidator,
|
basicAuthValidator: basicAuthValidator,
|
||||||
|
basicAuthGroups: opts.HtpasswdUserGroups,
|
||||||
sessionChain: sessionChain,
|
sessionChain: sessionChain,
|
||||||
headersChain: headersChain,
|
headersChain: headersChain,
|
||||||
preAuthChain: preAuthChain,
|
preAuthChain: preAuthChain,
|
||||||
@ -534,7 +536,7 @@ func (p *OAuthProxy) isTrustedIP(req *http.Request) bool {
|
|||||||
return p.trustedIPs.Has(remoteAddr)
|
return p.trustedIPs.Has(remoteAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignInPage writes the sing in template to the response
|
// SignInPage writes the sign in template to the response
|
||||||
func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code int) {
|
func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code int) {
|
||||||
prepareNoCache(rw)
|
prepareNoCache(rw)
|
||||||
err := p.ClearSessionCookie(rw, req)
|
err := p.ClearSessionCookie(rw, req)
|
||||||
@ -589,7 +591,7 @@ func (p *OAuthProxy) SignIn(rw http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
user, ok := p.ManualSignIn(req)
|
user, ok := p.ManualSignIn(req)
|
||||||
if ok {
|
if ok {
|
||||||
session := &sessionsapi.SessionState{User: user}
|
session := &sessionsapi.SessionState{User: user, Groups: p.basicAuthGroups}
|
||||||
err = p.SaveSession(rw, req, session)
|
err = p.SaveSession(rw, req, session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Printf("Error saving session: %v", err)
|
logger.Printf("Error saving session: %v", err)
|
||||||
|
@ -587,6 +587,53 @@ func (sipTest *SignInPageTest) GetEndpoint(endpoint string) (int, string) {
|
|||||||
return rw.Code, rw.Body.String()
|
return rw.Code, rw.Body.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AlwaysSuccessfulValidator struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (AlwaysSuccessfulValidator) Validate(user, password string) bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestManualSignInStoresUserGroupsInTheSession(t *testing.T) {
|
||||||
|
userGroups := []string{"somegroup", "someothergroup"}
|
||||||
|
|
||||||
|
opts := baseTestOptions()
|
||||||
|
opts.HtpasswdUserGroups = userGroups
|
||||||
|
err := validation.Validate(opts)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy, err := NewOAuthProxy(opts, func(email string) bool {
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
proxy.basicAuthValidator = AlwaysSuccessfulValidator{}
|
||||||
|
|
||||||
|
rw := httptest.NewRecorder()
|
||||||
|
formData := url.Values{}
|
||||||
|
formData.Set("username", "someuser")
|
||||||
|
formData.Set("password", "somepass")
|
||||||
|
signInReq, _ := http.NewRequest(http.MethodPost, "/oauth2/sign_in", strings.NewReader(formData.Encode()))
|
||||||
|
signInReq.Header.Add("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
proxy.ServeHTTP(rw, signInReq)
|
||||||
|
|
||||||
|
assert.Equal(t, http.StatusFound, rw.Code)
|
||||||
|
|
||||||
|
req, _ := http.NewRequest(http.MethodGet, "/something", strings.NewReader(formData.Encode()))
|
||||||
|
for _, c := range rw.Result().Cookies() {
|
||||||
|
req.AddCookie(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := proxy.sessionStore.Load(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, userGroups, s.Groups)
|
||||||
|
}
|
||||||
|
|
||||||
func TestSignInPageIncludesTargetRedirect(t *testing.T) {
|
func TestSignInPageIncludesTargetRedirect(t *testing.T) {
|
||||||
sipTest, err := NewSignInPageTest(false)
|
sipTest, err := NewSignInPageTest(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user