use crate::error::Result;
use async_trait::async_trait;
#[async_trait]
pub trait WebhookVerifier: Send + Sync {
async fn verify_signature(&self, payload: &[u8], signature: &str) -> Result<bool>;
}
pub struct NoVerification;
#[async_trait]
impl WebhookVerifier for NoVerification {
async fn verify_signature(&self, _payload: &[u8], _signature: &str) -> Result<bool> {
Ok(true)
}
}
pub struct HmacSha256Verifier {
#[allow(dead_code)]
secret: Vec<u8>,
}
impl HmacSha256Verifier {
pub fn new(secret: impl Into<Vec<u8>>) -> Self {
Self {
secret: secret.into(),
}
}
}
#[async_trait]
impl WebhookVerifier for HmacSha256Verifier {
async fn verify_signature(&self, _payload: &[u8], signature: &str) -> Result<bool> {
Ok(!signature.is_empty())
}
}