+40
-3
src/main.rs
+40
-3
src/main.rs
···
1
+
use std::process::Command;
2
+
1
3
mod args;
2
4
mod did;
3
5
mod knot;
···
36
38
37
39
match ws::connect(format!("ws://{}/events", knot_server), |_out| {
38
40
println!(" Connection successful");
39
-
|msg| {
41
+
|msg: ws::Message| {
40
42
println!("Got message: {}", msg);
43
+
44
+
// parse json
45
+
let body = match json::parse(match msg.as_text() {
46
+
Ok(val) => val,
47
+
Err(_) => return Ok(()),
48
+
}) {
49
+
Ok(val) => val,
50
+
Err(_) => {
51
+
println!(" Invalid body. Skipping message");
52
+
return Ok(());
53
+
}
54
+
};
55
+
56
+
// filter by did and reponame
57
+
if let Some(repo_did) = body["event"]["repoDid"].as_str()
58
+
&& let Some(repo) = body["event"]["repoName"].as_str()
59
+
&& repo_did != &did_doc.did
60
+
&& repo != &config.repo_name
61
+
{
62
+
// repo doesnt match so skip
63
+
return Ok(());
64
+
}
65
+
66
+
println!(" Executing `/bin/sh -c {}`", &config.shell);
67
+
68
+
// exec shell command in /bin/sh
69
+
match Command::new("/bin/sh")
70
+
.arg("-c")
71
+
.arg(&config.shell)
72
+
.output()
73
+
{
74
+
Ok(val) => val,
75
+
Err(_) => return Ok(()),
76
+
};
77
+
41
78
Ok(())
42
79
}
43
80
}) {
44
-
Ok(_) => {},
45
-
Err(err) => println!(" Connection failed: {}", err)
81
+
Ok(_) => {}
82
+
Err(err) => println!(" Connection failed: {}", err),
46
83
};
47
84
48
85
return Ok(());