summaryrefslogtreecommitdiff
path: root/webhook/src
diff options
context:
space:
mode:
authorMatthieu <matthieu@developershouse.xyz>2021-09-04 06:20:02 +0400
committerMatthieu <matthieu@developershouse.xyz>2021-09-04 06:20:02 +0400
commit735c7e49fd2f7f5425949ae7639fbf5c0c9278a8 (patch)
treee3db3e3a0bbbcf6dce68a3063369f562abc6f494 /webhook/src
parent29f4df85fa4dd559010f2acd68cdfe43ce0ebed4 (diff)
base ratelimiter
Diffstat (limited to 'webhook/src')
-rw-r--r--webhook/src/handle.rs68
-rw-r--r--webhook/src/main.rs13
-rw-r--r--webhook/src/utils.rs2
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,