Implement session-owned first delivery and password reissue scenarios

This commit is contained in:
2026-10-30 21:25:49 +02:00
parent ed602f0596
commit 7cef400b9a
9 changed files with 726 additions and 575 deletions
+10 -14
View File
@@ -12,10 +12,7 @@ use crate::persistence::{BackupComplete, PersistedState, PersistenceError, Saved
use crate::vault::VaultBundle;
use crate::wireguard::ConfigDocument;
use super::{
AppError, Application, historical_apply_from_saved, promote_matching_issue_map,
retain_matching_issue_map,
};
use super::{AppError, Application, historical_apply_from_saved};
struct PreparedCommit {
proposed: SavedBytes,
@@ -109,9 +106,10 @@ pub(super) fn commit(
application.saved = prepared.proposed;
application.draft.states = prepared.states;
application.draft.document = prepared.document;
application.invalidate_active_issue_authorizations();
promote_matching_issue_map(
&mut application.initial_issues,
application
.first_delivery
.invalidate_active_authorizations();
application.first_delivery.promote_matching(
&application.draft.document,
application.draft.vault.as_ref(),
);
@@ -131,15 +129,13 @@ fn retain_first_issue_rights_after_failed_install(application: &mut Application)
.and_then(|bytes| std::str::from_utf8(bytes).ok())
.and_then(|text| VaultBundle::from_toml(text).ok());
if let Some(document) = document {
retain_matching_issue_map(
&mut application.initial_issues,
&document,
vault.as_ref(),
);
application
.first_delivery
.retain_matching(&document, vault.as_ref());
} else {
application.initial_issues.clear();
application.first_delivery.clear();
}
}
Err(_) => application.initial_issues.clear(),
Err(_) => application.first_delivery.clear(),
}
}