diff options
| author | Matthieu <matthieu@developershouse.xyz> | 2021-09-04 06:20:02 +0400 |
|---|---|---|
| committer | Matthieu <matthieu@developershouse.xyz> | 2021-09-04 06:20:02 +0400 |
| commit | 735c7e49fd2f7f5425949ae7639fbf5c0c9278a8 (patch) | |
| tree | e3db3e3a0bbbcf6dce68a3063369f562abc6f494 /webhook/src | |
| parent | 29f4df85fa4dd559010f2acd68cdfe43ce0ebed4 (diff) | |
base ratelimiter
Diffstat (limited to 'webhook/src')
| -rw-r--r-- | webhook/src/handle.rs | 68 | ||||
| -rw-r--r-- | webhook/src/main.rs | 13 | ||||
| -rw-r--r-- | webhook/src/utils.rs | 2 |
3 files changed, 51 insertions, 32 deletions
diff --git a/webhook/src/handle.rs b/webhook/src/handle.rs index 3a234f3..f1c835c 100644 --- a/webhook/src/handle.rs +++ b/webhook/src/handle.rs @@ -6,15 +6,16 @@ use hyper::service::Service; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; -use crate::utils::Settings; use log::info; +use super::utils::Settings; + static NOT_FOUND: &str = " <h1>Nova Webhook Gateway</h1> <p>Invalid request</p> "; -fn validate_signature (b64_public_key: &str, data: &Bytes, b64_signature: &str) -> bool { +pub fn validate_signature (b64_public_key: &str, data: &Bytes, b64_signature: &str) -> bool { // First, we need to check if the signature & private key is valid base64. let signature_result = base64::decode(b64_signature); let public_key_result = base64::decode(b64_public_key); @@ -42,29 +43,6 @@ fn validate_signature (b64_public_key: &str, data: &Bytes, b64_signature: &str) false } -#[cfg(test)] -mod tests { - use hyper::body::Bytes; - - use super::validate_signature; - - #[test] - fn validate_signature_test() { - let signature = "VD7DVH1X+d2x7ExcNlA+vyiP/aPaPVEHZMmknCq7V2kO+XTGPRdHcb3SSB3hBmlm9Xq77BKj7Bcbn24jc4NwAg=="; - let public_key = "7v4MJEc3N8sgNSMuO065HCBvChRoQWjzUD99gxYFjW8="; - let content = "message de test incroyable"; - assert_eq!(validate_signature(public_key, &Bytes::from(content), signature), true); - } - - #[test] - fn validate_signature_reverse_test() { - let signature = "zHtgMcx6iANuKbPFvG3c+vj6W84Mqb/2FWx4UnPXLJkwbEuh2u4EV/m1PEh4wv1zdjmatgTFPI4OephgE+nxAA=="; - let public_key = "wCnuoYQ3KSyHxirsNOfRvU44/mEm8/fERt5jddxmYEQ="; - let content = "ceci est un test qui ne fonctionnera pas!"; - assert_eq!(validate_signature(public_key, &Bytes::from(content), signature), false); - } -} - fn get_signature<'b>(headers: &'b HeaderMap) -> Option<(&'b str, &'b str)> { let signature = headers.get("X-Signature-Ed25519"); let timestamp = headers.get("X-Signature-Timestamp"); @@ -136,4 +114,44 @@ impl<T> Service<T> for MakeSvc { fn call(&mut self, _: T) -> Self::Future { future::ready(Ok(HandlerService { config: self.settings.clone() })) } +} + + +#[cfg(test)] +mod test { + use hyper::body::Bytes; + use crate::handle::validate_signature; + + #[test] + fn validate_signature_test() { + let signature = "VD7DVH1X+d2x7ExcNlA+vyiP/aPaPVEHZMmknCq7V2kO+XTGPRdHcb3SSB3hBmlm9Xq77BKj7Bcbn24jc4NwAg=="; + let public_key = "7v4MJEc3N8sgNSMuO065HCBvChRoQWjzUD99gxYFjW8="; + let content = "message de test incroyable"; + assert_eq!( + validate_signature(public_key, &Bytes::from(content), signature), + true + ); + } + + #[test] + fn validate_signature_reverse_test() { + let signature = "VD7DVH1X+d2x7ExcNlA+vyiP/aPaPVEHZMmknCq7V2kO+XTGPRdHcb3SSB3hBmlm9Xq77BKj7Bcbn24jc4NwAg=="; + let public_key = "wCnuoYQ3KSyHxirsNOfRvU44/mEm8/fERt5jddxmYEQ="; + let content = "ceci est un test qui ne fonctionnera pas!"; + assert_eq!( + validate_signature(public_key, &Bytes::from(content), signature), + false + ); + } + + #[test] + fn invalid_base64() { + let signature = "zzz"; + let public_key = "zzz"; + let content = "ceci est un test qui ne fonctionnera pas!"; + assert_eq!( + validate_signature(public_key, &Bytes::from(content), signature), + false + ); + } }
\ No newline at end of file diff --git a/webhook/src/main.rs b/webhook/src/main.rs index dd340e8..4da1c84 100644 --- a/webhook/src/main.rs +++ b/webhook/src/main.rs @@ -1,18 +1,19 @@ use std::net::ToSocketAddrs; + use hyper::Server; use log::info; -use crate::handle::MakeSvc; extern crate log; +pub mod handle; +pub mod utils; -mod handle; -mod utils; - +use utils::{setup_program, Settings}; +use handle::MakeSvc; #[tokio::main] async fn main() { - utils::setup_program("webhook"); - let config = utils::Settings::new().unwrap(); + setup_program("webhook"); + let config = Settings::new().unwrap(); let addr = format!("{}:{}", config.server.address, config.server.port) .to_socket_addrs() diff --git a/webhook/src/utils.rs b/webhook/src/utils.rs index 9536ba5..0a9a779 100644 --- a/webhook/src/utils.rs +++ b/webhook/src/utils.rs @@ -1,7 +1,7 @@ use std::env; use config::{Config, ConfigError, Environment, File}; -use log::{info}; +use log::info; use serde::Deserialize; /// Executes the required configuration steps for the program, |
