diff options
Diffstat (limited to 'exes/webhook')
| -rw-r--r-- | exes/webhook/Cargo.toml | 14 | ||||
| -rw-r--r-- | exes/webhook/src/config.rs | 1 | ||||
| -rw-r--r-- | exes/webhook/src/handler/mod.rs | 12 | ||||
| -rw-r--r-- | exes/webhook/src/handler/signature.rs | 38 | ||||
| -rw-r--r-- | exes/webhook/src/handler/tests/handler.rs | 1 | ||||
| -rw-r--r-- | exes/webhook/src/handler/tests/mod.rs | 2 | ||||
| -rw-r--r-- | exes/webhook/src/lib.rs | 7 |
7 files changed, 20 insertions, 55 deletions
diff --git a/exes/webhook/Cargo.toml b/exes/webhook/Cargo.toml index 589b5bd..0c50009 100644 --- a/exes/webhook/Cargo.toml +++ b/exes/webhook/Cargo.toml @@ -4,21 +4,19 @@ version = "0.1.0" edition = "2018" [dependencies] -hyper = { version = "0.14", features = ["full"] } -tokio = { version = "1", features = ["full"] } +hyper = "0.14" +tokio = { version = "1", features = ["rt"] } shared = { path = "../../libs/shared" } proto = { path = "../../libs/proto" } leash = { path = "../../libs/leash" } +tracing = "0.1.37" serde = { version = "1.0.8", features = ["derive"] } -hex = "0.4.3" serde_json = { version = "1.0" } -lazy_static = "1.4.0" + +hex = "0.4.3" ed25519-dalek = "1" twilight-model = { version = "0.14" } anyhow = "1.0.68" -futures-util = "0.3.25" -[[bin]] -name = "webhook" -path = "src/main.rs" +async-nats = "0.25.1" diff --git a/exes/webhook/src/config.rs b/exes/webhook/src/config.rs index d1b3fb6..02543e6 100644 --- a/exes/webhook/src/config.rs +++ b/exes/webhook/src/config.rs @@ -9,7 +9,6 @@ fn default_listening_address() -> SocketAddr { #[derive(Debug, Deserialize, Clone, Copy)] pub struct ServerSettings { - #[serde(default = "default_listening_address")] pub listening_adress: SocketAddr, } impl Default for ServerSettings { diff --git a/exes/webhook/src/handler/mod.rs b/exes/webhook/src/handler/mod.rs index 3ef859e..594919b 100644 --- a/exes/webhook/src/handler/mod.rs +++ b/exes/webhook/src/handler/mod.rs @@ -1,4 +1,5 @@ use crate::config::WebhookConfig; +use async_nats::Client; use ed25519_dalek::PublicKey; use error::WebhookError; use hyper::{ @@ -6,11 +7,7 @@ use hyper::{ service::Service, Body, Method, Request, Response, StatusCode, }; -use shared::nats_crate::Client; -use shared::{ - log::{debug, error}, - payloads::{CachePayload, DispatchEventTagged, Tracing}, -}; +use shared::payloads::{CachePayload, DispatchEventTagged}; use signature::validate_signature; use std::{ future::Future, @@ -18,6 +15,7 @@ use std::{ str::from_utf8, task::{Context, Poll}, }; +use tracing::{debug, error}; use twilight_model::gateway::event::DispatchEvent; use twilight_model::{ application::interaction::{Interaction, InteractionType}, @@ -98,10 +96,6 @@ impl WebhookService { // this should hopefully not fail ? let data = CachePayload { - tracing: Tracing { - node_id: "".to_string(), - span: None, - }, data: DispatchEventTagged { data: DispatchEvent::InteractionCreate(Box::new( InteractionCreate(value), diff --git a/exes/webhook/src/handler/signature.rs b/exes/webhook/src/handler/signature.rs index fc5555f..ece7b85 100644 --- a/exes/webhook/src/handler/signature.rs +++ b/exes/webhook/src/handler/signature.rs @@ -1,41 +1,13 @@ -use shared::prometheus::{Counter, HistogramVec, labels, opts, register_counter, register_histogram_vec}; -use ed25519_dalek::PublicKey; -use ed25519_dalek::Verifier; -use ed25519_dalek::Signature; -use std::convert::TryInto; - -lazy_static::lazy_static! { - static ref SIGNATURE_TIME_HISTOGRAM: HistogramVec = register_histogram_vec!( - "nova_webhook_signature_time", - "The time taken by the signature verification", - &["signature"] - ).unwrap(); - - static ref SIGNATURE_COUNTER: Counter = register_counter!(opts!( - "nova_webhook_signatures_verify", - "number of signatures verification issued by the service", - labels! {"handler" => "webhook_main"} - )).unwrap(); -} - -fn demo<T, const N: usize>(v: Vec<T>) -> [T; N] { - v.try_into() - .unwrap_or_else(|v: Vec<T>| panic!("Expected a Vec of length {} but it was {}", N, v.len())) -} +use ed25519_dalek::{PublicKey, Signature, Verifier}; pub fn validate_signature(public_key: &PublicKey, data: &[u8], hex_signature: &str) -> bool { - SIGNATURE_COUNTER.inc(); - let timer = SIGNATURE_TIME_HISTOGRAM.with_label_values(&["webhook_main"]).start_timer(); - - let signature_result = hex::decode(hex_signature); + let mut slice: [u8; Signature::BYTE_SIZE] = [0; Signature::BYTE_SIZE]; + let signature_result = hex::decode_to_slice(hex_signature, &mut slice); let mut result = false; - if let Ok(signature) = signature_result { - let sig = Signature::from(demo(signature)); - - result = public_key.verify(data, &sig).is_ok(); + if signature_result.is_ok() { + result = public_key.verify(data, &Signature::from(slice)).is_ok(); } - timer.observe_duration(); result } diff --git a/exes/webhook/src/handler/tests/handler.rs b/exes/webhook/src/handler/tests/handler.rs index e69de29..8b13789 100644 --- a/exes/webhook/src/handler/tests/handler.rs +++ b/exes/webhook/src/handler/tests/handler.rs @@ -0,0 +1 @@ + diff --git a/exes/webhook/src/handler/tests/mod.rs b/exes/webhook/src/handler/tests/mod.rs index cf7f558..60ae6d3 100644 --- a/exes/webhook/src/handler/tests/mod.rs +++ b/exes/webhook/src/handler/tests/mod.rs @@ -1,2 +1,2 @@ -pub mod signature; pub mod handler; +pub mod signature; diff --git a/exes/webhook/src/lib.rs b/exes/webhook/src/lib.rs index 43ab9c4..057e70f 100644 --- a/exes/webhook/src/lib.rs +++ b/exes/webhook/src/lib.rs @@ -6,11 +6,12 @@ use crate::{ config::WebhookConfig, handler::{make_service::MakeSvc, WebhookService}, }; +use async_nats::Client; use hyper::Server; use leash::{AnyhowResultFuture, Component}; -use shared::{config::Settings, log::info, nats_crate::Client}; +use shared::config::Settings; use tokio::sync::oneshot; - +use tracing::info; #[derive(Clone, Copy)] pub struct WebhookServer {} @@ -27,7 +28,7 @@ impl Component for WebhookServer { info!("Starting server on {}", settings.server.listening_adress); let bind = settings.server.listening_adress; - info!("NAts connected!"); + info!("Nats connected!"); let nats = Into::<Pin<Box<dyn Future<Output = anyhow::Result<Client>> + Send>>>::into( settings.nats, ) |
