roles/
progenitors.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use hdk::prelude::*;
use roles_integrity::{
    role_path, utils::serialize_tag, AssigneeRoleClaimLinkMode, AssigneeRoleClaimLinkTag,
    LinkTypes, RoleToAssigneeLinkMode, RoleToAssigneeLinkTag, ADMIN_ROLE,
};

pub fn claim_admin_role_as_progenitor() -> ExternResult<()> {
    let my_pub_key = agent_info()?.agent_initial_pubkey;

    let path = role_path(&ADMIN_ROLE.to_string())?;
    path.ensure()?;

    let tag = RoleToAssigneeLinkTag {
        role: ADMIN_ROLE.to_string(),
        linked_devices: None,
        mode: RoleToAssigneeLinkMode::ProgenitorClaimingAdminAtInit,
    };

    let role_to_assignee_create_link_hash = create_link(
        path.path_entry_hash()?,
        my_pub_key.clone(),
        LinkTypes::RoleToAssignee,
        serialize_tag(tag)?,
    )?;

    let tag = AssigneeRoleClaimLinkTag {
        role: ADMIN_ROLE.to_string(),
        mode: AssigneeRoleClaimLinkMode::ProgenitorClaimingAdminAtInit,
    };
    create_link(
        my_pub_key,
        role_to_assignee_create_link_hash,
        LinkTypes::AssigneeRoleClaim,
        serialize_tag(tag)?,
    )?;
    Ok(())
}