use crate::core::KrbUser;
use kerberos_asn1::PrincipalName;
use kerberos_constants::principal_names;
pub fn new_principal_or_srv_inst(name: &str, realm: &str) -> PrincipalName
{
let name_parts = spn_to_service_parts(name);
let name_type =
if name_parts.last().unwrap() == realm { principal_names::NT_SRV_INST } else { principal_names::NT_PRINCIPAL };
PrincipalName { name_type, name_string: name_parts }
}
pub fn new_nt_principal(name: &str) -> PrincipalName
{
new_principal_name(name, principal_names::NT_PRINCIPAL)
}
pub fn new_nt_srv_inst(service: &str) -> PrincipalName
{
new_principal_name(service, principal_names::NT_SRV_INST)
}
pub fn new_nt_enterprise(user: &KrbUser) -> PrincipalName
{
new_principal_name(&format!("{}@{}", &user.name, &user.realm), principal_names::NT_ENTERPRISE)
}
pub fn new_principal_name(name: &str, name_type: i32) -> PrincipalName
{
PrincipalName { name_type, name_string: spn_to_service_parts(name) }
}
pub fn spn_to_service_parts(spn: &str) -> Vec<String>
{
spn.split('/').map(|s| s.to_string()).collect()
}