Skip to main content

junobuild_satellite/access_keys/
store.rs

1use crate::memory::state::STATE;
2use junobuild_shared::segments::access_keys::{
3    delete_access_keys as delete_controllers_impl, filter_admin_access_keys,
4    set_access_keys as set_controllers_impl,
5};
6use junobuild_shared::types::interface::SetAccessKey;
7use junobuild_shared::types::state::{AccessKeyId, AccessKeys};
8
9// ---------------------------------------------------------
10// Access keys
11// ---------------------------------------------------------
12
13pub fn set_access_keys(new_controllers: &[AccessKeyId], controller: &SetAccessKey) {
14    STATE.with(|state| {
15        set_controllers_impl(
16            new_controllers,
17            controller,
18            &mut state.borrow_mut().heap.controllers,
19        )
20    })
21}
22
23pub fn delete_access_keys(remove_controllers: &[AccessKeyId]) {
24    STATE.with(|state| {
25        delete_controllers_impl(remove_controllers, &mut state.borrow_mut().heap.controllers)
26    })
27}
28
29/// Returns all access keys of this satellite.
30///
31/// Each entry is a `ControllerId` (a `Principal`) mapped to a `Controller` struct
32/// containing metadata, scope, and optional expiry.
33pub fn get_access_keys() -> AccessKeys {
34    STATE.with(|state| state.borrow().heap.controllers.clone())
35}
36
37/// Returns all admin access keys of this satellite.
38///
39/// Filters the full access key list to only those with `ControllerScope::Admin`.
40/// Admin access keys never expire and are also controllers of the canister
41/// as defined by the Internet Computer.
42pub fn get_admin_access_keys() -> AccessKeys {
43    STATE.with(|state| filter_admin_access_keys(&state.borrow().heap.controllers))
44}