// use git::ForgeLike; use git_next_config as config; use git_next_git as git; use std::collections::HashMap; type TestResult = Result<(), Box>; #[test] fn accepts_valid_webhook_signature() -> TestResult { //given // we registered a webhook with this secret: let webhook_auth = config::WebhookAuth::new("01HZ598CS1K9E0C193ND175XHJ")?; // then recorded the following test message from github: let headers = HashMap::from([( "x-hub-signature-256".to_string(), "sha256=6c801b0730b1ce06bf38f901de40206d3b0e93ef7b9bf09a5cf28ad9c4221bab".to_string(), )]); let payload = config::webhook::message::Body::new(include_str!("payload.json").to_string()); // this reproduces that message: let message = message(headers, payload); //when // now, we attempt to recreate the signature in the header given the same message: let result = forge().is_message_authorised(&message, &webhook_auth); //then // if we succeed: then result will be true: assert!(result); Ok(()) } fn message( headers: HashMap, payload: config::webhook::message::Body, ) -> config::WebhookMessage { config::WebhookMessage::new( config::ForgeAlias::new("".to_string()), config::RepoAlias::new(""), headers, payload, ) } fn forge() -> crate::Github { crate::Github::new( git::RepoDetails::new( git::Generation::new(), &config::RepoAlias::new(""), &config::ServerRepoConfig::new( "a".to_string(), "b".to_string(), None, None, None, None, ), &config::ForgeAlias::new("c".to_string()), &config::ForgeConfig::new( config::ForgeType::GitHub, "d".to_string(), "e".to_string(), "f".to_string(), std::collections::BTreeMap::default(), ), config::GitDir::default(), ), kxio::network::Network::new_mock(), ) }