66975bdfe9
* first pass linter cleanup * address review comments
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package auth
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
HeaderToken = "token"
|
|
HeaderAuth = "Authorization"
|
|
HeaderBearer = "BEARER"
|
|
SessionCookieToken = "FOCALBOARDAUTHTOKEN"
|
|
)
|
|
|
|
type TokenLocation int
|
|
|
|
const (
|
|
TokenLocationNotFound TokenLocation = iota
|
|
TokenLocationHeader
|
|
TokenLocationCookie
|
|
TokenLocationQueryString
|
|
)
|
|
|
|
func (tl TokenLocation) String() string {
|
|
switch tl {
|
|
case TokenLocationNotFound:
|
|
return "Not Found"
|
|
case TokenLocationHeader:
|
|
return "Header"
|
|
case TokenLocationCookie:
|
|
return "Cookie"
|
|
case TokenLocationQueryString:
|
|
return "QueryString"
|
|
default:
|
|
return "Unknown"
|
|
}
|
|
}
|
|
|
|
func ParseAuthTokenFromRequest(r *http.Request) (string, TokenLocation) {
|
|
authHeader := r.Header.Get(HeaderAuth)
|
|
|
|
// Attempt to parse the token from the cookie
|
|
if cookie, err := r.Cookie(SessionCookieToken); err == nil {
|
|
return cookie.Value, TokenLocationCookie
|
|
}
|
|
|
|
// Parse the token from the header
|
|
if len(authHeader) > 6 && strings.ToUpper(authHeader[0:6]) == HeaderBearer {
|
|
// Default session token
|
|
return authHeader[7:], TokenLocationHeader
|
|
}
|
|
|
|
if len(authHeader) > 5 && strings.ToLower(authHeader[0:5]) == HeaderToken {
|
|
// OAuth token
|
|
return authHeader[6:], TokenLocationHeader
|
|
}
|
|
|
|
// Attempt to parse token out of the query string
|
|
if token := r.URL.Query().Get("access_token"); token != "" {
|
|
return token, TokenLocationQueryString
|
|
}
|
|
|
|
return "", TokenLocationNotFound
|
|
}
|