@@ -99,6 +99,11 @@ func NewRedisAuthenticator(
9999func (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.
121119func (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.
147153func (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