use credo::{ClaimKind, PermissionKind};
use litl::Litl;
use ridl::symm_encr::KeySecret;
use tlpt::ObjectID;
use crate::ScopedDocID;
pub(crate) fn log_key_secret_name(log_id: ObjectID) -> String {
format!("{:?}_key", log_id)
}
pub(crate) fn claim_to_reveal_log_encr_key(
group_secret: KeySecret,
log_id: ObjectID,
log_encr_key: &KeySecret,
) -> ClaimKind {
ClaimKind::RevealToGroupSecret {
revealed_secret_name: log_key_secret_name(log_id),
for_key_id: group_secret.id,
encrypted: group_secret.encrypt(&Litl::from_se(log_encr_key)),
}
}
pub(crate) fn path_for_doc_branch(scoped_doc_id: ScopedDocID) -> String {
format!("docs/{}/{}", scoped_doc_id.branch, scoped_doc_id.doc)
}
pub(crate) fn claim_to_declare_log_part_of_doc(
scoped_doc_id: ScopedDocID,
log_id: ObjectID,
) -> ClaimKind {
ClaimKind::Statement {
path: path_for_doc_branch(scoped_doc_id),
value: Litl::from_se(&log_id),
}
}
pub fn read_permissions() -> Vec<PermissionKind> {
vec![]
}
pub fn write_permissions() -> Vec<PermissionKind> {
let mut permissions = read_permissions();
permissions.extend(vec![
PermissionKind::MakeStatement {
path_prefix: "docs/".to_string(),
},
PermissionKind::RevealGroupSecret,
PermissionKind::EntrustToGroupSecret,
PermissionKind::TimeWitness,
]);
permissions
}
pub fn admin_permissions() -> Vec<PermissionKind> {
let mut permissions = write_permissions();
permissions.extend(Some(PermissionKind::RevealSetAccess));
permissions.extend(Some(PermissionKind::AddGroupSecretRecipient));
permissions.extend(Some(PermissionKind::MakeStatement {
path_prefix: "invitations/".to_string(),
}));
permissions.extend(
write_permissions()
.into_iter()
.map(|permission| PermissionKind::DelegateInfintely(Box::new(permission))),
);
permissions
}