mirror of
https://github.com/bspeice/icicle
synced 2024-11-21 14:28:08 -05:00
Initial server commit
This commit is contained in:
commit
94b9733730
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target/
|
||||||
|
**/*.rs.bk
|
||||||
|
Cargo.lock
|
||||||
|
target/
|
||||||
|
**/*.rs.bk
|
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "icicle"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Bradlee Speice <bradlee.speice@gmail.com>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
router = "*"
|
||||||
|
iron = "*"
|
||||||
|
urlencoded = "*"
|
86
src/main.rs
Normal file
86
src/main.rs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#[macro_use(router)]
|
||||||
|
extern crate router;
|
||||||
|
extern crate iron;
|
||||||
|
extern crate urlencoded;
|
||||||
|
|
||||||
|
use iron::{status, Response, Request, Iron, IronResult};
|
||||||
|
use iron::prelude::*;
|
||||||
|
use urlencoded::UrlEncodedQuery;
|
||||||
|
use std::process::Command;
|
||||||
|
use std::{thread, time};
|
||||||
|
|
||||||
|
fn respond(ret_status: status::Status, message: &str) -> IronResult<Response> {
|
||||||
|
Ok(Response::with((
|
||||||
|
ret_status,
|
||||||
|
message
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn index(_: &mut Request) -> IronResult<Response> {
|
||||||
|
respond(status::Ok, "You found the index!")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remote_run(remote: &str, actions: &Vec<String>) -> IronResult<Response> {
|
||||||
|
let actions: Vec<&str> = actions[0].split(',').collect();
|
||||||
|
//let message = format!("Actions: {:?}", actions);
|
||||||
|
let mut status = Some(0);
|
||||||
|
for action in actions {
|
||||||
|
let output = Command::new("irsend")
|
||||||
|
.arg("SEND_ONCE")
|
||||||
|
.arg(remote)
|
||||||
|
.arg(action)
|
||||||
|
.output();
|
||||||
|
|
||||||
|
match output {
|
||||||
|
Ok(ref out) => status = if !out.status.success() { out.status.code() } else { status },
|
||||||
|
Err(_) => status = None
|
||||||
|
}
|
||||||
|
|
||||||
|
thread::sleep(time::Duration::from_secs(1));
|
||||||
|
|
||||||
|
}
|
||||||
|
let message = match status {
|
||||||
|
Some(code) => if code == 0 { "Success" } else { "Failure" },
|
||||||
|
None => "Could not find irsend program"
|
||||||
|
};
|
||||||
|
respond(status::Ok, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remote(req: &mut Request) -> IronResult<Response> {
|
||||||
|
let url_ref = req.url.clone();
|
||||||
|
let remote_name = url_ref.path()[0];
|
||||||
|
|
||||||
|
let query_ref = match req.url.query() {
|
||||||
|
Some(_) => req.get_ref::<UrlEncodedQuery>(),
|
||||||
|
None => return respond(
|
||||||
|
status::BadRequest,
|
||||||
|
"Please add `actions` to the query params"
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
let actions = match query_ref {
|
||||||
|
Ok(ref hashmap) => hashmap.get("actions"),
|
||||||
|
Err(ref e) => return respond(
|
||||||
|
status::BadRequest,
|
||||||
|
format!("{:?}", e).as_str()
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
match actions {
|
||||||
|
Some(act) => remote_run(remote_name, act),
|
||||||
|
None => respond(
|
||||||
|
status::BadRequest,
|
||||||
|
format!("No actions specified!").as_str()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let router = router!(
|
||||||
|
index: get "/" => index,
|
||||||
|
remote: get "/:remote" => remote
|
||||||
|
);
|
||||||
|
|
||||||
|
Iron::new(router).http("localhost:3000").unwrap();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user