X-Git-Url: http://git.euphorik.ch/?p=rup.git;a=blobdiff_plain;f=src%2Fmain.rs;h=6c9ab2796d0fd05fe379d71719f2ba2fda43902b;hp=b86ce5762185ed4e6c7683037f2b692f9620cf7d;hb=6cc0700aa5b90500b620ca8dd5b2976892aee0a7;hpb=b1f2c5b803a7e85a3b0c8d999cf9a13d28c6c6c2 diff --git a/src/main.rs b/src/main.rs index b86ce57..6c9ab27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ extern crate actix_web; extern crate listenfd; extern crate askama; +extern crate percent_encoding; use listenfd::ListenFd; use actix_files as fs; @@ -28,18 +29,15 @@ pub struct Request { m: Option } -static DEFAULT_MESSAGE: &str = "Marc, roule un pet'!"; -static KEY: &str = "secret"; - -fn main_page(query: Query) -> Result { +fn main_page(query: Query, key: &str) -> Result { let m = match &query.m { Some(b) => - match crypto::decrypt(KEY, b) { - Some(m) => m, - None => String::from(DEFAULT_MESSAGE) + match crypto::decrypt(key, b) { + Ok(m) => m, + Err(_e) => String::from(consts::DEFAULT_MESSAGE) // TODO: log error. }, - None => String::from(DEFAULT_MESSAGE) + None => String::from(consts::DEFAULT_MESSAGE) }; let hello = MainTemplate { sentence: &m }; @@ -59,12 +57,6 @@ fn get_exe_name() -> String { let sep: &[_] = &['\\', '/']; first_arg[first_arg.rfind(sep).unwrap()+1..].to_string() } - -fn print_usage() { - println!("Usage:"); - println!(" {} [--help] [--encrypt |--decrypt ]", get_exe_name()); -} - fn read_key() -> String { let mut key = String::new(); File::open(consts::FILE_KEY) @@ -73,44 +65,16 @@ fn read_key() -> String { .expect(&format!("Failed to read key file: {}", consts::FILE_KEY)); String::from( - url::percent_encoding::percent_decode(key.as_bytes()) + percent_encoding::percent_decode(key.replace('\n', "").as_bytes()) .decode_utf8() .expect(&format!("Failed to decode key file: {}", consts::FILE_KEY)) ) } fn main() -> std::io::Result<()> { - let args: Vec = args().collect(); - let key = read_key(); - if args.iter().any(|arg| arg == "--help") { - print_usage(); - return Ok(()); - } else if let Some((position_arg_encrypt, _)) = args.iter().find_position(|arg| arg == &"--encrypt") { - match args.iter().nth(position_arg_encrypt + 1) { - Some(mess_to_encrypt) => { - - let encrypted_mess = crypto::encrypt(&key, mess_to_encrypt); - let encrypted_mess_encoded = url::percent_encoding::utf8_percent_encode(&encrypted_mess, url::percent_encoding::DEFAULT_ENCODE_SET).to_string(); - println!("Encrypted message percent-encoded: {}", encrypted_mess_encoded); - } - None => print_usage() - } - - return Ok(()); - } else if let Some((position_arg_decrypt, _)) = args.iter().find_position(|arg| arg == &"--decrypt") { - match args.iter().nth(position_arg_decrypt + 1) { - Some(cipher_text) => { - let cipher_text_decoded = url::percent_encoding::percent_decode(cipher_text.as_bytes()).decode_utf8().expect("Unable to decode encoded cipher text"); - let plain_text = crypto::decrypt(&key, &cipher_text_decoded).unwrap(); - println!("Decrypted message: {}", plain_text); - } - None => print_usage() - } - - return Ok(()); - } + if process_args(&key) { return Ok(()) } println!("Starting RUP as web server..."); @@ -127,11 +91,13 @@ fn main() -> std::io::Result<()> { let mut listenfd = ListenFd::from_env(); let mut server = HttpServer::new( - || { + move || { + let key = key.clone(); // Is this neccessary?? + App::new() .wrap(middleware::Compress::default()) .wrap(middleware::Logger::default()) - .service(web::resource("/").to(main_page)) + .service(web::resource("/").to(move |query| main_page(query, &key))) .service(fs::Files::new("/static", "static").show_files_listing()) } ); @@ -145,3 +111,49 @@ fn main() -> std::io::Result<()> { server.run() } + +fn process_args(key: &String) -> bool { + fn print_usage() { + println!("Usage:"); + println!(" {} [--help] [--encrypt |--decrypt ]", get_exe_name()); + } + + let args: Vec = args().collect(); + + if args.iter().any(|arg| arg == "--help") { + print_usage(); + return true + } else if let Some((position_arg_encrypt, _)) = args.iter().find_position(|arg| arg == &"--encrypt") { + match args.iter().nth(position_arg_encrypt + 1) { + Some(mess_to_encrypt) => { + match crypto::encrypt(&key, mess_to_encrypt) { + Ok(encrypted_mess) => { + let encrypted_mess_encoded = percent_encoding::utf8_percent_encode(&encrypted_mess, percent_encoding::NON_ALPHANUMERIC).to_string(); + println!("Encrypted message percent-encoded: {}", encrypted_mess_encoded); }, + Err(error) => + println!("Unable to encrypt: {:?}", error) + } + } + None => print_usage() + } + + return true + } else if let Some((position_arg_decrypt, _)) = args.iter().find_position(|arg| arg == &"--decrypt") { + match args.iter().nth(position_arg_decrypt + 1) { + Some(cipher_text) => { + let cipher_text_decoded = percent_encoding::percent_decode(cipher_text.as_bytes()).decode_utf8().expect("Unable to decode encoded cipher text"); + match crypto::decrypt(&key, &cipher_text_decoded) { + Ok(plain_text) => + println!("Decrypted message: {}", plain_text), + Err(error) => + println!("Unable to decrypt: {:?}", error) + } + } + None => print_usage() + } + + return true + } + + return false +}