Skip to content

Commit 45aabdc

Browse files
committed
Pipeline Redis reqs in Validate through one conn
1 parent 953fd16 commit 45aabdc

1 file changed

Lines changed: 22 additions & 14 deletions

File tree

auth/redis.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ func NewRedisAuthenticator(
9999
func (a *RedisAuthenticator) GetUser(username string) (string, error) {
100100
conn := a.Redis.Get()
101101
defer conn.Close()
102+
return a.getUser(conn, username)
103+
}
104+
105+
// Internal function to get user from Redis
106+
func (a *RedisAuthenticator) getUser(conn redis.Conn, username string) (string, error) {
102107
user, err := redis.String(conn.Do("GET", "octyne-user:"+username))
103108
if err != nil {
104109
if errors.Is(err, redis.ErrNil) {
@@ -109,13 +114,6 @@ func (a *RedisAuthenticator) GetUser(username string) (string, error) {
109114
return user, nil
110115
}
111116

112-
func (a *RedisAuthenticator) getTokenFromRedis(token string) (string, error) {
113-
conn := a.Redis.Get()
114-
defer conn.Close()
115-
user, err := redis.String(conn.Do("GET", "octyne-token:"+token))
116-
return user, err
117-
}
118-
119117
// Validate is called on an HTTP API request and returns the username if request is authenticated,
120118
// else returns an empty string.
121119
func (a *RedisAuthenticator) Validate(r *http.Request) (string, error) {
@@ -128,20 +126,28 @@ func (a *RedisAuthenticator) Validate(r *http.Request) (string, error) {
128126
return "", nil
129127
}
130128
// Make request to Redis database.
131-
username, err := a.getTokenFromRedis(token)
129+
conn := a.Redis.Get()
130+
defer conn.Close()
131+
username, err := a.getTokenData(conn, token)
132132
if err == nil {
133-
if _, err := a.GetUser(username); err == nil {
133+
if _, err := a.getUser(conn, username); err == nil {
134134
return username, nil
135135
} else if !errors.Is(err, ErrUserNotFound) {
136136
return "", err
137137
}
138-
a.Logout(token)
138+
a.logout(conn, token)
139139
} else if !errors.Is(err, redis.ErrNil) {
140140
return "", err
141141
}
142142
return "", nil
143143
}
144144

145+
// Internal function to get token data from Redis
146+
func (a *RedisAuthenticator) getTokenData(conn redis.Conn, token string) (string, error) {
147+
user, err := redis.String(conn.Do("GET", "octyne-token:"+token))
148+
return user, err
149+
}
150+
145151
// ValidateAndReject is called on an HTTP API request and returns the username if request
146152
// is authenticated, else the request is rejected.
147153
func (a *RedisAuthenticator) ValidateAndReject(w http.ResponseWriter, r *http.Request) string {
@@ -190,11 +196,13 @@ func (a *RedisAuthenticator) Logout(token string) (bool, error) {
190196
}
191197
conn := a.Redis.Get()
192198
defer conn.Close()
199+
return a.logout(conn, token)
200+
}
201+
202+
// Internal function for performing logouts
203+
func (a *RedisAuthenticator) logout(conn redis.Conn, token string) (bool, error) {
193204
res, err := redis.Int(conn.Do("DEL", "octyne-token:"+token))
194-
if err != nil {
195-
return false, err
196-
}
197-
return res == 1, nil
205+
return err == nil && res == 1, err
198206
}
199207

200208
// Close closes the authenticator. Once closed, the authenticator should not be used.

0 commit comments

Comments
 (0)