git.iko.soy/typeable/oauth2-proxy
on master help sign in
Remove duplicated logic
bc4d594Joel Speed
oauthproxy.go+5−12
@@ -580,20 +580,13 @@ func (p *OAuthProxy) IsValidRedirect(redirect string) bool {
580 switch {
580 switch {
581 case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//"):
581 case strings.HasPrefix(redirect, "/") && !strings.HasPrefix(redirect, "//"):
582 return true
582 return true
583− case strings.HasPrefix(redirect, "http://"):
583+ case strings.HasPrefix(redirect, "http://") || strings.HasPrefix(redirect, "https://"):
584− redirect = strings.TrimPrefix(redirect, "http://")
584+ redirectURL, err := url.Parse(redirect)
585− redirect = strings.Split(redirect, "/")[0]
585+ if err != nil {
586− for _, domain := range p.whitelistDomains {
587− if strings.HasSuffix(redirect, domain) {
588− return true
586+ return false
589− }
590 }
587 }
591− return false
592− case strings.HasPrefix(redirect, "https://"):
593− redirect = strings.TrimPrefix(redirect, "https://")
594− redirect = strings.Split(redirect, "/")[0]
595 for _, domain := range p.whitelistDomains {
588 for _, domain := range p.whitelistDomains {
596− if strings.HasSuffix(redirect, domain) {
589+ if (redirectURL.Host == domain) || (strings.HasPrefix(domain, ".") && strings.HasSuffix(redirectURL.Host, domain)) {
597 return true
590 return true
598 }
591 }
599 }
592 }