X-Git-Url: http://git.euphorik.ch/?p=rup.git;a=blobdiff_plain;f=backend%2Fsrc%2Fmain.rs;fp=backend%2Fsrc%2Fmain.rs;h=726fcf8e0707c7dd70f01640540c6b1355d0cb50;hp=ddd9b914cdee26c44baf15e51526366fdecdfc7b;hb=863db0d616f952ceac10b92dde703bef5093469a;hpb=a44ff4555b6f08fce20f95ab4fae370012caa0aa diff --git a/backend/src/main.rs b/backend/src/main.rs index ddd9b91..726fcf8 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -5,10 +5,10 @@ extern crate percent_encoding; use listenfd::ListenFd; use actix_files as fs; -use actix_web::{ web, middleware, App, HttpServer, HttpResponse, web::Query }; +use actix_web::{ get, web, Responder, middleware, App, HttpServer, HttpRequest, HttpResponse, web::Query }; use askama::Template; -use std::{ fs::File, path::Path, env::args, io::prelude::* }; +use std::{ sync::Mutex, fs::File, path::Path, env::args, io::prelude::* }; use ron::{ de::from_reader, ser::{ to_string_pretty, PrettyConfig } }; use serde::{ Deserialize, Serialize }; @@ -16,11 +16,13 @@ use itertools::Itertools; mod consts; mod crypto; +mod db; +mod types; #[derive(Template)] #[template(path = "main.html")] -struct MainTemplate<'a> { - sentence: &'a str, +struct MainTemplate { + sentence: String, } #[derive(Deserialize)] @@ -28,21 +30,21 @@ pub struct Request { m: Option } -fn main_page(query: Query, key: &str) -> HttpResponse { +#[get("/")] +async fn main_page(key_shared: web::Data>, query: Query) -> impl Responder { + let key = key_shared.lock().unwrap(); + let m = match &query.m { Some(b) => - match crypto::decrypt(key, b) { + match crypto::decrypt(&*key, b) { Ok(m) => m, Err(_e) => String::from(consts::DEFAULT_MESSAGE) // TODO: log error. }, None => String::from(consts::DEFAULT_MESSAGE) }; - let hello = MainTemplate { sentence: &m }; - - let s = hello.render().unwrap(); - HttpResponse::Ok().content_type("text/html").body(s) + MainTemplate { sentence: m } } #[derive(Debug, Deserialize, Serialize)] @@ -112,16 +114,17 @@ async fn main() -> std::io::Result<()> { println!("Configuration: {:?}", config); + let key_shared = web::Data::new(Mutex::new(key)); + let mut listenfd = ListenFd::from_env(); let mut server = HttpServer::new( move || { - let key = key.clone(); // Is this neccessary?? - App::new() + .app_data(key_shared.clone()) .wrap(middleware::Compress::default()) .wrap(middleware::Logger::default()) - .service(web::resource("/").to(move |query| main_page(query, &key))) + .service(main_page) .service(fs::Files::new("/static", "static").show_files_listing()) } );