@@ -24,30 +24,33 @@ var (
2424 ErrNoTokenAvailable = goerrors .New ("no token available for authorization" )
2525)
2626
27+ func getNamedAuthBucket (tx kv.Tx , bucketName []byte ) (kv.Bucket , error ) {
28+ b , err := tx .Bucket (bucketName )
29+ if err != nil {
30+ return nil , UnexpectedAuthBucketError (bucketName , err )
31+ }
32+
33+ return b , nil
34+ }
35+
36+ func authBucket (tx kv.Tx ) (kv.Bucket , error ) {
37+ return getNamedAuthBucket (tx , authBucketName )
38+ }
39+
2740func authIndexKey (n string ) []byte {
2841 return []byte (n )
2942}
3043
3144func authIndexBucket (tx kv.Tx ) (kv.Bucket , error ) {
32- b , err := tx .Bucket ([]byte (authIndex ))
33- if err != nil {
34- return nil , UnexpectedAuthIndexError (err )
35- }
36-
37- return b , nil
45+ return getNamedAuthBucket (tx , authIndexName )
3846}
3947
4048func hashedAuthIndexKey (n string ) []byte {
4149 return []byte (n )
4250}
4351
4452func hashedAuthIndexBucket (tx kv.Tx ) (kv.Bucket , error ) {
45- b , err := tx .Bucket ([]byte (hashedAuthIndex ))
46- if err != nil {
47- return nil , UnexpectedAuthIndexError (err )
48- }
49-
50- return b , nil
53+ return getNamedAuthBucket (tx , hashedAuthIndexName )
5154}
5255
5356func (s * Store ) encodeAuthorization (a * influxdb.Authorization ) ([]byte , error ) {
@@ -58,7 +61,7 @@ func (s *Store) encodeAuthorization(a *influxdb.Authorization) ([]byte, error) {
5861 default :
5962 return nil , & errors.Error {
6063 Code : errors .EInvalid ,
61- Msg : "unknown authorization status" ,
64+ Msg : "encodeAuthorization: unknown authorization status" ,
6265 }
6366 }
6467
@@ -73,12 +76,20 @@ func (s *Store) encodeAuthorization(a *influxdb.Authorization) ([]byte, error) {
7376 redactedAuth .Token = ""
7477 a = & redactedAuth
7578 }
76- return json .Marshal (a )
79+ if d , err := json .Marshal (a ); err == nil {
80+ return d , nil
81+ } else {
82+ return nil , & errors.Error {
83+ Code : errors .EInvalid ,
84+ Msg : "encodeAuthorization: marshalling error" ,
85+ Err : err ,
86+ }
87+ }
7788}
7889
7990func decodeAuthorization (b []byte , a * influxdb.Authorization ) error {
8091 if err := json .Unmarshal (b , a ); err != nil {
81- return err
92+ return fmt . Errorf ( "decodeAuthorization: %w" , err )
8293 }
8394 if a .Status == "" {
8495 a .Status = influxdb .Active
@@ -97,10 +108,10 @@ func (s *Store) transformToken(a *influxdb.Authorization) error {
97108 if a .Token != "" && a .HashedToken != "" {
98109 match , err := s .hasher .Match (a .HashedToken , a .Token )
99110 if err != nil {
100- return fmt .Errorf ("error matching tokens: %w" , err )
111+ return fmt .Errorf ("transformToken: error matching tokens: %w" , err )
101112 }
102113 if ! match {
103- return ErrHashedTokenMismatch
114+ return fmt . Errorf ( "transformToken: %w" , ErrHashedTokenMismatch )
104115 }
105116 }
106117
@@ -113,7 +124,7 @@ func (s *Store) transformToken(a *influxdb.Authorization) error {
113124 // Note that even if a.HashedToken is set, we will regenerate it here. This ensures
114125 // that a.HashedToken will be stored using the currently configured hashing algorithm.
115126 if hashedToken , err := s .hasher .Hash (a .Token ); err != nil {
116- return fmt .Errorf ("error hashing token for token %d (%s): %w" , a .ID , a .Description , err )
127+ return fmt .Errorf ("transformToken: error hashing token for token %d (%s): %w" , a .ID , a .Description , err )
117128 } else {
118129 a .HashedToken = hashedToken
119130 }
@@ -140,13 +151,13 @@ func (s *Store) CreateAuthorization(ctx context.Context, tx kv.Tx, a *influxdb.A
140151
141152 // if the provided ID is invalid, or already maps to an existing Auth, then generate a new one
142153 if ! a .ID .Valid () {
143- id , err := s .generateSafeID (ctx , tx , authBucket )
154+ id , err := s .generateSafeID (ctx , tx , authBucketName )
144155 if err != nil {
145156 return nil
146157 }
147158 a .ID = id
148159 } else if err := uniqueID (ctx , tx , a .ID ); err != nil {
149- id , err := s .generateSafeID (ctx , tx , authBucket )
160+ id , err := s .generateSafeID (ctx , tx , authBucketName )
150161 if err != nil {
151162 return nil
152163 }
@@ -171,7 +182,7 @@ func (s *Store) GetAuthorizationByID(ctx context.Context, tx kv.Tx, id platform.
171182 return nil , ErrInvalidAuthID
172183 }
173184
174- b , err := tx . Bucket ( authBucket )
185+ b , err := authBucket ( tx )
175186 if err != nil {
176187 return nil , err
177188 }
@@ -329,7 +340,7 @@ func (s *Store) ListAuthorizations(ctx context.Context, tx kv.Tx, f influxdb.Aut
329340
330341// forEachAuthorization will iterate through all authorizations while fn returns true.
331342func (s * Store ) forEachAuthorization (ctx context.Context , tx kv.Tx , pred kv.CursorPredicateFunc , fn func (* influxdb.Authorization ) bool ) error {
332- b , err := tx . Bucket ( authBucket )
343+ b , err := authBucket ( tx )
333344 if err != nil {
334345 return err
335346 }
@@ -402,9 +413,9 @@ func (s *Store) commitAuthorization(ctx context.Context, tx kv.Tx, a *influxdb.A
402413 }
403414 }
404415
405- b , err := tx . Bucket ( authBucket )
416+ b , err := authBucket ( tx )
406417 if err != nil {
407- return errors . ErrInternalServiceError ( err , errors . WithErrorCode ( errors . EInternal ))
418+ return err // authBucket already wraps the error
408419 }
409420
410421 if err := b .Put (encodedID , v ); err != nil {
@@ -429,13 +440,13 @@ func (s *Store) deleteIndices(ctx context.Context, tx kv.Tx, token, hashedToken
429440
430441 if token != "" {
431442 if err := authIdx .Delete ([]byte (token )); err != nil {
432- return err
443+ return fmt . Errorf ( "deleteIndices: error deleting from authIndex: %w" , err )
433444 }
434445 }
435446
436447 if hashedToken != "" {
437448 if err := hashedAuthIdx .Delete ([]byte (hashedToken )); err != nil {
438- return err
449+ return fmt . Errorf ( "deleteIndices: error deleting from hashedAuthIndex: %w" , err )
439450 }
440451 }
441452
@@ -492,7 +503,7 @@ func (s *Store) DeleteAuthorization(ctx context.Context, tx kv.Tx, id platform.I
492503 return ErrInvalidAuthID
493504 }
494505
495- b , err := tx . Bucket ( authBucket )
506+ b , err := authBucket ( tx )
496507 if err != nil {
497508 return err
498509 }
@@ -509,22 +520,23 @@ func (s *Store) DeleteAuthorization(ctx context.Context, tx kv.Tx, id platform.I
509520}
510521
511522func (s * Store ) uniqueAuthTokenByIndex (ctx context.Context , tx kv.Tx , index , key []byte ) error {
512- err := unique (ctx , tx , index , key )
513- if err == kv .NotUniqueError {
523+ if err := unique (ctx , tx , index , key ); err == nil {
524+ return nil
525+ } else if err == kv .NotUniqueError {
514526 // by returning a generic error we are trying to hide when
515527 // a token is non-unique.
516528 return influxdb .ErrUnableToCreateToken
529+ } else {
530+ // otherwise, this is some sort of internal server error and we
531+ // should provide some debugging information.
532+ return fmt .Errorf ("error in uniqueAuthTokenByIndex for index %q: %w" , index , err )
517533 }
518-
519- // otherwise, this is some sort of internal server error and we
520- // should provide some debugging information.
521- return err
522534}
523535
524536func (s * Store ) uniqueAuthToken (ctx context.Context , tx kv.Tx , a * influxdb.Authorization ) error {
525537 // Check if the raw token is unique.
526538 if a .Token != "" {
527- if err := s .uniqueAuthTokenByIndex (ctx , tx , authIndex , authIndexKey (a .Token )); err != nil {
539+ if err := s .uniqueAuthTokenByIndex (ctx , tx , authIndexName , authIndexKey (a .Token )); err != nil {
528540 return err
529541 }
530542 }
@@ -544,7 +556,7 @@ func (s *Store) uniqueAuthToken(ctx context.Context, tx kv.Tx, a *influxdb.Autho
544556 }
545557
546558 for _ , hashedToken := range allHashedTokens {
547- if err := s .uniqueAuthTokenByIndex (ctx , tx , hashedAuthIndex , hashedAuthIndexKey (hashedToken )); err != nil {
559+ if err := s .uniqueAuthTokenByIndex (ctx , tx , hashedAuthIndexName , hashedAuthIndexKey (hashedToken )); err != nil {
548560 if ! s .ignoreMissingHashIndex || ! goerrors .Is (err , kv .ErrBucketNotFound ) {
549561 return err
550562 }
@@ -555,9 +567,9 @@ func (s *Store) uniqueAuthToken(ctx context.Context, tx kv.Tx, a *influxdb.Autho
555567}
556568
557569func unique (ctx context.Context , tx kv.Tx , indexBucket , indexKey []byte ) error {
558- bucket , err := tx . Bucket ( indexBucket )
570+ bucket , err := getNamedAuthBucket ( tx , indexBucket )
559571 if err != nil {
560- return kv . UnexpectedIndexError ( err )
572+ return err
561573 }
562574
563575 _ , err = bucket .Get (indexKey )
@@ -582,9 +594,9 @@ func uniqueID(ctx context.Context, tx kv.Tx, id platform.ID) error {
582594 return ErrInvalidAuthID
583595 }
584596
585- b , err := tx . Bucket ( authBucket )
597+ b , err := authBucket ( tx )
586598 if err != nil {
587- return errors . ErrInternalServiceError ( err )
599+ return err // authBucket already wraps the error
588600 }
589601
590602 _ , err = b .Get (encodedID )
0 commit comments