summaryrefslogtreecommitdiff
path: root/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/server.rs b/src/server.rs
index 7c1b3db..e20bb96 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -44,6 +44,10 @@ fn make_renderer() -> HandlebarsEngine {
"add_post".to_string(),
include_str!("data/templates/add_post.hbs").to_string(),
);
+ templates.insert(
+ "approve".to_string(),
+ include_str!("data/templates/approve.hbs").to_string(),
+ );
e.add(Box::new(MemorySource(templates)));
if let Err(r) = e.reload() {
@@ -113,6 +117,38 @@ fn add_post(r: &mut Request) -> IronResult<Response> {
)))
}
+fn approve(r: &mut Request) -> IronResult<Response> {
+ let mut result = Map::new();
+ let quote_id = get_param(r, "id").ok().and_then(
+ |id| id.parse::<i64>().ok(),
+ );
+ let action = get_param(r, "action").unwrap_or("".to_string());
+
+ let quotes = {
+ let mu = r.get::<Write<State>>().unwrap();
+ let state = mu.lock().unwrap();
+ if let Some(quote_id) = quote_id {
+ info!("Approval for quote({}): {}", quote_id, action);
+ if action == "approve" {
+ data::approve_quote(&state.connection, quote_id)?;
+ } else if action == "reject" {
+ data::delete_quote(&state.connection, quote_id)?;
+ } else {
+ return Err(From::from(
+ LinoError::BadRequest(format!("invalid action: {}", action)),
+ ));
+ }
+ }
+ data::get_pending_quotes(&state.connection)?
+ };
+ result.insert("quotes".to_string(), to_json(&quotes));
+ Ok(Response::with((
+ status::Ok,
+ Header(ContentType::html()),
+ Template::new("approve", result),
+ )))
+}
+
pub fn serve(state: State, port: u16) {
let router =
router!(
@@ -121,6 +157,7 @@ pub fn serve(state: State, port: u16) {
add_post: post "/add.jsp" => add_post,
quotes_jsp: get "/quotes.jsp" => quotes,
view_quote: get "/view_quote" => quotes,
+ approve: get "/approve.jsp" => approve,
);
let mut chain = Chain::new(router);
chain.link_after(make_renderer());