Skip to content

Commit 5cc60c0

Browse files
authored
feat: Archive set_default_account operations (#3385)
* first * Fix archive * Temporarily disable archive canister DID compatibility etst * Fix archive.did
1 parent 3d6116a commit 5cc60c0

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

src/archive/archive.did

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ type Operation = variant {
6565
name : opt Private;
6666
};
6767
delete_account;
68+
set_default_account;
6869
};
6970

7071
type Entry = record {

src/canister_tests/src/api/archive.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ pub mod compat {
9898
UpdateAccount { name: Option<Private> },
9999
#[serde(rename = "delete_account")]
100100
DeleteAccount,
101+
#[serde(rename = "set_default_account")]
102+
SetDefaultAccount,
101103
}
102104

103105
impl From<Operation> for CompatOperation {
@@ -134,6 +136,7 @@ pub mod compat {
134136
Operation::CreateAccount { name } => CompatOperation::CreateAccount { name },
135137
Operation::UpdateAccount { name } => CompatOperation::UpdateAccount { name },
136138
Operation::DeleteAccount => CompatOperation::DeleteAccount,
139+
Operation::SetDefaultAccount => CompatOperation::SetDefaultAccount,
137140
}
138141
}
139142
}

src/internet_identity/src/main.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::anchor_management::tentative_device_registration;
22
use crate::archive::ArchiveState;
33
use crate::assets::init_assets;
4+
use crate::authz_utils::IdentityUpdateError;
45
use crate::state::persistent_state;
56
use crate::stats::event_stats::all_aggregations_top_n;
67
use anchor_management::registration;
@@ -12,7 +13,7 @@ use ic_canister_sig_creation::signature_map::LABEL_SIG;
1213
use ic_cdk::api::{caller, set_certified_data, trap};
1314
use ic_cdk::call;
1415
use ic_cdk_macros::{init, post_upgrade, pre_upgrade, query, update};
15-
use internet_identity_interface::archive::types::BufferedEntry;
16+
use internet_identity_interface::archive::types::{BufferedEntry, Operation};
1617
use internet_identity_interface::http_gateway::{HttpRequest, HttpResponse};
1718
use internet_identity_interface::internet_identity::types::openid::{
1819
OpenIdCredentialAddError, OpenIdCredentialRemoveError, OpenIdDelegationError,
@@ -402,19 +403,34 @@ fn get_default_account(
402403
Ok(default_account_info)
403404
}
404405

406+
impl From<IdentityUpdateError> for SetDefaultAccountError {
407+
fn from(src: IdentityUpdateError) -> Self {
408+
match src {
409+
IdentityUpdateError::Unauthorized(principal) => Self::Unauthorized(principal),
410+
IdentityUpdateError::StorageError(anchor_number, storage_error) => {
411+
Self::InternalCanisterError(format!(
412+
"Identity: {}, Error: {}",
413+
anchor_number, storage_error
414+
))
415+
}
416+
}
417+
}
418+
}
419+
405420
#[update]
406421
fn set_default_account(
407422
anchor_number: AnchorNumber,
408423
origin: FrontendHostname,
409424
account_number: Option<AccountNumber>,
410425
) -> Result<AccountInfo, SetDefaultAccountError> {
411-
check_authorization(anchor_number)
412-
.map_err(|err| SetDefaultAccountError::Unauthorized(err.principal))?;
413-
414-
let default_account_info =
415-
account_management::set_default_account_for_origin(anchor_number, origin, account_number)?;
416-
417-
Ok(default_account_info)
426+
anchor_operation_with_authz_check(anchor_number, |_| {
427+
let result = account_management::set_default_account_for_origin(
428+
anchor_number,
429+
origin,
430+
account_number,
431+
)?;
432+
Ok((result, Operation::SetDefaultAccount))
433+
})
418434
}
419435

420436
#[update]

src/internet_identity_interface/src/archive/types.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ pub enum Operation {
5454
UpdateAccount { name: Option<Private> },
5555
#[serde(rename = "delete_account")]
5656
DeleteAccount,
57+
58+
#[serde(rename = "set_default_account")]
59+
SetDefaultAccount,
5760
}
5861

5962
#[derive(Eq, PartialEq, Clone, Debug, CandidType, Deserialize)]

0 commit comments

Comments
 (0)