pub use polyoxide_core::{Base64Format, Signer as CoreSigner};
use crate::error::ClobError;
#[derive(Clone, Debug)]
pub struct Signer {
inner: CoreSigner,
}
impl Signer {
pub fn new(secret: &str) -> Self {
Self {
inner: CoreSigner::new(secret),
}
}
pub fn sign(&self, message: &str) -> Result<String, ClobError> {
self.inner
.sign(message, Base64Format::UrlSafe)
.map_err(ClobError::Crypto)
}
pub fn create_message(timestamp: u64, method: &str, path: &str, body: Option<&str>) -> String {
CoreSigner::create_message(timestamp, method, path, body)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sign() {
let secret = "c2VjcmV0"; let signer = Signer::new(secret);
let message = Signer::create_message(1234567890, "GET", "/api/test", None);
let signature = signer.sign(&message).unwrap();
assert!(!signature.contains('+'));
assert!(!signature.contains('/'));
}
}