works i guess

This commit is contained in:
Michael Zhang 2018-08-22 21:45:11 -05:00
parent 7c1360d9b9
commit e57f8f1796
No known key found for this signature in database
GPG key ID: A1B65B603268116B
3 changed files with 25 additions and 50 deletions

View file

@ -70,7 +70,6 @@ fn main() {
.expect("Could not read from stdin"); .expect("Could not read from stdin");
let payload: Payload = serde_json::from_str(&payload) let payload: Payload = serde_json::from_str(&payload)
.expect(&format!("Could not parse stdin into json: '{}'", payload)); .expect(&format!("Could not parse stdin into json: '{}'", payload));
println!("Read body: '{}'", payload.body);
if !config.disable_hmac_verify { if !config.disable_hmac_verify {
let secret = GenericArray::from_iter(config.secret.bytes()); let secret = GenericArray::from_iter(config.secret.bytes());
@ -92,7 +91,12 @@ fn main() {
let left = SecStr::from(format!("sha1={}", signature)); let left = SecStr::from(format!("sha1={}", signature));
let right = SecStr::from(auth.bytes().collect::<Vec<_>>()); let right = SecStr::from(auth.bytes().collect::<Vec<_>>());
assert!(left == right, "HMAC signature didn't match",); assert!(
left == right,
"HMAC signature didn't match: {} vs. {}",
signature,
auth
);
} }
let payload: GithubPayload = let payload: GithubPayload =

View file

@ -3,8 +3,7 @@ use std::process::{Command, Stdio};
use failure::{err_msg, Error}; use failure::{err_msg, Error};
use futures::{ use futures::{
future::{self, Either, FutureResult}, future::{self, Either},
sink::Sink,
Future, Future,
}; };
use serde::Serialize; use serde::Serialize;
@ -69,7 +68,6 @@ impl Handler {
temp_path: PathBuf, temp_path: PathBuf,
input: JsonValue, input: JsonValue,
) -> impl Future<Item = (PathBuf, JsonValue), Error = Error> { ) -> impl Future<Item = (PathBuf, JsonValue), Error = Error> {
println!("Running: {:?} :: {:?}", config, action);
let config = { let config = {
let mut buf: Vec<u8> = Vec::new(); let mut buf: Vec<u8> = Vec::new();
{ {
@ -125,16 +123,24 @@ impl Handler {
let input = format!("{}", input); let input = format!("{}", input);
let result = write_all(stdin, input) let result = write_all(stdin, input)
.and_then(|_| child.wait_with_output()) .and_then(|_| child.wait_with_output())
.map(|output| { .map_err(|err| err_msg(format!("error: {}", err)))
.and_then(|output| {
let stdout = let stdout =
String::from_utf8(output.stdout).unwrap_or_else(|_| String::new()); String::from_utf8(output.stdout).unwrap_or_else(|_| String::new());
let stderr = let stderr =
String::from_utf8(output.stderr).unwrap_or_else(|_| String::new()); String::from_utf8(output.stderr).unwrap_or_else(|_| String::new());
json!({ if output.status.success() {
Either::A(future::ok(json!({
"stdout": stdout, "stdout": stdout,
"stderr": stderr, "stderr": stderr,
}) })))
}).map_err(|err| err_msg(format!("error: {}", err))); } else {
Either::B(future::err(err_msg(format!(
"Failed, stdout: '{}', stderr: '{}'",
stdout, stderr
))))
}
});
Box::new(result) Box::new(result)
} }

View file

@ -58,47 +58,12 @@ impl Hook {
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let st = stream::iter_ok::<_, Error>(handlers.into_iter()) let st = stream::iter_ok::<_, Error>(handlers.into_iter())
.fold((temp_path, req), |(path, prev), (config, action)| { .fold((temp_path, req), |(path, prev), (config, action)| {
println!("executing in {:?}", &path);
Handler::run(config, action, path, prev) Handler::run(config, action, path, prev)
}).map(|_| ()) }).map(|_| ())
.map_err(|_: Error| ()); .map_err(|err: Error| {
println!("Error from stream: {}", err);
});
tokio::executor::spawn(st); tokio::executor::spawn(st);
// let it = stream::iter_ok::<_, Error>(handlers.iter());
// let s = it.fold((temp_path, req), move |(path, prev), handler| {
// let result = handler.run(path.clone(), prev.clone());
// result
// }).map(|_|()).map_err(|_| ());
// tokio::executor::spawn(s);
Ok("success".to_owned()) Ok("success".to_owned())
// let s = stream::iter_ok(self.handlers.iter()).fold((temp_path, req), move |prev, handler| { }
// let (path, prev) = prev;
// handler.run(path, prev)
// });
// .fold(future::ok(req), |prev, handler| {
// prev.and_then(|val| handler.run(temp_path, val))
// });
// let s = s.map(|_| ()).map_err(|_: Error| ());
// tokio::executor::spawn(s);
// Ok("success".to_owned())
/*
Ok(self.iter()
.fold(Ok(req), |prev, handler| {
prev.and_then(|val| {
println!("Running {}...", handler.config());
let result = handler.run(&temp_path, val);
result
})
})
.map(|res| {
(
StatusCode::ACCEPTED,
format!(
"stdout:\n{}\n\nstderr:\n{}",
res.get("stdout").and_then(|v| v.as_str()).unwrap_or(""),
res.get("stderr").and_then(|v| v.as_str()).unwrap_or(""),
),
)
})
.unwrap_or_else(|err| (StatusCode::BAD_REQUEST, format!("Error: {:?}", err))))
*/ }
} }