11//! Catalyst Signed Document COSE signature `kid` (Catalyst Id) role validation
22
3- use catalyst_signed_doc_spec:: signers:: roles:: { Role , Roles } ;
3+ use catalyst_signed_doc_spec:: signers:: roles:: { AdminRole , Roles , UserRole } ;
44use catalyst_types:: catalyst_id:: role_index:: RoleId ;
55
66use crate :: CatalystSignedDocument ;
@@ -14,19 +14,38 @@ pub(crate) struct SignatureKidRule {
1414
1515impl SignatureKidRule {
1616 /// Generating `SignatureKidRule` from specs
17- pub ( crate ) fn new ( spec : & Roles ) -> Self {
18- let allowed_roles = spec
17+ pub ( crate ) fn new ( spec : & Roles ) -> anyhow :: Result < Self > {
18+ let allowed_roles: Vec < _ > = spec
1919 . user
2020 . iter ( )
2121 . map ( |v| {
2222 match v {
23- Role :: Registered => RoleId :: Role0 ,
24- Role :: Proposer => RoleId :: Proposer ,
25- Role :: Representative => RoleId :: DelegatedRepresentative ,
23+ UserRole :: Registered => RoleId :: Role0 ,
24+ UserRole :: Proposer => RoleId :: Proposer ,
25+ UserRole :: Representative => RoleId :: DelegatedRepresentative ,
2626 }
2727 } )
28+ . chain ( spec. admin . iter ( ) . map ( |v| {
29+ match v {
30+ AdminRole :: RootCA => RoleId :: RootCA ,
31+ AdminRole :: BrandCA => RoleId :: BrandCA ,
32+ AdminRole :: CampaignCA => RoleId :: CampaignCA ,
33+ AdminRole :: CategoryCA => RoleId :: CategoryCA ,
34+ AdminRole :: RootAdmin => RoleId :: RootAdmin ,
35+ AdminRole :: BrandAdmin => RoleId :: BrandAdmin ,
36+ AdminRole :: CampaignAdmin => RoleId :: CampaignAdmin ,
37+ AdminRole :: CategoryAdmin => RoleId :: CategoryAdmin ,
38+ AdminRole :: Moderator => RoleId :: Moderator ,
39+ }
40+ } ) )
2841 . collect ( ) ;
29- Self { allowed_roles }
42+
43+ anyhow:: ensure!(
44+ !allowed_roles. is_empty( ) ,
45+ "A list of allowed roles cannot be empty"
46+ ) ;
47+
48+ Ok ( Self { allowed_roles } )
3049 }
3150
3251 /// Field validation rule
0 commit comments