Merge 8f3c08a349 into 31b275f580
				
					
				
			This commit is contained in:
		
						commit
						fb59646b06
					
				|  | @ -124,7 +124,12 @@ func NewOAuthProxy(opts *options.Options, validator func(string) bool) (*OAuthPr | |||
| 	} | ||||
| 
 | ||||
| 	var basicAuthValidator basic.Validator | ||||
| 	if opts.HtpasswdFile != "" { | ||||
| 	if opts.RedirectSignUrl != "" { | ||||
| 		basicAuthValidator = &basic.AppLoginValidator{ | ||||
| 			LoginURL: opts.RedirectSignUrl, | ||||
| 			Timeout:  60 * time.Second, | ||||
| 		} | ||||
| 	} else if opts.HtpasswdFile != "" { | ||||
| 		logger.Printf("using htpasswd file: %s", opts.HtpasswdFile) | ||||
| 		var err error | ||||
| 		basicAuthValidator, err = basic.NewHTPasswdValidator(opts.HtpasswdFile) | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ type Options struct { | |||
| 	EmailDomains            []string `flag:"email-domain" cfg:"email_domains"` | ||||
| 	WhitelistDomains        []string `flag:"whitelist-domain" cfg:"whitelist_domains"` | ||||
| 	HtpasswdFile            string   `flag:"htpasswd-file" cfg:"htpasswd_file"` | ||||
| 	RedirectSignUrl         string   `flag:"redirect-sign-url" cfg:"redirect-sign-url"` | ||||
| 	HtpasswdUserGroups      []string `flag:"htpasswd-user-group" cfg:"htpasswd_user_groups"` | ||||
| 
 | ||||
| 	Cookie    Cookie         `cfg:",squash"` | ||||
|  | @ -140,6 +141,7 @@ func NewFlagSet() *pflag.FlagSet { | |||
| 	flagSet.StringSlice("whitelist-domain", []string{}, "allowed domains for redirection after authentication. Prefix domain with a . or a *. to allow subdomains (eg .example.com, *.example.com)") | ||||
| 	flagSet.String("authenticated-emails-file", "", "authenticate against emails via file (one per line)") | ||||
| 	flagSet.String("htpasswd-file", "", "additionally authenticate against a htpasswd file. Entries must be created with \"htpasswd -B\" for bcrypt encryption") | ||||
| 	flagSet.String("redirect-sign-url", "", "additionally sign url using http") | ||||
| 	flagSet.StringSlice("htpasswd-user-group", []string{}, "the groups to be set on sessions for htpasswd users (may be given multiple times)") | ||||
| 	flagSet.String("proxy-prefix", "/oauth2", "the url root path that this proxy should be nested under (e.g. /<oauth2>/sign_in)") | ||||
| 	flagSet.String("ping-path", "/ping", "the ping endpoint that can be used for basic health checks") | ||||
|  |  | |||
|  | @ -0,0 +1,51 @@ | |||
| package basic | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // AppLoginValidator
 | ||||
| type AppLoginValidator struct { | ||||
| 	LoginURL string | ||||
| 	Timeout  time.Duration | ||||
| } | ||||
| 
 | ||||
| type loginRequest struct { | ||||
| 	Username string `json:"username"` | ||||
| 	Password string `json:"password"` | ||||
| } | ||||
| 
 | ||||
| // Validate implement Validator interface
 | ||||
| func (v *AppLoginValidator) Validate(user, password string) bool { | ||||
| 	reqBody := loginRequest{ | ||||
| 		Username: user, | ||||
| 		Password: password, | ||||
| 	} | ||||
| 	data, _ := json.Marshal(reqBody) | ||||
| 
 | ||||
| 	client := &http.Client{Timeout: v.Timeout} | ||||
| 	resp, err := client.Post(v.LoginURL, "application/json", bytes.NewReader(data)) | ||||
| 	if err != nil { | ||||
| 		println(err.Error()) | ||||
| 		return false | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 
 | ||||
| 	if resp.StatusCode != 200 { | ||||
| 		body, err := io.ReadAll(resp.Body) | ||||
| 		if err != nil { | ||||
| 			fmt.Printf("ReadAll error: %v\n", err) | ||||
| 			return false | ||||
| 		} | ||||
| 
 | ||||
| 		fmt.Printf("Response body: %s\n", string(body)) | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	return true | ||||
| } | ||||
		Loading…
	
		Reference in New Issue