@@ -52,10 +52,9 @@ use crate::auth::AuthError;
5252use crate :: auth:: consts:: * ;
5353use crate :: auth:: scope:: is_scopes;
5454use crate :: aws_common:: app_name;
55- use crate :: database:: Database ;
56- use crate :: database :: secret_store :: {
55+ use crate :: database:: {
56+ Database ,
5757 Secret ,
58- SecretStore ,
5958} ;
6059
6160#[ derive( Debug , Copy , Clone , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
@@ -132,8 +131,8 @@ impl DeviceRegistration {
132131 }
133132
134133 /// Loads the OIDC registered client from the secret store, deleting it if it is expired.
135- async fn load_from_secret_store ( secret_store : & SecretStore , region : & Region ) -> Result < Option < Self > , AuthError > {
136- let device_registration = secret_store . get ( Self :: SECRET_KEY ) . await ?;
134+ async fn load_from_secret_store ( database : & Database , region : & Region ) -> Result < Option < Self > , AuthError > {
135+ let device_registration = database . get_secret ( Self :: SECRET_KEY ) . await ?;
137136
138137 if let Some ( device_registration) = device_registration {
139138 // check that the data is not expired, assume it is invalid if not present
@@ -147,7 +146,7 @@ impl DeviceRegistration {
147146 }
148147
149148 // delete the data if its expired or invalid
150- if let Err ( err) = secret_store . delete ( Self :: SECRET_KEY ) . await {
149+ if let Err ( err) = database . delete_secret ( Self :: SECRET_KEY ) . await {
151150 error ! ( ?err, "Failed to delete device registration from keychain" ) ;
152151 }
153152
@@ -161,7 +160,7 @@ impl DeviceRegistration {
161160 client : & Client ,
162161 region : & Region ,
163162 ) -> Result < Self , AuthError > {
164- match Self :: load_from_secret_store ( & database. secret_store , region) . await {
163+ match Self :: load_from_secret_store ( database, region) . await {
165164 Ok ( Some ( registration) ) if registration. oauth_flow == OAuthFlow :: DeviceCode => match & registration. scopes {
166165 Some ( scopes) if is_scopes ( scopes) => return Ok ( registration) ,
167166 _ => warn ! ( "Invalid scopes in device registration, ignoring" ) ,
@@ -190,17 +189,17 @@ impl DeviceRegistration {
190189 SCOPES . iter ( ) . map ( |s| ( * s) . to_owned ( ) ) . collect ( ) ,
191190 ) ;
192191
193- if let Err ( err) = device_registration. save ( & database. secret_store ) . await {
192+ if let Err ( err) = device_registration. save ( database) . await {
194193 error ! ( ?err, "Failed to write device registration to keychain" ) ;
195194 }
196195
197196 Ok ( device_registration)
198197 }
199198
200199 /// Saves to the passed secret store.
201- pub async fn save ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
200+ pub async fn save ( & self , secret_store : & Database ) -> Result < ( ) , AuthError > {
202201 secret_store
203- . set ( Self :: SECRET_KEY , & serde_json:: to_string ( & self ) ?)
202+ . set_secret ( Self :: SECRET_KEY , & serde_json:: to_string ( & self ) ?)
204203 . await ?;
205204 Ok ( ( ) )
206205 }
@@ -294,8 +293,8 @@ impl BuilderIdToken {
294293 }
295294
296295 /// Load the token from the keychain, refresh the token if it is expired and return it
297- pub async fn load ( database : & mut Database ) -> Result < Option < Self > , AuthError > {
298- match database. secret_store . get ( Self :: SECRET_KEY ) . await {
296+ pub async fn load ( database : & Database ) -> Result < Option < Self > , AuthError > {
297+ match database. get_secret ( Self :: SECRET_KEY ) . await {
299298 Ok ( Some ( secret) ) => {
300299 let token: Option < Self > = serde_json:: from_str ( & secret. 0 ) ?;
301300 match token {
@@ -305,7 +304,7 @@ impl BuilderIdToken {
305304 let client = client ( region. clone ( ) ) ;
306305 // if token is expired try to refresh
307306 if token. is_expired ( ) {
308- token. refresh_token ( & client, & database. secret_store , & region) . await
307+ token. refresh_token ( & client, database, & region) . await
309308 } else {
310309 Ok ( Some ( token) )
311310 }
@@ -325,19 +324,19 @@ impl BuilderIdToken {
325324 pub async fn refresh_token (
326325 & self ,
327326 client : & Client ,
328- secret_store : & SecretStore ,
327+ database : & Database ,
329328 region : & Region ,
330329 ) -> Result < Option < Self > , AuthError > {
331330 let Some ( refresh_token) = & self . refresh_token else {
332331 // if the token is expired and has no refresh token, delete it
333- if let Err ( err) = self . delete ( secret_store ) . await {
332+ if let Err ( err) = self . delete ( database ) . await {
334333 error ! ( ?err, "Failed to delete builder id token" ) ;
335334 }
336335
337336 return Ok ( None ) ;
338337 } ;
339338
340- let registration = match DeviceRegistration :: load_from_secret_store ( secret_store , region) . await ? {
339+ let registration = match DeviceRegistration :: load_from_secret_store ( database , region) . await ? {
341340 Some ( registration) if registration. oauth_flow == self . oauth_flow => registration,
342341 // If the OIDC client registration is for a different oauth flow or doesn't exist, then
343342 // we can't refresh the token.
@@ -374,7 +373,7 @@ impl BuilderIdToken {
374373 ) ;
375374 debug ! ( "Refreshed access token, new token: {:?}" , token) ;
376375
377- if let Err ( err) = token. save ( secret_store ) . await {
376+ if let Err ( err) = token. save ( database ) . await {
378377 error ! ( ?err, "Failed to store builder id access token" ) ;
379378 } ;
380379
@@ -387,7 +386,7 @@ impl BuilderIdToken {
387386 // if the error is the client's fault, clear the token
388387 if let SdkError :: ServiceError ( service_err) = & err {
389388 if !service_err. err ( ) . is_slow_down_exception ( ) {
390- if let Err ( err) = self . delete ( secret_store ) . await {
389+ if let Err ( err) = self . delete ( database ) . await {
391390 error ! ( ?err, "Failed to delete builder id token" ) ;
392391 }
393392 }
@@ -407,16 +406,16 @@ impl BuilderIdToken {
407406 }
408407
409408 /// Save the token to the keychain
410- pub async fn save ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
411- secret_store
412- . set ( Self :: SECRET_KEY , & serde_json:: to_string ( self ) ?)
409+ pub async fn save ( & self , database : & Database ) -> Result < ( ) , AuthError > {
410+ database
411+ . set_secret ( Self :: SECRET_KEY , & serde_json:: to_string ( self ) ?)
413412 . await ?;
414413 Ok ( ( ) )
415414 }
416415
417416 /// Delete the token from the keychain
418- pub async fn delete ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
419- secret_store . delete ( Self :: SECRET_KEY ) . await ?;
417+ pub async fn delete ( & self , database : & Database ) -> Result < ( ) , AuthError > {
418+ database . delete_secret ( Self :: SECRET_KEY ) . await ?;
420419 Ok ( ( ) )
421420 }
422421
@@ -488,7 +487,7 @@ pub async fn poll_create_token(
488487 let token: BuilderIdToken =
489488 BuilderIdToken :: from_output ( output, region, start_url, OAuthFlow :: DeviceCode , scopes) ;
490489
491- if let Err ( err) = token. save ( & database. secret_store ) . await {
490+ if let Err ( err) = token. save ( database) . await {
492491 error ! ( ?err, "Failed to store builder id token" ) ;
493492 } ;
494493
@@ -509,13 +508,13 @@ pub async fn is_logged_in(database: &mut Database) -> bool {
509508}
510509
511510pub async fn logout ( database : & mut Database ) -> Result < ( ) , AuthError > {
512- let Ok ( secret_store) = SecretStore :: new ( ) . await else {
511+ let Ok ( secret_store) = Database :: new ( ) . await else {
513512 return Ok ( ( ) ) ;
514513 } ;
515514
516515 let ( builder_res, device_res) = tokio:: join!(
517- secret_store. delete ( BuilderIdToken :: SECRET_KEY ) ,
518- secret_store. delete ( DeviceRegistration :: SECRET_KEY ) ,
516+ secret_store. delete_secret ( BuilderIdToken :: SECRET_KEY ) ,
517+ secret_store. delete_secret ( DeviceRegistration :: SECRET_KEY ) ,
519518 ) ;
520519
521520 let profile_res = database. unset_auth_profile ( ) ;
0 commit comments