Skip to content

Commit 5e88aff

Browse files
committed
feat: add logging if hashing disabled but hashed tokens found
1 parent 5988c96 commit 5e88aff

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

authorization/storage.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
goerrors "errors"
66
"fmt"
7+
"maps"
78
"slices"
89

910
"github.com/go-crypt/crypt"
@@ -202,8 +203,16 @@ func NewStore(ctx context.Context, kvStore kv.Store, useHashedTokens bool, opts
202203
return nil, fmt.Errorf("error during authorization store setup: %w", err)
203204
}
204205

206+
foundVariants, err := s.findHashVariants(ctx)
207+
if err != nil {
208+
return nil, fmt.Errorf("error creating authorization store during findVariants: %w", err)
209+
}
210+
if len(foundVariants) > 0 && !useHashedTokens {
211+
s.log.Warn("Token hashing is disabled, but hashed tokens found in authorization store. Was influxd accidentally started without --use-hashed-tokens?")
212+
}
213+
205214
if s.hasher == nil {
206-
hasher, err := s.autogenerateHasher(ctx, s.hasherVariantName)
215+
hasher, err := s.autogenerateHasher(ctx, foundVariants, s.hasherVariantName)
207216
if err != nil {
208217
return nil, fmt.Errorf("error creating authorization store during autogenerateHasher: %w", err)
209218
}
@@ -220,10 +229,8 @@ func NewStore(ctx context.Context, kvStore kv.Store, useHashedTokens bool, opts
220229
return s.Store, nil
221230
}
222231

223-
// autogenerateHasher generates an AuthorizationHasher that hashes using variantName.
224-
// The decoders include variantName plus any other variants that are detected in the
225-
// store.
226-
func (s *Store) autogenerateHasher(ctx context.Context, variantName string) (*AuthorizationHasher, error) {
232+
// findHashVariants scans all authorizations and returns a list of hash variants found.
233+
func (s *Store) findHashVariants(ctx context.Context) ([]influxdb2_algo.Variant, error) {
227234
// Determine which variants are present in the store.
228235
tempDecoder := crypt.NewDecoder()
229236
if err := influxdb2_algo.RegisterDecoder(tempDecoder); err != nil {
@@ -251,16 +258,25 @@ func (s *Store) autogenerateHasher(ctx context.Context, variantName string) (*Au
251258
if influxdbDigest, ok := digest.(*influxdb2_algo.Digest); ok {
252259
foundVariants[influxdbDigest.Variant] = struct{}{}
253260
}
261+
} else {
262+
s.log.Warn("error decoding hash variant for token during hash variant inventory", zap.Error(err), zap.Uint64("tokenID", uint64(a.ID)))
254263
}
255264
}
256265
}
257266

267+
return slices.Collect(maps.Keys(foundVariants)), nil
268+
}
269+
270+
// autogenerateHasher generates an AuthorizationHasher that hashes using variantName.
271+
// The decoders include variantName plus any other variants that are included in
272+
// foundVariants.
273+
func (s *Store) autogenerateHasher(ctx context.Context, foundVariants []influxdb2_algo.Variant, variantName string) (*AuthorizationHasher, error) {
258274
var decoderVariants []influxdb2_algo.Variant
259275
// Make sure we have the hasher variant we will make in there and that it is first in the list,
260276
// so that it is the first one we try to lookup a given token.
261277
hasherVariant := influxdb2_algo.NewVariant(variantName)
262278
decoderVariants = append(decoderVariants, hasherVariant)
263-
for variant := range foundVariants {
279+
for _, variant := range foundVariants {
264280
// Avoid having 2 hasherVariant decoders.
265281
if variant != hasherVariant {
266282
decoderVariants = append(decoderVariants, variant)

0 commit comments

Comments
 (0)