Compare commits
2 commits
b04c17dc15
...
ce4e92fdda
Author | SHA1 | Date | |
---|---|---|---|
ce4e92fdda | |||
572da0d761 |
4 changed files with 25 additions and 11 deletions
|
@ -3,7 +3,7 @@ resolver = "2"
|
||||||
members = ["crates/cli", "crates/server", "crates/config", "crates/git"]
|
members = ["crates/cli", "crates/server", "crates/config", "crates/git"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.5.1"
|
version = "0.5.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[workspace.lints.clippy]
|
[workspace.lints.clippy]
|
||||||
|
|
|
@ -194,6 +194,9 @@ impl Handler<WebhookMessage> for RepoActor {
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let id = msg.id();
|
||||||
|
let span = tracing::info_span!("handle", ?id);
|
||||||
|
let _guard = span.enter();
|
||||||
let body = msg.body();
|
let body = msg.body();
|
||||||
match serde_json::from_str::<Push>(body.as_str()) {
|
match serde_json::from_str::<Push>(body.as_str()) {
|
||||||
Err(err) => warn!(?err, ?body, "Not a 'push'"),
|
Err(err) => warn!(?err, ?body, "Not a 'push'"),
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
//
|
//
|
||||||
use actix::prelude::*;
|
use actix::prelude::*;
|
||||||
use git_next_config::RepoAlias;
|
use git_next_config::RepoAlias;
|
||||||
|
use ulid::Ulid;
|
||||||
|
|
||||||
use crate::actors::repo::webhook::WebhookAuth;
|
use crate::actors::repo::webhook::WebhookAuth;
|
||||||
|
|
||||||
#[derive(Message, Debug, Clone, derive_more::Constructor)]
|
#[derive(Message, Debug, Clone, derive_more::Constructor)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct WebhookMessage {
|
pub struct WebhookMessage {
|
||||||
|
id: Id,
|
||||||
// forge // TODO: differentiate between multiple forges
|
// forge // TODO: differentiate between multiple forges
|
||||||
repo_alias: RepoAlias,
|
repo_alias: RepoAlias,
|
||||||
authorisation: WebhookAuth,
|
authorisation: WebhookAuth,
|
||||||
body: Body,
|
body: Body,
|
||||||
}
|
}
|
||||||
impl WebhookMessage {
|
impl WebhookMessage {
|
||||||
|
pub const fn id(&self) -> &Id {
|
||||||
|
&self.id
|
||||||
|
}
|
||||||
pub const fn repo_alias(&self) -> &RepoAlias {
|
pub const fn repo_alias(&self) -> &RepoAlias {
|
||||||
&self.repo_alias
|
&self.repo_alias
|
||||||
}
|
}
|
||||||
|
@ -24,6 +29,9 @@ impl WebhookMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, derive_more::Constructor)]
|
||||||
|
pub struct Id(Ulid);
|
||||||
|
|
||||||
#[derive(Clone, Debug, derive_more::Constructor)]
|
#[derive(Clone, Debug, derive_more::Constructor)]
|
||||||
pub struct Body(String);
|
pub struct Body(String);
|
||||||
impl Body {
|
impl Body {
|
||||||
|
|
|
@ -4,6 +4,7 @@ use actix::prelude::*;
|
||||||
|
|
||||||
use git_next_config::RepoAlias;
|
use git_next_config::RepoAlias;
|
||||||
use tracing::{info, warn};
|
use tracing::{info, warn};
|
||||||
|
use ulid::Ulid;
|
||||||
use warp::reject::Rejection;
|
use warp::reject::Rejection;
|
||||||
|
|
||||||
use crate::actors::{repo::webhook::WebhookAuth, webhook::message::WebhookMessage};
|
use crate::actors::{repo::webhook::WebhookAuth, webhook::message::WebhookMessage};
|
||||||
|
@ -33,16 +34,14 @@ pub async fn start(
|
||||||
let repo_alias = RepoAlias::new(path);
|
let repo_alias = RepoAlias::new(path);
|
||||||
let bytes = body.to_vec();
|
let bytes = body.to_vec();
|
||||||
let body = message::Body::new(String::from_utf8_lossy(&bytes).to_string());
|
let body = message::Body::new(String::from_utf8_lossy(&bytes).to_string());
|
||||||
headers.get("Authorization").map_or_else(
|
let id = message::Id::new(Ulid::new());
|
||||||
|| {
|
match headers.get("Authorization") {
|
||||||
warn!("No Authorization header");
|
Some(authorisation_header) => {
|
||||||
Err(warp::reject())
|
info!(?id, ?repo_alias, ?authorisation_header, "Received webhook",);
|
||||||
},
|
|
||||||
|authorisation_header| {
|
|
||||||
info!(?repo_alias, ?authorisation_header, "Received webhook",);
|
|
||||||
match parse_auth(authorisation_header) {
|
match parse_auth(authorisation_header) {
|
||||||
Ok(authorisation) => {
|
Ok(authorisation) => {
|
||||||
let message = WebhookMessage::new(repo_alias, authorisation, body);
|
let message =
|
||||||
|
WebhookMessage::new(id, repo_alias, authorisation, body);
|
||||||
recipient
|
recipient
|
||||||
.try_send(message)
|
.try_send(message)
|
||||||
.map(|_| {
|
.map(|_| {
|
||||||
|
@ -59,8 +58,12 @@ pub async fn start(
|
||||||
Err(warp::reject())
|
Err(warp::reject())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
)
|
_ => {
|
||||||
|
warn!("No Authorization header");
|
||||||
|
Err(warp::reject())
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue