@@ -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 ) ]
@@ -123,8 +122,8 @@ impl DeviceRegistration {
123122 }
124123
125124 /// Loads the OIDC registered client from the secret store, deleting it if it is expired.
126- async fn load_from_secret_store ( secret_store : & SecretStore , region : & Region ) -> Result < Option < Self > , AuthError > {
127- let device_registration = secret_store . get ( Self :: SECRET_KEY ) . await ?;
125+ async fn load_from_secret_store ( database : & Database , region : & Region ) -> Result < Option < Self > , AuthError > {
126+ let device_registration = database . get_secret ( Self :: SECRET_KEY ) . await ?;
128127
129128 if let Some ( device_registration) = device_registration {
130129 // check that the data is not expired, assume it is invalid if not present
@@ -138,7 +137,7 @@ impl DeviceRegistration {
138137 }
139138
140139 // delete the data if its expired or invalid
141- if let Err ( err) = secret_store . delete ( Self :: SECRET_KEY ) . await {
140+ if let Err ( err) = database . delete_secret ( Self :: SECRET_KEY ) . await {
142141 error ! ( ?err, "Failed to delete device registration from keychain" ) ;
143142 }
144143
@@ -152,7 +151,7 @@ impl DeviceRegistration {
152151 client : & Client ,
153152 region : & Region ,
154153 ) -> Result < Self , AuthError > {
155- match Self :: load_from_secret_store ( & database. secret_store , region) . await {
154+ match Self :: load_from_secret_store ( database, region) . await {
156155 Ok ( Some ( registration) ) if registration. oauth_flow == OAuthFlow :: DeviceCode => match & registration. scopes {
157156 Some ( scopes) if is_scopes ( scopes) => return Ok ( registration) ,
158157 _ => warn ! ( "Invalid scopes in device registration, ignoring" ) ,
@@ -181,17 +180,17 @@ impl DeviceRegistration {
181180 SCOPES . iter ( ) . map ( |s| ( * s) . to_owned ( ) ) . collect ( ) ,
182181 ) ;
183182
184- if let Err ( err) = device_registration. save ( & database. secret_store ) . await {
183+ if let Err ( err) = device_registration. save ( database) . await {
185184 error ! ( ?err, "Failed to write device registration to keychain" ) ;
186185 }
187186
188187 Ok ( device_registration)
189188 }
190189
191190 /// Saves to the passed secret store.
192- pub async fn save ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
191+ pub async fn save ( & self , secret_store : & Database ) -> Result < ( ) , AuthError > {
193192 secret_store
194- . set ( Self :: SECRET_KEY , & serde_json:: to_string ( & self ) ?)
193+ . set_secret ( Self :: SECRET_KEY , & serde_json:: to_string ( & self ) ?)
195194 . await ?;
196195 Ok ( ( ) )
197196 }
@@ -285,8 +284,8 @@ impl BuilderIdToken {
285284 }
286285
287286 /// Load the token from the keychain, refresh the token if it is expired and return it
288- pub async fn load ( database : & mut Database ) -> Result < Option < Self > , AuthError > {
289- match database. secret_store . get ( Self :: SECRET_KEY ) . await {
287+ pub async fn load ( database : & Database ) -> Result < Option < Self > , AuthError > {
288+ match database. get_secret ( Self :: SECRET_KEY ) . await {
290289 Ok ( Some ( secret) ) => {
291290 let token: Option < Self > = serde_json:: from_str ( & secret. 0 ) ?;
292291 match token {
@@ -296,7 +295,7 @@ impl BuilderIdToken {
296295 let client = client ( region. clone ( ) ) ;
297296 // if token is expired try to refresh
298297 if token. is_expired ( ) {
299- token. refresh_token ( & client, & database. secret_store , & region) . await
298+ token. refresh_token ( & client, database, & region) . await
300299 } else {
301300 Ok ( Some ( token) )
302301 }
@@ -316,19 +315,19 @@ impl BuilderIdToken {
316315 pub async fn refresh_token (
317316 & self ,
318317 client : & Client ,
319- secret_store : & SecretStore ,
318+ database : & Database ,
320319 region : & Region ,
321320 ) -> Result < Option < Self > , AuthError > {
322321 let Some ( refresh_token) = & self . refresh_token else {
323322 // if the token is expired and has no refresh token, delete it
324- if let Err ( err) = self . delete ( secret_store ) . await {
323+ if let Err ( err) = self . delete ( database ) . await {
325324 error ! ( ?err, "Failed to delete builder id token" ) ;
326325 }
327326
328327 return Ok ( None ) ;
329328 } ;
330329
331- let registration = match DeviceRegistration :: load_from_secret_store ( secret_store , region) . await ? {
330+ let registration = match DeviceRegistration :: load_from_secret_store ( database , region) . await ? {
332331 Some ( registration) if registration. oauth_flow == self . oauth_flow => registration,
333332 // If the OIDC client registration is for a different oauth flow or doesn't exist, then
334333 // we can't refresh the token.
@@ -365,7 +364,7 @@ impl BuilderIdToken {
365364 ) ;
366365 debug ! ( "Refreshed access token, new token: {:?}" , token) ;
367366
368- if let Err ( err) = token. save ( secret_store ) . await {
367+ if let Err ( err) = token. save ( database ) . await {
369368 error ! ( ?err, "Failed to store builder id access token" ) ;
370369 } ;
371370
@@ -378,7 +377,7 @@ impl BuilderIdToken {
378377 // if the error is the client's fault, clear the token
379378 if let SdkError :: ServiceError ( service_err) = & err {
380379 if !service_err. err ( ) . is_slow_down_exception ( ) {
381- if let Err ( err) = self . delete ( secret_store ) . await {
380+ if let Err ( err) = self . delete ( database ) . await {
382381 error ! ( ?err, "Failed to delete builder id token" ) ;
383382 }
384383 }
@@ -398,16 +397,16 @@ impl BuilderIdToken {
398397 }
399398
400399 /// Save the token to the keychain
401- pub async fn save ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
402- secret_store
403- . set ( Self :: SECRET_KEY , & serde_json:: to_string ( self ) ?)
400+ pub async fn save ( & self , database : & Database ) -> Result < ( ) , AuthError > {
401+ database
402+ . set_secret ( Self :: SECRET_KEY , & serde_json:: to_string ( self ) ?)
404403 . await ?;
405404 Ok ( ( ) )
406405 }
407406
408407 /// Delete the token from the keychain
409- pub async fn delete ( & self , secret_store : & SecretStore ) -> Result < ( ) , AuthError > {
410- secret_store . delete ( Self :: SECRET_KEY ) . await ?;
408+ pub async fn delete ( & self , database : & Database ) -> Result < ( ) , AuthError > {
409+ database . delete_secret ( Self :: SECRET_KEY ) . await ?;
411410 Ok ( ( ) )
412411 }
413412
@@ -479,7 +478,7 @@ pub async fn poll_create_token(
479478 let token: BuilderIdToken =
480479 BuilderIdToken :: from_output ( output, region, start_url, OAuthFlow :: DeviceCode , scopes) ;
481480
482- if let Err ( err) = token. save ( & database. secret_store ) . await {
481+ if let Err ( err) = token. save ( database) . await {
483482 error ! ( ?err, "Failed to store builder id token" ) ;
484483 } ;
485484
@@ -500,13 +499,13 @@ pub async fn is_logged_in(database: &mut Database) -> bool {
500499}
501500
502501pub async fn logout ( database : & mut Database ) -> Result < ( ) , AuthError > {
503- let Ok ( secret_store) = SecretStore :: new ( ) . await else {
502+ let Ok ( secret_store) = Database :: new ( ) . await else {
504503 return Ok ( ( ) ) ;
505504 } ;
506505
507506 let ( builder_res, device_res) = tokio:: join!(
508- secret_store. delete ( BuilderIdToken :: SECRET_KEY ) ,
509- secret_store. delete ( DeviceRegistration :: SECRET_KEY ) ,
507+ secret_store. delete_secret ( BuilderIdToken :: SECRET_KEY ) ,
508+ secret_store. delete_secret ( DeviceRegistration :: SECRET_KEY ) ,
510509 ) ;
511510
512511 let profile_res = database. unset_auth_profile ( ) ;
0 commit comments