@@ -23,7 +23,6 @@ const (
23
23
)
24
24
25
25
const (
26
- driverName = "SNOWFLAKE-GO-DRIVER"
27
26
credCacheDirEnv = "SF_TEMPORARY_CREDENTIAL_CACHE_DIR"
28
27
credCacheFileName = "temporary_credential.json"
29
28
)
@@ -167,6 +166,23 @@ func buildCredCacheDirPath() string {
167
166
return ""
168
167
}
169
168
169
+ func (ssm * fileBasedSecureStorageManager ) getTokens (data map [string ]any ) map [string ]interface {} {
170
+ val , ok := data ["tokens" ]
171
+ emptyMap := map [string ]interface {}{}
172
+ if ! ok {
173
+ data ["tokens" ] = emptyMap
174
+ return emptyMap
175
+ }
176
+
177
+ tokens , ok := val .(map [string ]interface {})
178
+ if ! ok {
179
+ data ["tokens" ] = emptyMap
180
+ return emptyMap
181
+ }
182
+
183
+ return tokens
184
+ }
185
+
170
186
func (ssm * fileBasedSecureStorageManager ) setCredential (tokenSpec * secureTokenSpec , value string ) {
171
187
credentialsKey := tokenSpec .buildKey ()
172
188
err := ssm .lockFile ()
@@ -176,13 +192,8 @@ func (ssm *fileBasedSecureStorageManager) setCredential(tokenSpec *secureTokenSp
176
192
}
177
193
defer ssm .unlockFile ()
178
194
179
- credCache , err := ssm .readTemporaryCacheFile ()
180
- if err != nil {
181
- logger .Warnf ("Set credential failed. Unable to read cache. %v" , err )
182
- return
183
- }
184
-
185
- credCache ["tokens" ][credentialsKey ] = value
195
+ credCache := ssm .readTemporaryCacheFile ()
196
+ ssm .getTokens (credCache )[credentialsKey ] = value
186
197
187
198
err = ssm .writeTemporaryCacheFile (credCache )
188
199
if err != nil {
@@ -212,6 +223,7 @@ func (ssm *fileBasedSecureStorageManager) lockFile() error {
212
223
return fmt .Errorf ("failed to create cache lock: %v, err: %v" , lockPath , err )
213
224
}
214
225
locked = true
226
+ break
215
227
}
216
228
217
229
if ! locked {
@@ -232,7 +244,6 @@ func (ssm *fileBasedSecureStorageManager) lockFile() error {
232
244
return fmt .Errorf ("failed to recreate cache lock after removing stale lock. %v, err: %v" , lockPath , err )
233
245
}
234
246
}
235
- return fmt .Errorf ("failed to lock cache lock %v" , lockPath )
236
247
}
237
248
return nil
238
249
}
@@ -247,29 +258,25 @@ func (ssm *fileBasedSecureStorageManager) unlockFile() {
247
258
248
259
func (ssm * fileBasedSecureStorageManager ) getCredential (tokenSpec * secureTokenSpec ) string {
249
260
credentialsKey := tokenSpec .buildKey ()
250
- credCache := map [string ]map [string ]string {}
251
-
252
261
err := ssm .lockFile ()
253
262
if err != nil {
254
263
logger .Warn ("Failed to lock credential cache file." )
255
264
return ""
256
265
}
257
266
258
- credCache , err = ssm .readTemporaryCacheFile ()
267
+ credCache : = ssm .readTemporaryCacheFile ()
259
268
ssm .unlockFile ()
260
- if err != nil {
261
- logger . Warnf ( "Failed to read temporary cache file. %v. \n " , err )
269
+ cred , ok := ssm . getTokens ( credCache )[ credentialsKey ]
270
+ if ! ok {
262
271
return ""
263
272
}
264
273
265
- cred := credCache ["tokens" ][credentialsKey ]
266
- if cred != "" {
267
- logger .Debug ("Successfully read token. Returning as string" )
268
- } else {
269
- logger .Debug ("Returned credential is empty" )
274
+ credStr , ok := cred .(string )
275
+ if ! ok {
276
+ return ""
270
277
}
271
278
272
- return cred
279
+ return credStr
273
280
}
274
281
275
282
func (ssm * fileBasedSecureStorageManager ) credFilePath () string {
@@ -303,24 +310,26 @@ func (ssm *fileBasedSecureStorageManager) ensurePermissions() error {
303
310
return nil
304
311
}
305
312
306
- func (ssm * fileBasedSecureStorageManager ) readTemporaryCacheFile () ( map [string ]map [ string ] string , error ) {
313
+ func (ssm * fileBasedSecureStorageManager ) readTemporaryCacheFile () map [string ]any {
307
314
err := ssm .ensurePermissions ()
308
315
if err != nil {
309
- return nil , err
316
+ logger .Warnf ("Failed to ensure permission for temporary cache file. %v.\n " , err )
317
+ return map [string ]any {}
310
318
}
311
319
312
320
jsonData , err := os .ReadFile (ssm .credFilePath ())
313
321
if err != nil {
314
- return nil , fmt .Errorf ("failed to read credential cache file: %w" , err )
322
+ logger .Warnf ("Failed to read credential cache file. %v.\n " , err )
323
+ return map [string ]any {}
315
324
}
316
325
317
- credentialsMap := map [string ]map [ string ] string {}
326
+ credentialsMap := map [string ]any {}
318
327
err = json .Unmarshal ([]byte (jsonData ), & credentialsMap )
319
328
if err != nil {
320
- return nil , fmt . Errorf ( "failed to unmarshal credential cache file: %w " , err )
329
+ logger . Warnf ( "Failed to unmarshal credential cache file. %v. \n " , err )
321
330
}
322
331
323
- return credentialsMap , nil
332
+ return credentialsMap
324
333
}
325
334
326
335
func (ssm * fileBasedSecureStorageManager ) deleteCredential (tokenSpec * secureTokenSpec ) {
@@ -332,13 +341,8 @@ func (ssm *fileBasedSecureStorageManager) deleteCredential(tokenSpec *secureToke
332
341
}
333
342
defer ssm .unlockFile ()
334
343
335
- credCache , err := ssm .readTemporaryCacheFile ()
336
- if err != nil {
337
- logger .Warnf ("Set credential failed. Unable to read cache. %v" , err )
338
- return
339
- }
340
-
341
- delete (credCache ["tokens" ], credentialsKey )
344
+ credCache := ssm .readTemporaryCacheFile ()
345
+ delete (ssm .getTokens (credCache ), credentialsKey )
342
346
343
347
err = ssm .writeTemporaryCacheFile (credCache )
344
348
if err != nil {
@@ -349,7 +353,7 @@ func (ssm *fileBasedSecureStorageManager) deleteCredential(tokenSpec *secureToke
349
353
return
350
354
}
351
355
352
- func (ssm * fileBasedSecureStorageManager ) writeTemporaryCacheFile (cache map [string ]map [ string ] string ) error {
356
+ func (ssm * fileBasedSecureStorageManager ) writeTemporaryCacheFile (cache map [string ]any ) error {
353
357
bytes , err := json .Marshal (cache )
354
358
if err != nil {
355
359
return fmt .Errorf ("failed to marshal credential cache map. %w" , err )
@@ -458,9 +462,7 @@ func (ssm *keyringSecureStorageManager) deleteCredential(tokenSpec *secureTokenS
458
462
}
459
463
460
464
func buildCredentialsKey (host , user string , credType tokenType ) string {
461
- host = strings .ToUpper (host )
462
- user = strings .ToUpper (user )
463
- credTypeStr := strings .ToUpper (string (credType ))
465
+ credTypeStr := string (credType )
464
466
return host + ":" + user + ":" + credTypeStr
465
467
}
466
468
0 commit comments