Skip to content

Commit 7c36d2b

Browse files
committed
feat: support delegation permissions
1 parent 3267c27 commit 7c36d2b

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

ic-transport-types/src/lib.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,20 @@ pub struct Delegation {
391391
/// If present, this delegation only applies to requests sent to one of these canisters.
392392
#[serde(default, skip_serializing_if = "Option::is_none")]
393393
pub targets: Option<Vec<Principal>>,
394+
/// If present, this delegation only applies to the specified kinds of requests.
395+
#[serde(default, skip_serializing_if = "Option::is_none")]
396+
pub permissions: Option<DelegationPermissions>,
397+
}
398+
399+
/// The kinds of requests a [`Delegation`] permits.
400+
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize)]
401+
pub enum DelegationPermissions {
402+
/// Only query calls and `read_state` requests are permitted.
403+
#[serde(rename = "queries")]
404+
Queries,
405+
/// All request types are permitted.
406+
#[serde(rename = "all")]
407+
All,
394408
}
395409

396410
const IC_REQUEST_DELEGATION_DOMAIN_SEPARATOR: &[u8] = b"\x1Aic-request-auth-delegation";

ref-tests/tests/integration.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@ mod identity {
717717
expiration: i64::MAX as u64,
718718
pubkey: signing_identity.public_key().unwrap(),
719719
targets: None,
720+
permissions: None,
720721
};
721722
let signature = sending_identity.sign_delegation(&delegation).unwrap();
722723
let delegated_identity = DelegatedIdentity::new(
@@ -755,6 +756,7 @@ mod identity {
755756
expiration: i64::MAX as u64,
756757
pubkey: signing_identity.public_key().unwrap(),
757758
targets: None,
759+
permissions: None,
758760
};
759761
let signature = sending_identity.sign_delegation(&delegation).unwrap();
760762
let delegated_identity = DelegatedIdentity::new(
@@ -808,6 +810,7 @@ mod identity {
808810
pubkey: signing_identity.public_key().unwrap(),
809811
expiration: i64::MAX as u64,
810812
targets: None,
813+
permissions: None,
811814
};
812815

813816
// Build the signature tree:
@@ -904,6 +907,7 @@ mod identity {
904907
pubkey: signing_identity.public_key().unwrap(),
905908
expiration: i64::MAX as u64,
906909
targets: None,
910+
permissions: None,
907911
};
908912

909913
// Compute hash of the delegation message.

0 commit comments

Comments
 (0)