github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/access_token_factory.go (about) 1 package db 2 3 import ( 4 "database/sql" 5 "time" 6 7 sq "github.com/Masterminds/squirrel" 8 ) 9 10 //go:generate counterfeiter . AccessTokenFactory 11 12 type AccessTokenFactory interface { 13 CreateAccessToken(token string, claims Claims) error 14 GetAccessToken(token string) (AccessToken, bool, error) 15 } 16 17 func NewAccessTokenFactory(conn Conn) AccessTokenFactory { 18 return &accessTokenFactory{conn} 19 } 20 21 type accessTokenFactory struct { 22 conn Conn 23 } 24 25 func (a *accessTokenFactory) CreateAccessToken(token string, claims Claims) error { 26 var expiry int64 27 if claims.Expiry != nil { 28 expiry = int64(*claims.Expiry) 29 } 30 _, err := psql.Insert("access_tokens"). 31 Columns("token", "sub", "expires_at", "claims"). 32 Values(token, claims.Subject, time.Unix(expiry, 0), claims). 33 RunWith(a.conn). 34 Exec() 35 if err != nil { 36 return err 37 } 38 return nil 39 } 40 41 func (a *accessTokenFactory) GetAccessToken(token string) (AccessToken, bool, error) { 42 row := psql.Select("token", "claims"). 43 From("access_tokens"). 44 Where(sq.Eq{"token": token}). 45 RunWith(a.conn). 46 QueryRow() 47 48 var accessToken AccessToken 49 err := scanAccessToken(&accessToken, row) 50 if err != nil { 51 if err == sql.ErrNoRows { 52 return AccessToken{}, false, nil 53 } 54 return AccessToken{}, false, err 55 } 56 return accessToken, true, nil 57 }