Spaces:
Sleeping
Sleeping
| // 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 | |
| } | |