use std::fmt;
use bottlers::IDCard;
use crate::encoding::base64url_encode;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ClientId {
pub typ: u8,
pub server_id: String,
pub target: String,
}
impl ClientId {
pub fn from_idcard(id: &IDCard) -> ClientId {
let h = bottlers::hash::sha256(&id.self_key);
ClientId {
typ: b'k',
server_id: String::new(),
target: base64url_encode(&h),
}
}
}
impl fmt::Display for ClientId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if self.server_id.is_empty() {
write!(f, "{}.{}", self.typ as char, self.target)
} else {
write!(f, "{}.{}.{}", self.typ as char, self.server_id, self.target)
}
}
}