use credo::{ClaimKind, PermissionKind, WRITE_TO_SCOPE};
use litl::Litl;
use tlpt::ObjectID;
use crate::DocID;
pub(crate) fn log_key_secret_name(log_id: ObjectID) -> String {
format!("logKey_{}", Litl::from_se(&log_id).tagged_data_to_raw_str())
}
pub const INCLUDE_LOG_STR: &str = "includeLog";
pub const READ_CONTENT: &str = "readContent";
pub(crate) fn claim_to_declare_log_part_of_doc(log_id: ObjectID) -> ClaimKind {
ClaimKind::Statement {
path: INCLUDE_LOG_STR.to_string(),
value: Litl::from_se(&log_id),
}
}
pub const NAMED_DOC_PREFIX: &str = "namedDoc_";
pub(crate) fn named_doc_path(name: &str) -> String {
format!("{}{}", NAMED_DOC_PREFIX, name)
}
pub(crate) fn claim_to_name_doc(doc_id: DocID, name: &str) -> ClaimKind {
ClaimKind::Statement {
path: named_doc_path(name),
value: Litl::from_se(&doc_id),
}
}
pub const CREDENTIALS_DOC_NAME: &str = "credentials";
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: INCLUDE_LOG_STR.to_string(),
},
PermissionKind::InheritFrom,
PermissionKind::EntrustToSharedSecret {
secret_kind: READ_CONTENT.to_string(),
},
PermissionKind::TimeWitness,
]);
permissions
}
pub fn admin_permissions() -> Vec<PermissionKind> {
let mut permissions = write_permissions();
permissions.extend(Some(PermissionKind::RevealSharedSecret {
secret_kind: READ_CONTENT.to_string(),
}));
permissions.extend(Some(PermissionKind::AddSharedSecretRecipient {
secret_kind: READ_CONTENT.to_string(),
}));
permissions.extend(Some(PermissionKind::RevealSharedSecret {
secret_kind: WRITE_TO_SCOPE.to_string(),
}));
permissions.extend(Some(PermissionKind::AddSharedSecretRecipient {
secret_kind: WRITE_TO_SCOPE.to_string(),
}));
permissions.extend(
write_permissions()
.into_iter()
.map(|permission| PermissionKind::DelegateInfintely(Box::new(permission))),
);
permissions
}