Compare commits
10 Commits
b3fe5c17ed
...
c17cd92268
| Author | SHA1 | Date | |
|---|---|---|---|
| c17cd92268 | |||
| 8d99527e45 | |||
| 8792285eb4 | |||
| 76bad074c7 | |||
| 6a26e9330e | |||
| 994ab142d6 | |||
| e3daa14614 | |||
| ab8998cdf2 | |||
| 7361b524e8 | |||
| 3c9f7eae47 |
|
|
@ -35,43 +35,28 @@ func (b *memoryBackend) cachedCheckAuthToken(conn redis.Conn, header string, r *
|
|||
log.Println("Cached checking Auth Token")
|
||||
|
||||
tokens := authHeaderRegex.FindStringSubmatch(header)
|
||||
|
||||
if len(tokens) != 2 {
|
||||
log.Println("No token found in the header")
|
||||
return false
|
||||
}
|
||||
|
||||
key := fmt.Sprintf("token:%s", tokens[1])
|
||||
|
||||
var err error
|
||||
|
||||
values, err := redis.Values(conn.Do("HGETALL", key))
|
||||
if err == nil && len(values) > 0 {
|
||||
if err = redis.ScanStruct(values, r); err == nil {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
log.Printf("Error while HGETALL %v\n", err)
|
||||
authorized, err := getCachedValue(conn, key, r)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
authorized := b.checkAuthToken(header, r)
|
||||
authorized = true
|
||||
if authorized {
|
||||
return true
|
||||
}
|
||||
|
||||
authorized = b.checkAuthToken(header, r)
|
||||
if authorized {
|
||||
fmt.Printf("Token response: %#v\n", r)
|
||||
_, err = conn.Do("HMSET", redis.Args{}.Add(key).AddFlat(r)...)
|
||||
if err != nil {
|
||||
log.Printf("Error while setting token: %v\n", err)
|
||||
return authorized
|
||||
}
|
||||
_, err = conn.Do("EXPIRE", key, uint64(10*time.Minute/time.Second))
|
||||
if err != nil {
|
||||
log.Printf("Error while setting expire on token: %v\n", err)
|
||||
log.Println("Deleting token")
|
||||
_, err = conn.Do("DEL", key)
|
||||
if err != nil {
|
||||
log.Printf("Deleting token failed: %v", err)
|
||||
}
|
||||
return authorized
|
||||
}
|
||||
setCachedTokenResponseValue(conn, key, r)
|
||||
return true
|
||||
}
|
||||
|
||||
return authorized
|
||||
|
|
@ -82,15 +67,11 @@ func (b *memoryBackend) checkAuthToken(header string, token *auth.TokenResponse)
|
|||
|
||||
tokenEndpoint := b.TokenEndpoint
|
||||
|
||||
req, err := http.NewRequest("GET", tokenEndpoint, nil)
|
||||
req, err := buildValidateAuthTokenRequest(tokenEndpoint, header)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return false
|
||||
}
|
||||
|
||||
req.Header.Add("Authorization", header)
|
||||
req.Header.Add("Accept", "application/json")
|
||||
|
||||
client := http.Client{}
|
||||
res, err := client.Do(req)
|
||||
if err != nil {
|
||||
|
|
@ -114,3 +95,30 @@ func (b *memoryBackend) checkAuthToken(header string, token *auth.TokenResponse)
|
|||
log.Println("Auth Token: Success")
|
||||
return true
|
||||
}
|
||||
|
||||
func buildValidateAuthTokenRequest(tokenEndpoint string, header string) (*http.Request, error) {
|
||||
req, err := http.NewRequest("GET", tokenEndpoint, nil)
|
||||
req.Header.Add("Authorization", header)
|
||||
req.Header.Add("Accept", "application/json")
|
||||
return req, err
|
||||
}
|
||||
|
||||
// setCachedTokenResponseValue remembers the value of the auth token response in redis
|
||||
func setCachedTokenResponseValue(conn redis.Conn, key string, r *auth.TokenResponse) error {
|
||||
_, err := conn.Do("HMSET", redis.Args{}.Add(key).AddFlat(r)...)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error while setting token: %v", err)
|
||||
}
|
||||
conn.Do("EXPIRE", key, uint64(10*time.Minute/time.Second))
|
||||
}
|
||||
|
||||
// getCachedValue gets the cached value from Redis
|
||||
func getCachedValue(conn redis.Conn, key string, r *auth.TokenResponse) (bool, error) {
|
||||
values, err := redis.Values(conn.Do("HGETALL", key))
|
||||
if err == nil && len(values) > 0 {
|
||||
if err = redis.ScanStruct(values, r); err == nil {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
return false, fmt.Errorf("error while getting value from backend: %v", err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package auth
|
||||
|
||||
// Auther
|
||||
type Auther interface {
|
||||
AuthTokenAccepted(header string, r *TokenResponse) bool
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user