1
1
package utils
2
2
3
3
import (
4
+ "fmt"
4
5
"os"
5
6
"path/filepath"
6
7
"regexp"
@@ -32,12 +33,20 @@ func LoadAccessTokenFS(fsys afero.Fs) (string, error) {
32
33
}
33
34
34
35
func loadAccessToken (fsys afero.Fs ) (string , error ) {
36
+ logger := GetDebugLogger ()
35
37
// Env takes precedence
36
38
if accessToken := os .Getenv ("SUPABASE_ACCESS_TOKEN" ); accessToken != "" {
39
+ fmt .Fprintln (logger , "Using access token from env var..." )
37
40
return accessToken , nil
38
41
}
39
- // Load from native credentials store
42
+ // Load from current profile
43
+ if accessToken , err := credentials .StoreProvider .Get (CurrentProfile .Name ); err == nil {
44
+ fmt .Fprintln (logger , "Using access token for profile:" , CurrentProfile .Name )
45
+ return accessToken , nil
46
+ }
47
+ // Load from legacy key for backwards compatibility
40
48
if accessToken , err := credentials .StoreProvider .Get (AccessTokenKey ); err == nil {
49
+ fmt .Fprintln (logger , "Using access token from credentials store..." )
41
50
return accessToken , nil
42
51
}
43
52
// Fallback to token file
@@ -55,6 +64,7 @@ func fallbackLoadToken(fsys afero.Fs) (string, error) {
55
64
} else if err != nil {
56
65
return "" , errors .Errorf ("failed to read access token file: %w" , err )
57
66
}
67
+ fmt .Fprintln (GetDebugLogger (), "Using access token from file:" , path )
58
68
return string (accessToken ), nil
59
69
}
60
70
@@ -63,8 +73,10 @@ func SaveAccessToken(accessToken string, fsys afero.Fs) error {
63
73
if ! AccessTokenPattern .MatchString (accessToken ) {
64
74
return errors .New (ErrInvalidToken )
65
75
}
66
- // Save to native credentials store
67
- if err := credentials .StoreProvider .Set (AccessTokenKey , accessToken ); err == nil {
76
+ // Save to current profile
77
+ if err := credentials .StoreProvider .Set (CurrentProfile .Name , accessToken ); err != nil {
78
+ fmt .Fprintln (GetDebugLogger (), err )
79
+ } else {
68
80
return nil
69
81
}
70
82
// Fallback to token file
@@ -87,19 +99,20 @@ func fallbackSaveToken(accessToken string, fsys afero.Fs) error {
87
99
88
100
func DeleteAccessToken (fsys afero.Fs ) error {
89
101
// Always delete the fallback token file to handle legacy CLI
90
- if err := fallbackDeleteToken (fsys ); err == nil {
91
- // Typically user system should only have either token file or keyring.
92
- // But we delete from both just in case.
93
- _ = credentials .StoreProvider .Delete (AccessTokenKey )
94
- return nil
95
- } else if ! errors .Is (err , os .ErrNotExist ) {
102
+ if err := fallbackDeleteToken (fsys ); err != nil && ! errors .Is (err , os .ErrNotExist ) {
96
103
return err
97
104
}
98
- // Fallback not found, delete from native credentials store
99
- err := credentials .StoreProvider .Delete (AccessTokenKey )
100
- if errors .Is (err , credentials .ErrNotSupported ) || errors .Is (err , keyring .ErrNotFound ) {
101
- return errors .New (ErrNotLoggedIn )
102
- } else if err != nil {
105
+ // Always delete from legacy keyring
106
+ if err := credentials .StoreProvider .Delete (AccessTokenKey ); err != nil && ! errors .Is (err , keyring .ErrNotFound ) {
107
+ fmt .Fprintln (GetDebugLogger (), err )
108
+ }
109
+ // Delete profile from native credentials store
110
+ if err := credentials .StoreProvider .Delete (CurrentProfile .Name ); err != nil {
111
+ if errors .Is (err , credentials .ErrNotSupported ) ||
112
+ errors .Is (err , keyring .ErrUnsupportedPlatform ) ||
113
+ errors .Is (err , keyring .ErrNotFound ) {
114
+ return errors .New (ErrNotLoggedIn )
115
+ }
103
116
return errors .Errorf ("failed to delete access token from keyring: %w" , err )
104
117
}
105
118
return nil
0 commit comments