Skip to content

Commit 4fac00c

Browse files
committed
✨ return token UUID as part of API response
1 parent 37eecfb commit 4fac00c

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

api/create_token.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import (
1313
type CreateTokenRequest struct{}
1414

1515
type CreateTokenResponse struct {
16-
Success bool `json:"success"`
17-
Token string `json:"token"`
16+
Success bool `json:"success"`
17+
Token string `json:"token"`
18+
TokenUUID string `json:"token-uuid"`
1819
}
1920

2021
func CreateTokenUsecase(authDb *auth.Database) usecase.Interactor {
@@ -28,7 +29,7 @@ func CreateTokenUsecase(authDb *auth.Database) usecase.Interactor {
2829
) error {
2930
user := auth.GetContextUser(ctx)
3031

31-
token, err := tokenSys.CreateToken(user.Name)
32+
token, tokenUuid, err := tokenSys.CreateToken(user.Name)
3233
if err != nil {
3334
slog.ErrorContext(
3435
ctx,
@@ -44,6 +45,7 @@ func CreateTokenUsecase(authDb *auth.Database) usecase.Interactor {
4445

4546
resp.Success = true
4647
resp.Token = token
48+
resp.TokenUUID = tokenUuid
4749

4850
return nil
4951
},

cmd/flowg/admin_token_create.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func NewAdminTokenCreateCommand() *cobra.Command {
5454
return
5555
}
5656

57-
token, err := tokenSys.CreateToken(user.Name)
57+
token, _, err := tokenSys.CreateToken(user.Name)
5858
if err != nil {
5959
fmt.Fprintln(os.Stderr, "ERROR: Failed to generate token:", err)
6060
exitCode = 1

internal/data/auth/system_token.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@ func NewTokenSystem(backend *Database) *TokenSystem {
2121
return &TokenSystem{backend: backend}
2222
}
2323

24-
func (sys *TokenSystem) CreateToken(username string) (string, error) {
24+
func (sys *TokenSystem) CreateToken(username string) (string, string, error) {
2525
token, err := newToken(32)
2626
if err != nil {
27-
return "", err
27+
return "", "", err
2828
}
2929

3030
tokenHash, err := hash.HashPassword(token)
3131
if err != nil {
32-
return "", fmt.Errorf("failed to hash token: %w", err)
32+
return "", "", fmt.Errorf("failed to hash token: %w", err)
3333
}
3434

35+
tokenUuid := uuid.New().String()
36+
3537
err = sys.backend.db.Update(func(txn *badger.Txn) error {
3638
userKey := []byte(fmt.Sprintf("index:user:%s", username))
3739
_, err := txn.Get(userKey)
@@ -43,7 +45,7 @@ func (sys *TokenSystem) CreateToken(username string) (string, error) {
4345
return fmt.Errorf("failed to check if user '%s' exists: %w", username, err)
4446
}
4547

46-
tokenKey := []byte(fmt.Sprintf("pat:%s:%s", username, uuid.New().String()))
48+
tokenKey := []byte(fmt.Sprintf("pat:%s:%s", username, tokenUuid))
4749
err = txn.Set(tokenKey, []byte(tokenHash))
4850
if err != nil {
4951
return fmt.Errorf("failed to add token to user '%s': %w", username, err)
@@ -53,10 +55,10 @@ func (sys *TokenSystem) CreateToken(username string) (string, error) {
5355
})
5456

5557
if err != nil {
56-
return "", err
58+
return "", "", err
5759
}
5860

59-
return token, nil
61+
return token, tokenUuid, nil
6062
}
6163

6264
func (sys *TokenSystem) VerifyToken(token string) (*User, error) {

web/apps/account/controllers/create_token.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func CreateToken(
2121
r = r.WithContext(webutils.WithNotificationSystem(r.Context()))
2222

2323
user := auth.GetContextUser(r.Context())
24-
token, err := tokenSys.CreateToken(user.Name)
24+
token, _, err := tokenSys.CreateToken(user.Name)
2525
if err != nil {
2626
webutils.LogError(r.Context(), "Failed to create token", err)
2727
webutils.NotifyError(r.Context(), "Could not create token")

0 commit comments

Comments
 (0)