`Named` is implemented by every `Method` and future implementations should implement the method too.tags/v1.21.0-rc0
@@ -36,6 +36,8 @@ var ( | |||
algorithmPattern = regexp.MustCompile(`algorithm=(\w+)`) | |||
versionPattern = regexp.MustCompile(`version=(\d+\.\d+)`) | |||
authorizationPattern = regexp.MustCompile(`\AX-Ops-Authorization-(\d+)`) | |||
_ auth.Method = &Auth{} | |||
) | |||
// Documentation: |
@@ -12,6 +12,8 @@ import ( | |||
"code.gitea.io/gitea/services/packages" | |||
) | |||
var _ auth.Method = &Auth{} | |||
type Auth struct{} | |||
func (a *Auth) Name() string { |
@@ -12,6 +12,8 @@ import ( | |||
"code.gitea.io/gitea/services/packages" | |||
) | |||
var _ auth.Method = &Auth{} | |||
type Auth struct{} | |||
func (a *Auth) Name() string { |
@@ -13,6 +13,8 @@ import ( | |||
"code.gitea.io/gitea/services/auth" | |||
) | |||
var _ auth.Method = &Auth{} | |||
type Auth struct{} | |||
func (a *Auth) Name() string { |
@@ -21,7 +21,6 @@ import ( | |||
// Ensure the struct implements the interface. | |||
var ( | |||
_ Method = &Basic{} | |||
_ Named = &Basic{} | |||
) | |||
// BasicMethodName is the constant name of the basic authentication method |
@@ -5,7 +5,6 @@ package auth | |||
import ( | |||
"net/http" | |||
"reflect" | |||
"strings" | |||
user_model "code.gitea.io/gitea/models/user" | |||
@@ -37,21 +36,16 @@ func (b *Group) Add(method Method) { | |||
func (b *Group) Name() string { | |||
names := make([]string, 0, len(b.methods)) | |||
for _, m := range b.methods { | |||
if n, ok := m.(Named); ok { | |||
names = append(names, n.Name()) | |||
} else { | |||
names = append(names, reflect.TypeOf(m).Elem().Name()) | |||
} | |||
names = append(names, m.Name()) | |||
} | |||
return strings.Join(names, ",") | |||
} | |||
// Verify extracts and validates | |||
func (b *Group) Verify(req *http.Request, w http.ResponseWriter, store DataStore, sess SessionStore) (*user_model.User, error) { | |||
// Try to sign in with each of the enabled plugins | |||
var retErr error | |||
for _, ssoMethod := range b.methods { | |||
user, err := ssoMethod.Verify(req, w, store, sess) | |||
for _, m := range b.methods { | |||
user, err := m.Verify(req, w, store, sess) | |||
if err != nil { | |||
if retErr == nil { | |||
retErr = err | |||
@@ -67,9 +61,7 @@ func (b *Group) Verify(req *http.Request, w http.ResponseWriter, store DataStore | |||
// Return the user and ignore any error returned by previous methods. | |||
if user != nil { | |||
if store.GetData()["AuthedMethod"] == nil { | |||
if named, ok := ssoMethod.(Named); ok { | |||
store.GetData()["AuthedMethod"] = named.Name() | |||
} | |||
store.GetData()["AuthedMethod"] = m.Name() | |||
} | |||
return user, nil | |||
} |
@@ -23,7 +23,6 @@ import ( | |||
// Ensure the struct implements the interface. | |||
var ( | |||
_ Method = &HTTPSign{} | |||
_ Named = &HTTPSign{} | |||
) | |||
// HTTPSign implements the Auth interface and authenticates requests (API requests |
@@ -27,10 +27,7 @@ type Method interface { | |||
// Second argument returns err if verification fails, otherwise | |||
// First return argument returns nil if no matched verification condition | |||
Verify(http *http.Request, w http.ResponseWriter, store DataStore, sess SessionStore) (*user_model.User, error) | |||
} | |||
// Named represents a named thing | |||
type Named interface { | |||
Name() string | |||
} | |||
@@ -22,7 +22,6 @@ import ( | |||
// Ensure the struct implements the interface. | |||
var ( | |||
_ Method = &OAuth2{} | |||
_ Named = &OAuth2{} | |||
) | |||
// CheckOAuthAccessToken returns uid of user from oauth token |
@@ -20,7 +20,6 @@ import ( | |||
// Ensure the struct implements the interface. | |||
var ( | |||
_ Method = &ReverseProxy{} | |||
_ Named = &ReverseProxy{} | |||
) | |||
// ReverseProxyMethodName is the constant name of the ReverseProxy authentication method |
@@ -14,7 +14,6 @@ import ( | |||
// Ensure the struct implements the interface. | |||
var ( | |||
_ Method = &Session{} | |||
_ Named = &Session{} | |||
) | |||
// Session checks if there is a user uid stored in the session and returns the user |
@@ -37,7 +37,6 @@ var ( | |||
// Ensure the struct implements the interface. | |||
_ Method = &SSPI{} | |||
_ Named = &SSPI{} | |||
) | |||
// SSPI implements the SingleSignOn interface and authenticates requests |