Skip to content

Commit b71320e

Browse files
committed
chore: address PR comments
1 parent c710e08 commit b71320e

File tree

6 files changed

+85
-72
lines changed

6 files changed

+85
-72
lines changed

authorization/error.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ func ErrInvalidAuthIDError(err error) *errors.Error {
5050
}
5151
}
5252

53-
// UnexpectedAuthIndexError is used when the error comes from an internal system.
54-
func UnexpectedAuthIndexError(err error) *errors.Error {
53+
// UnexpectedAuthBucketError is used when the error comes from an internal system.
54+
func UnexpectedAuthBucketError(index []byte, err error) *errors.Error {
5555
var e *errors.Error
5656
if !errors2.As(err, &e) {
5757
e = &errors.Error{
58-
Msg: fmt.Sprintf("unexpected error retrieving auth index; Err: %v", err),
58+
Msg: fmt.Sprintf("unexpected error retrieving auth bucket %q; Err: %v", index, err),
5959
Code: errors.EInternal,
6060
Err: err,
6161
}

authorization/hasher.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func NewAuthorizationHasher(opts ...AuthorizationHasherOption) (*AuthorizationHa
6666
}
6767

6868
if len(options.decoderVariants) == 0 {
69-
return nil, ErrNoDecoders
69+
return nil, fmt.Errorf("error in NewAuthorizationHasher: %w", ErrNoDecoders)
7070
}
7171

7272
// Create the hasher used for hashing new tokens before storage.

authorization/storage.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ var (
118118
)
119119

120120
var (
121-
authBucket = []byte("authorizationsv1")
122-
authIndex = []byte("authorizationindexv1")
123-
hashedAuthIndex = []byte("authorizationhashedindexv1")
121+
authBucketName = []byte("authorizationsv1")
122+
authIndexName = []byte("authorizationindexv1")
123+
hashedAuthIndexName = []byte("authorizationhashedindexv1")
124124
)
125125

126126
type Store struct {
@@ -199,13 +199,13 @@ func NewStore(ctx context.Context, kvStore kv.Store, useHashedTokens bool, opts
199199
}
200200

201201
if err := s.setup(ctx); err != nil {
202-
return nil, err
202+
return nil, fmt.Errorf("error during authorization store setup: %w", err)
203203
}
204204

205205
if s.hasher == nil {
206206
hasher, err := s.autogenerateHasher(ctx, s.hasherVariantName)
207207
if err != nil {
208-
return nil, err
208+
return nil, fmt.Errorf("error creating authorization store during autogenerateHasher: %w", err)
209209
}
210210
s.hasher = hasher
211211
}
@@ -334,7 +334,7 @@ func (s *Store) Update(ctx context.Context, fn func(kv.Tx) error) error {
334334

335335
func (s *Store) setup(ctx context.Context) error {
336336
return s.View(ctx, func(tx kv.Tx) error {
337-
if _, err := tx.Bucket(authBucket); err != nil {
337+
if _, err := authBucket(tx); err != nil {
338338
return err
339339
}
340340
if _, err := authIndexBucket(tx); err != nil {
@@ -392,7 +392,7 @@ func (s *Store) uniqueID(ctx context.Context, tx kv.Tx, bucket []byte, id platfo
392392
}
393393
}
394394

395-
b, err := tx.Bucket(bucket)
395+
b, err := getNamedAuthBucket(tx, bucket)
396396
if err != nil {
397397
return err
398398
}

authorization/storage_authorization.go

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2740
func authIndexKey(n string) []byte {
2841
return []byte(n)
2942
}
3043

3144
func 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

4048
func hashedAuthIndexKey(n string) []byte {
4149
return []byte(n)
4250
}
4351

4452
func 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

5356
func (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

7990
func 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.
331342
func (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

511522
func (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

524536
func (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

557569
func 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

Comments
 (0)