use actix_files as fs;
use actix_web::{web, middleware, App, HttpServer, HttpResponse, Responder, Result, web::Query};
use askama::Template;
-use serde::{Deserialize};
+
+use ron::de::from_reader;
+use serde::Deserialize;
+use std::fs::File;
+
+mod consts;
+mod crypto;
#[derive(Template)]
#[template(path = "main.html")]
m: Option<String>
}
+static DEFAULT_MESSAGE: &str = "Marc, roule un pet'!";
+static KEY: &str = "secret";
+
fn main_page(query: Query<Request>) -> Result<HttpResponse> {
let m =
match &query.m {
- Some(b) => &b,
- None => "Marc, roule un pet'!"
+ Some(b) =>
+ match crypto::decrypt(KEY, b) {
+ Some(m) => m,
+ None => String::from(DEFAULT_MESSAGE)
+ },
+ None => String::from(DEFAULT_MESSAGE)
};
- let hello = MainTemplate { sentence: m };
+ let hello = MainTemplate { sentence: &m };
let s = hello.render().unwrap();
Ok(HttpResponse::Ok().content_type("text/html").body(s))
}
+#[derive(Debug, Deserialize)]
+struct Config {
+ port: u16
+}
+
fn main() -> std::io::Result<()> {
+ println!("Starting RUP...");
+
+ let config: Config = {
+ let f = File::open(consts::FILE_CONF).expect(&format!("Failed to open configuration file {}", consts::FILE_CONF));
+ match from_reader(f) {
+ Ok(c) => c,
+ Err(e) => panic!("Failed to load config: {}", e)
+ }
+ };
+
+ println!("Configuration: {:?}", config);
+
let mut listenfd = ListenFd::from_env();
let mut server =
HttpServer::new(
if let Some(l) = listenfd.take_tcp_listener(0).unwrap() {
server.listen(l).unwrap()
} else {
- server.bind("0.0.0.0:8082").unwrap()
+ server.bind(&format!("0.0.0.0:{}", config.port)).unwrap()
};
server.run()