@@ -21,7 +21,6 @@ use crate::services::managed_telemetry::{self, run_with_deadline, CREDENTIAL_LOO
2121use crate :: services:: output_format:: OutputFormat ;
2222use crate :: services:: style:: { label, prompt_label, prompt_value, value} ;
2323use crate :: services:: telemetry_credential_storage;
24- use crate :: services:: telemetry_readiness;
2524use crate :: services:: token_storage:: { self , StoredTokens , TokenStorageError } ;
2625
2726pub const NAME : & str = "auth" ;
@@ -272,25 +271,21 @@ where
272271pub async fn run_logout ( format : AuthFormat ) -> Result < String , CliError > {
273272 run_logout_with (
274273 format,
275- telemetry_readiness:: clear,
276274 token_storage:: delete_tokens ( ) ,
277275 telemetry_credential_storage:: delete_telemetry_credential ( ) ,
278276 )
279277 . await
280278}
281279
282- async fn run_logout_with < C , W , T > (
280+ async fn run_logout_with < W , T > (
283281 format : AuthFormat ,
284- clear_readiness : C ,
285282 delete_workos : W ,
286283 delete_telemetry : T ,
287284) -> Result < String , CliError >
288285where
289- C : FnOnce ( ) -> Result < ( ) > ,
290286 W : Future < Output = Result < bool , TokenStorageError > > ,
291287 T : Future < Output = Result < bool , TokenStorageError > > ,
292288{
293- clear_readiness ( ) . map_err ( unexpected_auth_command_error) ?;
294289 let workos_result = delete_workos. await ;
295290 let telemetry_result = delete_telemetry. await ;
296291 let workos_deleted = workos_result. map_err ( auth_storage_error) ?;
@@ -397,25 +392,21 @@ where
397392
398393async fn save_new_session_tokens ( token : & auth:: TokenResponse ) -> Result < StoredTokens , CliError > {
399394 replace_session_with (
400- telemetry_readiness:: clear,
401395 telemetry_credential_storage:: delete_telemetry_credential ( ) ,
402396 || token_storage:: save_tokens ( token, CredentialAccess :: Interactive ) ,
403397 )
404398 . await
405399}
406400
407- async fn replace_session_with < C , D , S , SF > (
408- clear_readiness : C ,
401+ async fn replace_session_with < D , S , SF > (
409402 invalidate_telemetry : D ,
410403 save_session : S ,
411404) -> Result < StoredTokens , CliError >
412405where
413- C : FnOnce ( ) -> Result < ( ) > ,
414406 D : Future < Output = Result < bool , TokenStorageError > > ,
415407 S : FnOnce ( ) -> SF ,
416408 SF : Future < Output = Result < StoredTokens , TokenStorageError > > ,
417409{
418- clear_readiness ( ) . map_err ( unexpected_auth_command_error) ?;
419410 invalidate_telemetry. await . map_err ( login_storage_error) ?;
420411 save_session ( ) . await . map_err ( login_storage_error)
421412}
@@ -437,34 +428,11 @@ where
437428async fn provision_telemetry_credential (
438429 client : & AuthenticatedControlPlaneClient ,
439430) -> TelemetryProvisioningResult {
440- let provisioned = client. issue_and_save_telemetry_credential ( ) . await ;
441- let result = record_telemetry_readiness (
442- provisioned. as_ref ( ) . ok ( ) ,
443- telemetry_readiness:: mark_ready,
444- telemetry_readiness:: clear,
445- ) ;
446- if result == TelemetryProvisioningResult :: Issued {
447- enroll_current_repository_if_unbound ( ) . await ;
448- }
449- result
450- }
451-
452- fn record_telemetry_readiness < M , C > (
453- provisioned : Option < & telemetry_credential_storage:: TelemetryCredential > ,
454- mark_ready : M ,
455- clear : C ,
456- ) -> TelemetryProvisioningResult
457- where
458- M : FnOnce ( u64 ) -> Result < ( ) > ,
459- C : FnOnce ( ) -> Result < ( ) > ,
460- {
461- let recorded = provisioned
462- . is_some_and ( |credential| mark_ready ( credential. expires_at_unix_seconds ) . is_ok ( ) ) ;
463- if recorded {
464- return TelemetryProvisioningResult :: Issued ;
431+ if client. issue_and_save_telemetry_credential ( ) . await . is_err ( ) {
432+ return TelemetryProvisioningResult :: Unavailable ;
465433 }
466- let _ = clear ( ) ;
467- TelemetryProvisioningResult :: Unavailable
434+ enroll_current_repository_if_unbound ( ) . await ;
435+ TelemetryProvisioningResult :: Issued
468436}
469437
470438async fn enroll_current_repository_if_unbound ( ) {
@@ -860,10 +828,6 @@ mod tests {
860828 async fn new_session_invalidates_previous_telemetry_credential_before_saving ( ) {
861829 let order = std:: sync:: Mutex :: new ( Vec :: new ( ) ) ;
862830 let saved = replace_session_with (
863- || {
864- order. lock ( ) . unwrap ( ) . push ( "clear" ) ;
865- Ok ( ( ) )
866- } ,
867831 async {
868832 order. lock ( ) . unwrap ( ) . push ( "invalidate" ) ;
869833 Ok ( true )
@@ -876,29 +840,23 @@ mod tests {
876840 . await
877841 . expect ( "replacement should succeed" ) ;
878842 assert_eq ! ( saved, stored_tokens( ) ) ;
879- assert_eq ! ( * order. lock( ) . unwrap( ) , [ "clear" , " invalidate", "save" ] ) ;
843+ assert_eq ! ( * order. lock( ) . unwrap( ) , [ "invalidate" , "save" ] ) ;
880844
881845 let save_called = std:: sync:: atomic:: AtomicBool :: new ( false ) ;
882- let failed = replace_session_with (
883- || Ok ( ( ) ) ,
884- async { Err ( storage_failure ( ) ) } ,
885- || async {
886- save_called. store ( true , std:: sync:: atomic:: Ordering :: SeqCst ) ;
887- Ok ( stored_tokens ( ) )
888- } ,
889- )
846+ let failed = replace_session_with ( async { Err ( storage_failure ( ) ) } , || async {
847+ save_called. store ( true , std:: sync:: atomic:: Ordering :: SeqCst ) ;
848+ Ok ( stored_tokens ( ) )
849+ } )
890850 . await ;
891851 assert ! ( !save_called. load( std:: sync:: atomic:: Ordering :: SeqCst ) ) ;
892852 assert_login_storage_guidance (
893853 & failed. expect_err ( "invalidation failure fails login" ) ,
894854 AuthStorageFailure :: Database ,
895855 ) ;
896856
897- let failed = replace_session_with (
898- || Ok ( ( ) ) ,
899- async { Ok ( true ) } ,
900- || async { Err ( TokenStorageError :: CredentialAccessUnavailable ) } ,
901- )
857+ let failed = replace_session_with ( async { Ok ( true ) } , || async {
858+ Err ( TokenStorageError :: CredentialAccessUnavailable )
859+ } )
902860 . await ;
903861 assert_login_storage_guidance (
904862 & failed. expect_err ( "save failure fails login" ) ,
@@ -965,7 +923,6 @@ mod tests {
965923 async fn logout_storage_failure_keeps_command_storage_guidance ( ) {
966924 let error = run_logout_with (
967925 AuthFormat :: Json ,
968- || Ok ( ( ) ) ,
969926 async { Err ( TokenStorageError :: CredentialAccessUnavailable ) } ,
970927 async { Ok ( false ) } ,
971928 )
@@ -1265,7 +1222,7 @@ mod tests {
12651222 }
12661223
12671224 #[ tokio:: test]
1268- async fn logout_clears_readiness_and_attempts_both_deletions_before_reporting ( ) {
1225+ async fn logout_attempts_both_deletions_before_reporting ( ) {
12691226 use AuthStorageFailure :: { CredentialAccess , DatabaseLocked } ;
12701227
12711228 fn deletion ( result : Result < bool , AuthStorageFailure > ) -> Result < bool , TokenStorageError > {
@@ -1288,10 +1245,6 @@ mod tests {
12881245 let events = std:: sync:: Mutex :: new ( Vec :: new ( ) ) ;
12891246 let result = run_logout_with (
12901247 AuthFormat :: Json ,
1291- || {
1292- events. lock ( ) . unwrap ( ) . push ( "clear-readiness" ) ;
1293- Ok ( ( ) )
1294- } ,
12951248 async {
12961249 events. lock ( ) . unwrap ( ) . push ( "delete-workos" ) ;
12971250 deletion ( workos)
@@ -1305,7 +1258,7 @@ mod tests {
13051258
13061259 assert_eq ! (
13071260 * events. lock( ) . unwrap( ) ,
1308- [ "clear-readiness" , " delete-workos", "delete-telemetry" ] ,
1261+ [ "delete-workos" , "delete-telemetry" ] ,
13091262 "{workos:?} {telemetry:?}"
13101263 ) ;
13111264 match ( result, expected) {
@@ -1320,56 +1273,6 @@ mod tests {
13201273 }
13211274 }
13221275
1323- #[ test]
1324- fn telemetry_readiness_is_recorded_only_after_credential_persistence ( ) {
1325- let credential = telemetry_credential ( "tok-ready" ) ;
1326- let marked = std:: cell:: Cell :: new ( None ) ;
1327- let cleared = std:: cell:: Cell :: new ( false ) ;
1328-
1329- let issued = record_telemetry_readiness (
1330- Some ( & credential) ,
1331- |expires_at| {
1332- marked. set ( Some ( expires_at) ) ;
1333- Ok ( ( ) )
1334- } ,
1335- || {
1336- cleared. set ( true ) ;
1337- Ok ( ( ) )
1338- } ,
1339- ) ;
1340- assert_eq ! ( issued, TelemetryProvisioningResult :: Issued ) ;
1341- assert_eq ! ( marked. get( ) , Some ( credential. expires_at_unix_seconds) ) ;
1342- assert ! ( !cleared. get( ) ) ;
1343-
1344- marked. set ( None ) ;
1345- let failed = record_telemetry_readiness (
1346- None ,
1347- |expires_at| {
1348- marked. set ( Some ( expires_at) ) ;
1349- Ok ( ( ) )
1350- } ,
1351- || {
1352- cleared. set ( true ) ;
1353- Ok ( ( ) )
1354- } ,
1355- ) ;
1356- assert_eq ! ( failed, TelemetryProvisioningResult :: Unavailable ) ;
1357- assert_eq ! ( marked. get( ) , None ) ;
1358- assert ! ( cleared. get( ) ) ;
1359-
1360- cleared. set ( false ) ;
1361- let unrecorded = record_telemetry_readiness (
1362- Some ( & credential) ,
1363- |_| Err ( anyhow ! ( "read-only state directory" ) ) ,
1364- || {
1365- cleared. set ( true ) ;
1366- Ok ( ( ) )
1367- } ,
1368- ) ;
1369- assert_eq ! ( unrecorded, TelemetryProvisioningResult :: Unavailable ) ;
1370- assert ! ( cleared. get( ) ) ;
1371- }
1372-
13731276 fn access_policy ( mode : AuthMode , source : ValueSource , telemetry : bool ) -> ResolvedAccessPolicy {
13741277 use crate :: services:: config:: {
13751278 ResolvedValue , TelemetryDisabledReason , TelemetryPolicyState ,
@@ -1663,10 +1566,6 @@ mod tests {
16631566 let events = std:: sync:: Mutex :: new ( Vec :: new ( ) ) ;
16641567 let output = run_logout_with (
16651568 AuthFormat :: Json ,
1666- || {
1667- events. lock ( ) . unwrap ( ) . push ( "clear-readiness" ) ;
1668- Ok ( ( ) )
1669- } ,
16701569 async {
16711570 events. lock ( ) . unwrap ( ) . push ( "delete-workos" ) ;
16721571 Ok ( true )
@@ -1681,7 +1580,7 @@ mod tests {
16811580
16821581 assert_eq ! (
16831582 * events. lock( ) . unwrap( ) ,
1684- [ "clear-readiness" , " delete-workos", "delete-telemetry" ]
1583+ [ "delete-workos" , "delete-telemetry" ]
16851584 ) ;
16861585 assert ! ( output. contains( "\" credentials_removed\" : true" ) ) ;
16871586 }
0 commit comments