hessra_token_core/
utils.rs1use base64::{engine::general_purpose::URL_SAFE, Engine};
2use std::fs::read_to_string;
3
4use crate::error::TokenError;
5
6pub use biscuit_auth::{Biscuit, PublicKey};
7
8pub fn encode_token(token_bytes: &[u8]) -> String {
18 URL_SAFE.encode(token_bytes)
19}
20
21pub fn decode_token(token_string: &str) -> Result<Vec<u8>, TokenError> {
31 URL_SAFE
32 .decode(token_string)
33 .map_err(|e| TokenError::generic(format!("Failed to decode base64 token: {e}")))
34}
35
36pub fn public_key_from_pem_file(path: &str) -> Result<PublicKey, TokenError> {
37 let key_string = read_to_string(path)
38 .map_err(|e| TokenError::generic(format!("Failed to read file: {e}")))?;
39 let key = PublicKey::from_pem(&key_string)
40 .map_err(|e| TokenError::generic(format!("Failed to parse PEM: {e}")))?;
41 Ok(key)
42}
43
44pub fn parse_token(token_string: &str, public_key: PublicKey) -> Result<Biscuit, TokenError> {
57 Ok(Biscuit::from_base64(token_string, public_key)?)
58}