use crate::{
core::{craft_ticket_info, CredFormat, EncryptionType, TicketCreds, Vault},
Error, KrbUser, Result,
};
use kerberos_crypto::Key;
use ms_pac::PISID;
pub fn craft(realm: &str,
username: &str,
service: Option<String>,
ticket_key: Key,
user_rid: u32,
realm_sid: &str,
groups: &[u32],
ticket_key_enc: Option<EncryptionType>,
cred_format: CredFormat,
vault: &dyn Vault)
-> Result<()>
{
let pisid = match PISID::try_from(realm_sid)
{
Ok(p) => p,
Err(e) => return Err(Error::String(e)),
};
let user = KrbUser::new(username.to_string(), realm.to_string());
let ticket_info = craft_ticket_info(
user,
service.clone(),
ticket_key,
user_rid,
pisid,
groups,
ticket_key_enc.map(|e| e.as_constant()),
);
let krb_cred_plain = TicketCreds::new(vec![ticket_info]);
vault.save_as(krb_cred_plain, cred_format)?;
Ok(())
}