use conundrum::symm_encr::EncrKey;
use credo::{ClaimKind, GroupSecret, PermissionKind};
use litl::Litl;
use jazz_telepathy::logs::LogID;
use crate::managed_jmbl::LogEncryption;
use crate::ScopedDocID;
pub(crate) fn log_key_secret_name(log_id: LogID) -> String {
format!("{:?}_key", log_id)
}
pub(crate) fn claim_to_reveal_log_encr_key(
group_secret: EncrKey<GroupSecret>,
log_id: LogID,
log_encr_key: &EncrKey<LogEncryption>,
) -> 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: LogID,
) -> 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::RevealSetAccess,
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::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
}