auth

Paddy 2014-12-13 Parent:61a802849b51 Child:e81407f7ecb1

91:c1b3a36af1a7 Go to Latest

auth/token.go

Implement revoking tokens. Add a revokeToken method to tokenStore, and an implementation for memstore. All it does is set the token's Revoked property to true.

History
     1.1 --- a/token.go	Sat Dec 13 19:16:57 2014 -0500
     1.2 +++ b/token.go	Sat Dec 13 19:21:20 2014 -0500
     1.3 @@ -42,6 +42,7 @@
     1.4  	getToken(token string, refresh bool) (Token, error)
     1.5  	saveToken(token Token) error
     1.6  	removeToken(token string) error
     1.7 +	revokeToken(token string, refresh bool) error
     1.8  	getTokensByProfileID(profileID uuid.ID, num, offset int) ([]Token, error)
     1.9  }
    1.10  
    1.11 @@ -105,6 +106,25 @@
    1.12  	return nil
    1.13  }
    1.14  
    1.15 +func (m *memstore) revokeToken(token string, refresh bool) error {
    1.16 +	if refresh {
    1.17 +		t, err := m.lookupTokenByRefresh(token)
    1.18 +		if err != nil {
    1.19 +			return err
    1.20 +		}
    1.21 +		token = t
    1.22 +	}
    1.23 +	m.tokenLock.Lock()
    1.24 +	defer m.tokenLock.Unlock()
    1.25 +	t, ok := m.tokens[token]
    1.26 +	if !ok {
    1.27 +		return ErrTokenNotFound
    1.28 +	}
    1.29 +	t.Revoked = true
    1.30 +	m.tokens[token] = t
    1.31 +	return nil
    1.32 +}
    1.33 +
    1.34  func (m *memstore) getTokensByProfileID(profileID uuid.ID, num, offset int) ([]Token, error) {
    1.35  	ids, err := m.lookupTokensByProfileID(profileID.String())
    1.36  	if err != nil {