use http::HeaderMap;
use crate::error::Result;
use crate::signature::Signature;
use super::{WebhookVerifier, header_str, hmac_compare};
pub struct InacashCashoutVerifier {
pub secret: String,
}
impl WebhookVerifier for InacashCashoutVerifier {
fn canonical_payload(&self, _headers: &HeaderMap, body: &[u8]) -> Result<Vec<u8>> {
Ok(body.to_vec())
}
fn extract_signature(&self, headers: &HeaderMap) -> Result<Signature> {
Signature::from_base64(header_str(headers, "X-Signature")?)
}
fn compare(&self, sig: &Signature, canonical: &[u8]) -> Result<()> {
hmac_compare(self.secret.as_bytes(), sig, canonical)
}
}
pub struct InacashQrisVerifier {
pub secret: String,
}
impl WebhookVerifier for InacashQrisVerifier {
fn canonical_payload(&self, _headers: &HeaderMap, body: &[u8]) -> Result<Vec<u8>> {
Ok(body.to_vec())
}
fn extract_signature(&self, headers: &HeaderMap) -> Result<Signature> {
Signature::from_base64(header_str(headers, "X-Signature")?)
}
fn compare(&self, sig: &Signature, canonical: &[u8]) -> Result<()> {
hmac_compare(self.secret.as_bytes(), sig, canonical)
}
}
pub struct BriVaPaidVerifier {
pub secret: String,
}
impl WebhookVerifier for BriVaPaidVerifier {
fn canonical_payload(&self, _headers: &HeaderMap, body: &[u8]) -> Result<Vec<u8>> {
Ok(body.to_vec())
}
fn extract_signature(&self, headers: &HeaderMap) -> Result<Signature> {
Signature::from_base64(header_str(headers, "X-SIGNATURE")?)
}
fn compare(&self, sig: &Signature, canonical: &[u8]) -> Result<()> {
hmac_compare(self.secret.as_bytes(), sig, canonical)
}
}