From 27f51a711486a5435113942877cb9dd54f898a95 Mon Sep 17 00:00:00 2001 From: alpcentaur Date: Mon, 18 Oct 2021 18:22:03 +0200 Subject: [PATCH] docker+rust --- .../deb-rust-pluriton-interface/Babelfish.png | Bin 0 -> 350489 bytes .../Digi_3corner.png | Bin 0 -> 7848 bytes .../Digi_3corner_up.png | Bin 0 -> 10841 bytes build/deb-rust-pluriton-interface/Dockerfile | 21 + .../Dockerfile.save | 48 ++ build/deb-rust-pluriton-interface/account.rs | 281 +++++++++ .../bootstrap.min.css | 6 + build/deb-rust-pluriton-interface/cloud.css | 148 +++++ build/deb-rust-pluriton-interface/config.toml | 34 ++ .../digitalcourage.css | 572 ++++++++++++++++++ build/deb-rust-pluriton-interface/error.html | 29 + .../foorms_favicon.svg | 1 + .../foorms_logo_beta.svg | 1 + build/deb-rust-pluriton-interface/forward.rs | 423 +++++++++++++ .../forward.rs.save | 390 ++++++++++++ .../forward.rs_notwork | 421 +++++++++++++ .../forward.rs_work | 376 ++++++++++++ build/deb-rust-pluriton-interface/index.css | 292 +++++++++ build/deb-rust-pluriton-interface/index.html | 349 +++++++++++ build/deb-rust-pluriton-interface/lang.json | 520 ++++++++++++++++ build/deb-rust-pluriton-interface/link.html | 305 ++++++++++ build/deb-rust-pluriton-interface/main.rs | 104 ++++ .../old_src_try/src/account.rs | 0 .../old_src_try/src/config.rs | 76 +++ .../old_src_try/src/errors.rs | 58 ++ .../old_src_try/src/forward.rs | 147 +++++ .../old_src_try/src/main.rs | 69 +++ .../old_src_try/src/sniff.rs | 101 ++++ .../old_src_try/src/templates.rs | 61 ++ .../pluriton-interface | 1 + .../deb-rust-pluriton-interface/templates.rs | 65 ++ .../templates.rs.save | 65 ++ .../white-background.png | Bin 0 -> 2872 bytes build/tf-gpu-FASTsearch/Dockerfile | 46 -- build/tfgpu-pluriton/Dockerfile | 44 ++ .../FASTsearch.py | 3 +- build/tfgpu-pluriton/Translations.txt | 2 + build/tfgpu-pluriton/fastapi_server.py | 37 ++ build/tfgpu-pluriton/generateModels.py | 18 + build/tfgpu-pluriton/postcommand | 1 + build/tfgpu-pluriton/req.js | 3 + build/tfgpu-pluriton/test_runwithgen.py | 16 + build/tfgpu-pluriton/test_runwithload.py | 11 + build/tfgpu-pluriton/updateDatabase.py | 126 ++++ compose/docker-compose.yml | 31 +- in | 0 out.html | 0 47 files changed, 5250 insertions(+), 52 deletions(-) create mode 100644 build/deb-rust-pluriton-interface/Babelfish.png create mode 100644 build/deb-rust-pluriton-interface/Digi_3corner.png create mode 100644 build/deb-rust-pluriton-interface/Digi_3corner_up.png create mode 100644 build/deb-rust-pluriton-interface/Dockerfile create mode 100644 build/deb-rust-pluriton-interface/Dockerfile.save create mode 100644 build/deb-rust-pluriton-interface/account.rs create mode 100644 build/deb-rust-pluriton-interface/bootstrap.min.css create mode 100644 build/deb-rust-pluriton-interface/cloud.css create mode 100644 build/deb-rust-pluriton-interface/config.toml create mode 100644 build/deb-rust-pluriton-interface/digitalcourage.css create mode 100644 build/deb-rust-pluriton-interface/error.html create mode 100644 build/deb-rust-pluriton-interface/foorms_favicon.svg create mode 100644 build/deb-rust-pluriton-interface/foorms_logo_beta.svg create mode 100644 build/deb-rust-pluriton-interface/forward.rs create mode 100644 build/deb-rust-pluriton-interface/forward.rs.save create mode 100644 build/deb-rust-pluriton-interface/forward.rs_notwork create mode 100644 build/deb-rust-pluriton-interface/forward.rs_work create mode 100644 build/deb-rust-pluriton-interface/index.css create mode 100644 build/deb-rust-pluriton-interface/index.html create mode 100644 build/deb-rust-pluriton-interface/lang.json create mode 100644 build/deb-rust-pluriton-interface/link.html create mode 100644 build/deb-rust-pluriton-interface/main.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/account.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/config.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/errors.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/forward.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/main.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/sniff.rs create mode 100644 build/deb-rust-pluriton-interface/old_src_try/src/templates.rs create mode 160000 build/deb-rust-pluriton-interface/pluriton-interface create mode 100644 build/deb-rust-pluriton-interface/templates.rs create mode 100644 build/deb-rust-pluriton-interface/templates.rs.save create mode 100644 build/deb-rust-pluriton-interface/white-background.png delete mode 100644 build/tf-gpu-FASTsearch/Dockerfile create mode 100644 build/tfgpu-pluriton/Dockerfile rename build/{tf-gpu-FASTsearch => tfgpu-pluriton}/FASTsearch.py (99%) create mode 100644 build/tfgpu-pluriton/Translations.txt create mode 100644 build/tfgpu-pluriton/fastapi_server.py create mode 100644 build/tfgpu-pluriton/generateModels.py create mode 100644 build/tfgpu-pluriton/postcommand create mode 100644 build/tfgpu-pluriton/req.js create mode 100644 build/tfgpu-pluriton/test_runwithgen.py create mode 100644 build/tfgpu-pluriton/test_runwithload.py create mode 100644 build/tfgpu-pluriton/updateDatabase.py create mode 100644 in create mode 100644 out.html diff --git a/build/deb-rust-pluriton-interface/Babelfish.png b/build/deb-rust-pluriton-interface/Babelfish.png new file mode 100644 index 0000000000000000000000000000000000000000..4be7d42280573b7d1ee82a3cae550ccbd295d49e GIT binary patch literal 350489 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

J?t0El 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 literal 0 HcmV?d00001 diff --git a/build/deb-rust-pluriton-interface/Digi_3corner.png b/build/deb-rust-pluriton-interface/Digi_3corner.png new file mode 100644 index 0000000000000000000000000000000000000000..84e4fd607c4f8eda2a10c607f23588c6d15692ed GIT binary patch literal 7848 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 Qwh)K~$!1HT$*u$c1;?C{KL7v# literal 0 HcmV?d00001 diff --git a/build/deb-rust-pluriton-interface/Digi_3corner_up.png b/build/deb-rust-pluriton-interface/Digi_3corner_up.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8665818e71496a0ac4c5ca4f56faf8c0017a7f GIT binary patch literal 10841 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 iMz-1iuie(OC> /etc/apt/sources.list + +RUN echo "deb-src http://deb.debian.org/debian/ stretch main contrib non-free" >> /etc/apt/sources.list + +RUN apt-get update && apt-cache search libssl +RUN apt-get update && apt-get install -y \ +build-essential checkinstall zlib1g-dev pkg-config libssl1.0-dev -y + +COPY pluriton-interface pluriton-interface + +WORKDIR /opt/pluriton-interface + +CMD cargo run --no-default-features + + + diff --git a/build/deb-rust-pluriton-interface/Dockerfile.save b/build/deb-rust-pluriton-interface/Dockerfile.save new file mode 100644 index 0000000..df75125 --- /dev/null +++ b/build/deb-rust-pluriton-interface/Dockerfile.save @@ -0,0 +1,48 @@ +FROM rust:slim + +WORKDIR /opt + +# Install needed dependecies + +RUN echo "deb http://ftp.de.debian.org/debian unstable main contrib" | tee -a /etc/apt/sources.list + +RUN apt-get update && apt-get install -y libmysql++-dev git + +RUN git clone https://git.42l.fr/neil/sncf.git + +WORKDIR /opt/sncf + +COPY config.toml /opt/sncf/config.toml + +# graphics individualization + +COPY foorms_logo_beta.svg /opt/sncf/templates/assets/foorms_logo_beta.svg + +COPY white-background.png /opt/sncf/templates/assets/index-background.png + +COPY Digi_3corner.png /opt/sncf/templates/assets/flavicon.ico + +COPY index.css /opt/sncf/templates/assets/index.css + +COPY cloud.css /opt/sncf/templates/assets/cloud.css + +COPY bootstrap.min.css /opt/sncf/templates/assets/bootstrap.min.css + +COPY digitalcourage.css /opt/sncf/templates/assets/digitalcourage.css + +COPY index.html /opt/sncf/templates/index.html + +COPY link.html /opt/sncf/templates/link.html + +COPY forward.rs /opt/sncf/src/forward.rs + +#COPY templates.rs /opt/sncf/src/templates.rs + +# The written is just firstly a hack + +COPY lang.json /opt/sncf/lang.json + +CMD cargo run --no-default-features --features mysql + + + diff --git a/build/deb-rust-pluriton-interface/account.rs b/build/deb-rust-pluriton-interface/account.rs new file mode 100644 index 0000000..55ce1ba --- /dev/null +++ b/build/deb-rust-pluriton-interface/account.rs @@ -0,0 +1,281 @@ +use actix_web::client::Client; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use base64::URL_SAFE_NO_PAD; +use percent_encoding::percent_decode_str; +use rand::rngs::OsRng; +use rand::Rng; +use rand::RngCore; +use regex::Regex; +use std::collections::HashMap; +use std::time::Duration; +use crate::config::{ADJ_LIST, NAME_LIST, PROXY_TIMEOUT, USER_AGENT}; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::templates::get_lang; +use crate::CONFIG; +#[derive(Serialize)] +struct NCLoginForm<'a> { + pub user: &'a str, + pub password: &'a str, + pub timezone: &'a str, + pub timezone_offset: &'a str, + pub requesttoken: &'a str, +} +// check if the user is connected to Nextcloud +// returns Some(cookie_raw_value) if connected +// returns None if disconnected +pub fn is_logged_in(req: &HttpRequest) -> Option<&str> { + let c = req.headers().get("Cookie")?.to_str().ok()?; + if c.contains("nc_username") { + Some(c) + } else { + None + } +} +// attempts to create the account from Nextcloud's API +// returns the newly created username. +// if it fails (bad return code), returns None. +pub async fn create_account( + client: &web::Data, + user: &str, + password: &str, + lang: String, +) -> Result { + let mut register_query = client + .post(format!( + "{}/{}", + CONFIG.nextcloud_url, "ocs/v1.php/cloud/users" + )) + .timeout(Duration::new(PROXY_TIMEOUT, 0)) + .basic_auth(&CONFIG.admin_username, Some(&CONFIG.admin_password)) + .header( + http::header::CONTENT_TYPE, + "application/x-www-form-urlencoded", + ) + .header("OCS-APIRequest", "true") + .send_form(&NCCreateAccountForm { + userid: user, + password, + quota: "0B", + language: &lang, + }) + .await + .map_err(|e| { + eprintln!("error_createaccount_post: {}", e); + crash(lang.clone(), "error_createaccount_post") + })?; + // only 200 http status code is allowed + if register_query.status() != 200 { + eprintln!("error_createaccount_status: {}", register_query.status()); + // + extract response body for debugging purposes + let response_body = register_query.body().await.map_err(|e| { + eprintln!("error_createaccount_post_body: {}", e); + crash(lang.clone(), "error_createaccount_post_body") + })?; + debug(&format!("Body: {:#?}", response_body)); + return Err(crash(lang.clone(), "error_createaccount_status")); + } + // extract response body + let response_body = register_query.body().await.map_err(|e| { + eprintln!("error_createaccount_post_body: {}", e); + crash(lang.clone(), "error_createaccount_post_body") + })?; + let response_body = String::from_utf8_lossy(&response_body); + // grasp NC status code + let status_start = response_body.find("").ok_or_else(|| { + eprintln!("error_createaccount_ncstatus_parse: start missing"); + crash(lang.clone(), "error_createaccount_ncstatus_parse") + })? + 12; + let status_end = response_body.find("").ok_or_else(|| { + eprintln!("error_createaccount_ncstatus_parse: end missing"); + crash(lang.clone(), "error_createaccount_ncstatus_parse") + })?; + let code = &response_body[status_start..status_end]; + match code.parse::() { + Ok(100) => Ok(String::from(user)), // success + Ok(r) => { + eprintln!("error_createaccount_ncstatus: {}", r); + Err(crash(lang.clone(), "error_createaccount_ncstatus")) + } + Err(e) => { + eprintln!("error_createaccount_ncstatus_parse: {}", e); + Err(crash(lang.clone(), "error_createaccount_ncstatus_parse")) + } + } +} +#[derive(Serialize)] +struct NCCreateAccountForm<'a> { + pub userid: &'a str, + pub password: &'a str, + pub quota: &'a str, + pub language: &'a str, +} +pub async fn login( + client: &web::Data, + req: &HttpRequest, + user: &str, + password: &str, +) -> Result { + debug(&format!("Sending forged login for user {}", user)); + // 1. GET /csrftoken + let mut login_get = client + .get(format!("{}/{}", CONFIG.nextcloud_url, "csrftoken")) + .timeout(Duration::new(PROXY_TIMEOUT, 0)) + .header("User-Agent", USER_AGENT) + .header("Accept-Language" , "fr" ) + .send() + .await + .map_err(|e| { + eprintln!("error_login_get: {}", e); + crash(get_lang(&req), "error_login_get") + })?; + // rewrite cookie headers from GET to POST + let mut str_cookiepair = String::new(); + // remove duplicate oc cookie (nextcloud bug) + // leading to sncf being unable to forge logins + let cookie_set = login_get.headers().get_all("set-cookie"); + let mut cookie_map: HashMap = HashMap::new(); + for c in cookie_set { + // get str version of cookie header + let c_str = c.to_str().map_err(|e| { + eprintln!("error_login_cookiepair (1): {}", e); + crash(get_lang(&req), "error_login_cookiepair") + })?; + // percent decode + let c_str = percent_decode_str(c_str).decode_utf8_lossy(); + //then remove values after ';' + let c_str_arr = c_str.split(';').collect::>(); + let c_str = c_str_arr + .first() + .expect("error: cookiepair split does not have a first value. shouldn't happen."); + // split cookie key and cookie value + // split_once would work best but it's nightly-only for now + let c_str_arr = c_str.split('=').collect::>(); + let c_key = c_str_arr + .first() + .expect("error: cookie key split does not have a first value, shouldn't happen."); + let c_value = c_str.replace(&format!("{}=", c_key), ""); + if c_key != c_str { + // if the key already exists in hashmap, replace its value + // else, insert it + if let Some(c_sel) = cookie_map.get_mut(*c_key) { + *c_sel = c_value; + } else { + cookie_map.insert(c_key.to_string(), c_value); + } + } else { + eprintln!("error_login_cookiepair (2)"); + return Err(crash(get_lang(&req), "error_login_cookiepair")); + } + } + for (cookie_k, cookie_v) in cookie_map { + str_cookiepair.push_str(&format!("{}={}; ", cookie_k, cookie_v)); + } + // load requesttoken regex + lazy_static! { + static ref RE: Regex = Regex::new(r#"\{"token":"(?P[^"]*)"\}"#) + .expect("Error while parsing the requesttoken regex"); + } + let post_body = login_get.body().await.map_err(|e| { + eprintln!("error_login_get_body: {}", e); + crash(get_lang(&req), "error_login_get_body") + })?; + let post_body_str = String::from_utf8_lossy(&post_body); + // save requesttoken (CSRF) for POST + let requesttoken = RE + .captures(&post_body_str) + .ok_or_else(|| { + eprintln!("error_login_regex (no capture)"); + crash(get_lang(&req), "error_login_regex") + })? + .name("token") + .ok_or_else(|| { + eprintln!("error_login_regex (no capture named token)"); + crash(get_lang(&req), "error_login_regex") + })? + .as_str(); + // 2. POST /login + let mut login_post = client + .post(format!("{}/{}", CONFIG.nextcloud_url, "login")) + .timeout(Duration::new(PROXY_TIMEOUT, 0)) + .header("User-Agent", USER_AGENT) + .header("Accept-Language" , "fr" ); + // include all NC cookies in one cookie (cookie pair) + login_post = login_post.header("Cookie", str_cookiepair); + // send the same POST data as you'd log in from a web browser + let response_post = login_post + .send_form(&NCLoginForm { + user, + password, + timezone: "UTC", + timezone_offset: "2", + requesttoken, + }) + .await + .map_err(|e| { + eprintln!("error_login_post: {}", e); + crash(get_lang(&req), "error_login_post") + })?; + // 3. set the same cookies in the user's browser + let mut user_response = HttpResponse::SeeOther(); + for item in response_post.headers().clone().get_all("set-cookie") { + user_response.header( + "Set-Cookie", + item.to_str().map_err(|e| { + eprintln!("error_login_setcookie: {}", e); + crash(get_lang(&req), "error_login_setcookie") + })?, + ); + } + // redirect to forms! + Ok(user_response + .header("Accept-Language", "fr" ) + .header(http::header::LOCATION, "/apps/forms") + .finish() + .await + .map_err(|e| { + eprintln!("error_login_redir: {}", e); + crash(get_lang(&req), "error_login_redir") + })?) +} +// checks if the token seems valid before asking the db. +// The token must be 45 bytes long and base64-encoded. +// returns true if the token is valid +pub fn check_token(token: &str) -> bool { + let token_dec = base64::decode_config(token, URL_SAFE_NO_PAD); + if let Ok(token_bytes) = token_dec { + token_bytes.len() == 45 + } else { + false + } +} +// generates a new token +pub fn gen_token(size: usize) -> String { + // Using /dev/random to generate random bytes + let mut r = OsRng; + let mut my_secure_bytes = vec![0u8; size]; + r.fill_bytes(&mut my_secure_bytes); + base64::encode_config(my_secure_bytes, URL_SAFE_NO_PAD) +} +// generates a random username composed of +// an adjective, a name and a 4-byte base64-encoded token. +// with the default list, that represents: +// 141 * 880 = 124 080 +// 255^4 / 2 = 2 114 125 312 (we lose approx. the half because of uppercase) +// 2 114 125 312 * 124 080 = 2.623206687*10^14 possible combinations?? +pub fn gen_name() -> String { + // uppercasing gen_token because NC would probably refuse two + // users with the same name but a different case + // and that'd be a pain to debug + format!( + "{}{}-{}", + list_rand(&ADJ_LIST), + list_rand(&NAME_LIST), + gen_token(4).to_uppercase() + ) +} +pub fn list_rand(list: &[String]) -> &String { + let mut rng = rand::thread_rng(); + let roll = rng.gen_range(0..list.len() - 1); + &list[roll] +} diff --git a/build/deb-rust-pluriton-interface/bootstrap.min.css b/build/deb-rust-pluriton-interface/bootstrap.min.css new file mode 100644 index 0000000..aa60b30 --- /dev/null +++ b/build/deb-rust-pluriton-interface/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:none}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:0px;margin-bottom:0px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 0px}.lead{margin-bottom:0px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:white;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ diff --git a/build/deb-rust-pluriton-interface/cloud.css b/build/deb-rust-pluriton-interface/cloud.css new file mode 100644 index 0000000..f2f76f6 --- /dev/null +++ b/build/deb-rust-pluriton-interface/cloud.css @@ -0,0 +1,148 @@ +.has-text-centered > * { + text-align: center; +} + +.c-subelem, .c-fullwidth > * { + color: #2c2c2c; +} + + +.c-blue { +} + +.c-blue > a { + color: white; + background: #4b97ca; + width: 154px; + height: 35px; +} + +.c-flex { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} + +@media screen and (min-width:1280px) { + .c-flex.c-flex-reverse { + flex-direction: row-reverse; + } + .c-jumbo { + padding: 1.5rem 0; + } + .c-subelem { + padding: 0; + max-width: 40vw; + margin: auto 0; + } +} + +.c-jumbo.c-jumbo-big { + min-height: 25rem; + padding: 1rem; +} + +.c-jumbo.c-jumbo-medium { + min-height: 18rem; + padding: 1rem; +} + +.c-jumbo.c-jumbo-small { + min-height: 10rem; + padding: 1rem; +} + +.c-button { + display: block; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18); + border-radius: 10pt; + text-align: center; + transition: all .2s ease-in-out; + white-space: nowrap; + cursor: pointer; + text-decoration: none; + padding: 0.4em; + width: max-content; + height: max-content; + min-width: 154px; + min-height: 35px; + margin: 0.5rem; + color: white; + text-weight: bolder; +} + +.c-button:only-child { + margin: auto; +} + +.c-button.c-big { + font-size: x-large; +} + +.c-subelem { + margin: auto 2rem; + padding: 1rem 0; + width: 100%; +} + +.c-img-shadow { + height: auto; + max-width: 100%; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18); + border-radius: 2px; +} + +.c-img-center { + display: block; + margin: auto; +} + +.c-fullwidth { + width: 100%; + margin: auto 2rem; +} + +@media screen and (max-width:1279px) { + .c-no-margin-mobile { + margin: 0 !important; + } +} + +.c-jumbo { + padding: .5rem 0; + width: 100%; +} + +.c-fade-left { + opacity: 0; + transform: translateX(-100px); + animation: fadeInLeft 2s ease-in-out both; +} + +.c-fade-right { + opacity: 0; + transform: translateX(100px); + animation: fadeInRight 2s ease-in-out both; +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + transform: translateX(-100px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + transform: translateX(100px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} diff --git a/build/deb-rust-pluriton-interface/config.toml b/build/deb-rust-pluriton-interface/config.toml new file mode 100644 index 0000000..35ee1fa --- /dev/null +++ b/build/deb-rust-pluriton-interface/config.toml @@ -0,0 +1,34 @@ +# The address and port sncf will listen +listening_address = "0.0.0.0" +listening_port = 8000 + +# Public-facing domain for sncf. +# includes protocol, FQDN and port, without the trailing slash. +sncf_url = "http://basabuuka.org" + +# SQLite: path to the SQLite DB +# PostgreSQL: postgres://user:password@address:port/database +# MySQL: mysql://user:password@address:port/database +database_path = "mysql://nextcloud:KF8zUh1q4HovFmBa6lnk7xCmvoonfBoE@nextcloud-db:3306/nextcloud" + +# IP address of the Nextcloud instance, including protocol and port +nextcloud_url = "http://nextcloud-web:80" + +# Nextcloud admin account credentials +# TODO hash adminpw +admin_username = "sncf_admin" +admin_password = "DieHeiligeKuhDerNacht1635" + +# How many days of inactivity for an admin token before deleting NC accounts +prune_days = 40 + +# Displays route names and a lot of information +debug_mode = true + +# Used to encrypt csrf tokens and csrf cookies. +# Generate random bytes: openssl rand -base64 32 +# Then paste the result in this variable +cookie_key = "Af3v5KMNPmwYYBRRjm/W5ds1rHDdyCEvpxVTMLKEKl0=" + +# Don't touch this unless you know what you're doing +config_version = 2 diff --git a/build/deb-rust-pluriton-interface/digitalcourage.css b/build/deb-rust-pluriton-interface/digitalcourage.css new file mode 100644 index 0000000..e83ad82 --- /dev/null +++ b/build/deb-rust-pluriton-interface/digitalcourage.css @@ -0,0 +1,572 @@ +/* This software is governed by the CeCILL-B license. If a copy of this license + * is not distributed with this file, you can obtain one at + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + * + * Authors of STUdS (initial project) : Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ + * Authors of OpenSondage : Framasoft (https://github.com/framasoft) + * + * ============================= + * + * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence + * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-fr.txt + * + * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ + * Auteurs d'OpenSondage : Framasoft (https://github.com/framasoft) + */ +@font-face { + font-family: "DejaVu Sans"; + src: url('../fonts/DejaVuSans.ttf'); +} +body { + font-family: "DejaVu Sans", Verdana, Geneva, sans-serif; + color:#333; + background:#eee; +} + +.trait { /* hr */ + background-color: #EEE; + height: 5px; + margin: 5px 0; + border: none; +} + +.ombre { + background-color: #FFF; + box-shadow: -4px 6px 9px rgba(50, 50, 50, 0.5); + margin: 15px auto 30px; +} + +.hide { + display: none; +} + +/* Commentaires */ +div.comment{ + margin-bottom: 10px; + border-left: 1px dashed #999; + background: #F5F5F5; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 14px; +} + +.comment_date { + font-style: italic; + font-size: 12px; + letter-spacing: -0.7px; + color: grey; +} + +/* Règles générales */ + +a:focus { /* a11y */ + outline:#000 dotted 1px; +} + +header, footer { +} +main { + margin-top: 20px; +} +header h1 { + margin-top: 0; +} +.container { + padding: 30px; +} +.container .jumbotron { + padding: 20px 20px; + border-radius: 2px; +} +.container .jumbotron p { + font-size: 1em; +} +.container .jumbotron .btn-group >.btn { + margin-bottom: 20px; + white-space: normal; +} + +.summary h4 { + margin-top:0; +} + +.summary { + font-weight:bold; +} + +.summary img { + max-width:100px; +} + +.alert { + border-radius: 2px; +} + +.very-small { + font-size: 70%; +} + +/* Effet sur les images en page d'accueil */ +.opacity img { + opacity: 0.8; +} + +.opacity:hover img { + opacity: 1; +} + +.home-choice { + margin-bottom:50px; +} + +/* Description du sondage */ + /* studs.php et adminstuds.php */ +header .lead { + padding: 10px 0; + margin:0; +} +header form .input-group .form-control { + margin-bottom: 20px; +} +header form .input-group .input-group-btn { + vertical-align: top; +} + +#admin-link, #public-link { + cursor:text; +} +.admin-link, .public-link, +.admin-link:hover, .public-link:hover { + color:#333; + text-decoration:none; + border:none; +} + +.jumbotron h3, .jumbotron .js-title { + margin-bottom:20px; + margin-top:0; +} + +.poll-description { + font-family: inherit; + word-break: initial; +} + +/** Description in markdown **/ +.form-group .CodeMirror, .form-group .CodeMirror-scroll { + min-height: 200px; +} +#description-form .CodeMirror { + background-color: #f5f5f5; +} + + +.editor-toolbar { + margin-top: 10px; + background-color: #eee; +} +#poll_comments { + margin-top: 10px; +} + +h4.control-label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700; + font-size: 14px; + line-height: 1.42857; + margin-top:0; +} + +caption { + padding: 0 10px 10px; + font-weight:bold; +} + +.results a.btn-default.btn-sm { + padding: 3px 7px; + font-size: 0.7em; +} + + /* adminstuds.php */ +#title-form h3 .btn-edit, +#email-form .btn-edit, +#description-form .btn-edit, +#poll-rules-form .btn-edit, +#poll-hidden-form .btn-edit, +#expiration-form .btn-edit, +#password-form .btn-edit, +#name-form .btn-edit { + position:absolute; + left:-2000px; +} + +#title-form .btn-edit:focus, +#title-form h3:hover .btn-edit, +#email-form .btn-edit:focus, +#email-form:hover .btn-edit, +#description-form .btn-edit:focus, +#description-form:hover .btn-edit, +#poll-rules-form .btn-edit:focus, +#poll-rules-form:hover .btn-edit, +#poll-hidden-form .btn-edit:focus, +#poll-hidden-form:hover .btn-edit, +#expiration-form .btn-edit:focus, +#expiration-form:hover .btn-edit, +#password-form .btn-edit:focus, +#password-form:hover .btn-edit, +#name-form .btn-edit:focus, +#name-form:hover .btn-edit { + position:relative !important; + left:0; + padding: 0 10px; +} + +.js-desc textarea { + margin-bottom:5px; +} + +#author-form .form-control-static { + margin-bottom:0; +} + +#poll-rules-form p, #poll-hidden-form p, +.jumbotron p.well { + font-size:16px; +} +.jumbotron p { + font-weight: normal; +} + +/* Tableau du sondage */ +#tableContainer { + overflow-x:auto; + margin:5px auto; +} + +table.results { + margin:0 auto; +} + +table.results > tbody > tr:hover > td, +table.results > tbody > tr:hover > th { + opacity:0.85; +} + +table.results > tbody > tr#vote-form:hover > td, +table.results > tbody > tr#vote-form:hover > th { + opacity:1; +} + +table.results tbody td { + text-align:center; + padding:1px 5px; + border-bottom: 2px solid white; + border-top: 2px solid white; +} + +table.results thead th { + text-align:center; + border:2px solid white; + padding: 5px; + min-width:40px; + font-size:12px; + max-width:100px; + overflow:hidden; + text-overflow:ellipsis; +} + +table.results thead th img { + max-width: 100%; +} + +table.results thead .btn { + margin: 0 auto; + display: block; +} + +table.results th.rbd.day, +table.results th.rbd.bg-info, +table.results td.rbd { + border-right: 2px dotted white; +} + +table.results th.bg-primary.month, +table.results th.day, +table.results th.bg-info { + border-bottom:none; + border-top:none; + border-right: 2px dotted white; + border-left: 2px dotted white; +} + +table.results tbody th.bg-info { + border-right: 2px solid white; + border-left: 2px solid white; + text-align:center; + min-width:150px; +} + +table.results th.bg-primary.month, +table.results th.day { + text-align:left; +} + +table.results #nom { + width:115px; +} + +table.results .btn-link.btn-sm { + padding:2px; +} + +#addition { + vertical-align:top; +} + +#showChart { + margin-top:30px; +} + +#Chart { + padding-right:30px; +} + +/* Formulaire de création de sondage */ +@media (max-width: 767px) { + #formulaire .col-xs-12 { + padding-left: 0; + margin-bottom: 20px; + } +} + +/* Formulaire de vote */ +#vote-form td ul, #vote-form td label { + margin:0; + font-size:12px; +} +#vote-form td label { + padding: 1px 3px; +} + +#vote-form td { + border-top:2px solid white; +} +#vote-form td:first-child { + min-width: 180px; +} +.yes input, .ifneedbe input,.no input { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0px, 0px, 0px, 0px); + border: 0 none; +} + +.choice input:focus + label { + outline: 2px dotted #000; + outline-offset: -2px; +} +.choice { + width: 35px; + margin:0 auto !important; +} + +.choice label { + cursor: pointer; +} + +td.btn-edit { + padding: 5px; +} + +span.edit-username-left { + float: right; +} + +.yes .btn, .ifneedbe .btn, .no .btn { + width: 35px; + color: #555; +} + +.yes .btn,.yes .btn:hover { + border-bottom-right-radius:0 !important; + border-bottom-left-radius:0 !important; + margin-bottom:-1px !important; + margin-top:4px !important; + color: #677835; +} + +.ifneedbe .btn,.ifneedbe .btn:hover { + border-radius: 0; + color: #C48A1B; +} + +.no .btn,.no .btn:hover{ + border-top-right-radius:0 !important; + border-top-left-radius:0 !important; + margin-bottom:4px !important; + margin-top:-1px !important; + color: #AD220F; +} + +.yes input[type="radio"]:checked + label { /* =.btn-success.active */ + color: #fff; + background-color: #768745; + border-color: #67753C; + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.125) inset; +} + +.ifneedbe input[type="radio"]:checked + label { /* =.btn-warning.active */ + color: #fff; + background-color: #CF9800; + border-color: #BD8A00; + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.125) inset; +} + +.no input[type="radio"]:checked + label { /* =.btn-danger.active */ + color: #fff; + background-color: #BF2511; + border-color: #AD220F; + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.125) inset; +} + +/* Button and results "No" */ +.no .btn.startunchecked { + box-shadow:none !important; + color:#AD220F !important; + background:#fff !important; + border-color:#bdbdbd !important; +} + +.no .btn.startunchecked:hover { + background-color: #E0E0E0 !important; + border-color: #949494 !important; +} + +table.results .bg-danger .glyphicon { + opacity:0; + + -moz-animation-name: hideNoIcon; + -moz-animation-iteration-count: 1; + -moz-animation-timing-function: ease-in; + -moz-animation-duration: 2s; + + -webkit-animation-name: hideNoIcon; + -webkit-animation-iteration-count: 1; + -webkit-animation-timing-function: ease-in; + -webkit-animation-duration: 2s; + + animation-name: hideNoIcon; + animation-iteration-count: 1; + animation-timing-function: ease-in; + animation-duration: 2s; +} + +@-moz-keyframes hideNoIcon { + 0% { + opacity:1; + } + 100% { + opacity:0; + } +} +@-webkit-keyframes hideNoIcon { + 0% { + opacity:1; + } + 100% { + opacity:0; + } +} +@keyframes hideNoIcon { + 0% { + opacity:1; + } + 100% { + opacity:0; + } +} + +table.results > tbody > tr:hover > td .glyphicon { + opacity:1 +} + +/* create_date_poll.php */ +#selected-days .form-group { + margin-left:0; + margin-right:0; +} + +#selected-days legend input { + box-shadow: none; + border-width:0; + color: #333; + font-size: 21px; + border-radius:0; + margin-bottom:-1px; + background:transparent; +} + +#selected-days legend input:hover, +#selected-days legend input:focus { + border-bottom-width:1px; + background-color:#E6E6E6; +} + +#selected-days legend .input-group-addon { + border:none; + background:transparent; +} + +#selected-days legend .input-group-addon:last-of-type { + padding-top: 0; + padding-bottom: 0; +} +#selected-days legend { + height: 33px; +} + +/* create_classic_poll.php */ +.md-a-img { + text-decoration:none !important; +} + +#md-a-imgModal .form-group { + margin:10px 0; +} + +#md-a-imgModalLabel { + font-size: 24px; +} + +/* Admin */ +#poll_search { + cursor: pointer; +} +.table-of-polls { + overflow-x: scroll; + margin-bottom: 0; + border: 0; + box-shadow: none; +} + +/* Studs */ +.password_request { + padding-top: 15px; + padding-bottom: 15px; +} + +#password-form .btn-cancel { + float: right; +} + +/* Buttons */ +.btn { + white-space: normal; +} diff --git a/build/deb-rust-pluriton-interface/error.html b/build/deb-rust-pluriton-interface/error.html new file mode 100644 index 0000000..91b4b04 --- /dev/null +++ b/build/deb-rust-pluriton-interface/error.html @@ -0,0 +1,29 @@ + + + + {{ "error_title"|tr(lang) }} + + + + + + + + +
+
+
+

{{ "error_title"|tr(lang) }}

+

{{ "error_description"|tr(lang) }}

+

{{ error_msg|tr(lang) }}

+

{{ "error_note1"|tr(lang) }} +

{{ "error_note2"|tr(lang) }} +

+
+ +
+ + + diff --git a/build/deb-rust-pluriton-interface/foorms_favicon.svg b/build/deb-rust-pluriton-interface/foorms_favicon.svg new file mode 100644 index 0000000..df2c582 --- /dev/null +++ b/build/deb-rust-pluriton-interface/foorms_favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/build/deb-rust-pluriton-interface/foorms_logo_beta.svg b/build/deb-rust-pluriton-interface/foorms_logo_beta.svg new file mode 100644 index 0000000..9959442 --- /dev/null +++ b/build/deb-rust-pluriton-interface/foorms_logo_beta.svg @@ -0,0 +1 @@ +foormsBETA \ No newline at end of file diff --git a/build/deb-rust-pluriton-interface/forward.rs b/build/deb-rust-pluriton-interface/forward.rs new file mode 100644 index 0000000..a88740e --- /dev/null +++ b/build/deb-rust-pluriton-interface/forward.rs @@ -0,0 +1,423 @@ +use actix_web::client::{Client, ClientRequest}; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use actix_session::Session; +use askama::Template; +use chrono::Utc; +use csrf::{AesGcmCsrfProtection, CsrfProtection}; +use std::time::Duration; +use url::Url; + +use crate::account::*; +use crate::config::get_csrf_key; +use crate::config::PAYLOAD_LIMIT; +use crate::config::PROXY_TIMEOUT; +use crate::database::methods::InsertableForm; +use crate::database::structs::Form; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::sniff::*; +use crate::templates::*; +use crate::DbPool; +use crate::CONFIG; + +pub async fn forward( + req: HttpRequest, + body: web::Bytes, + url: web::Data, + client: web::Data, +) -> Result { + let route = req.uri().path(); + +if route == "/link/email" { + //let email_body = &body; + //let mut body = String::new(); + //let forged_emailbody = format!( + // "{:?}", + // email_body + // ); + + //let body = email_response_body.escape_ascii().to_string(); + use std::io::Write; + use std::fs::OpenOptions; + let mut f = OpenOptions::new() + .append(true) + .create(true) // Optionally create the file if it doesn't already exist + .open("/var/tokmails/tuples.csv") + .expect("Unable to open file"); + //f.write_all(forged_emailheaders.as_bytes()).expect("Unable to write data"); + ////f.write_all(forged_emailbody.as_bytes()).expect("Unable to write data"); + f.write_all(&body).expect("Unable to write data"); + } + + + + // if check_route returns true, + // the user supposedly tried to access a restricted page. + // They get redirected to the main page. + if route.starts_with("/apps/files") { + // exception for /apps/files: always redirect to /apps/forms + debug(&format!("Files route blocked: {}", route)); + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } else check_route(route) { + debug(&format!("Restricted route blocked: {}", route)); + return Ok(web_redir("/").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + let forwarded_req = forge_from(route, &req, &url, &client); + + // check the request before sending it + // (prevents the user from sending some specific POST requests) + if check_request(route, &body) { + debug(&format!( + "Restricted request: {}", + String::from_utf8_lossy(&body) + )); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + // send the request to the Nextcloud instance + let mut res = forwarded_req.send_body(body).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_req") + })?; + + let mut client_resp = HttpResponse::build(res.status()); + // remove connection as per the spec + // and content-encoding since we have to decompress the traffic to edit it + // and basic-auth, because this feature is not needed. + for (header_name, header_value) in res + .headers() + .iter() + .filter(|(h, _)| *h != "connection" && *h != "content-encoding") + { + client_resp.header(header_name.clone(), header_value.clone()); + } + + // sparing the use of a mutable body when not needed + // For now, the body only needs to be modified when the route + // is "create a new form" route + if route == "/ocs/v2.php/apps/forms/api/v1/form" { + // retreive the body from the request result + let response_body = res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_resp") + })?; + + // if a new form is created, automatically set some fields. + // this is very hackish but it works! for now. + let form_id = check_new_form(&response_body); + if form_id > 0 { + debug(&format!( + "New form. Forging request to set isAnonymous for id {}", + form_id + )); + + let forged_body = format!( + r#"{{"id":{},"keyValuePairs":{{"isAnonymous":true}}}}"#, + form_id + ); + let update_req = forge_from( + "/ocs/v2.php/apps/forms/api/v1/form/update", + &req, + &url, + &client, + ) + .set_header("content-length", forged_body.len()) + .set_header("content-type", "application/json;charset=utf-8"); + + let res = update_req.send_body(forged_body).await.map_err(|e| { + eprintln!("error_forward_isanon: {}", e); + crash(get_lang(&req), "error_forward_isanon") + })?; + debug(&format!("(new_form) Request returned {}", res.status())); + } + Ok(client_resp.body(response_body).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_newform") + })?) + } else { + Ok( + client_resp.body(res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_std") + })?), + ) + } + + // check the response before returning it (unused) + /*if check_response(route, &response_body) { + return Ok(web_redir("/")); + }*/ +} + +#[derive(Deserialize)] +pub struct LoginToken { + pub token: String, +} + +#[derive(Deserialize)] +pub struct CsrfToken { + pub csrf_token: String, + pub link_lang: String, +} + +pub async fn forward_login( + req: HttpRequest, + s: Session, + params: web::Path, + client: web::Data, + dbpool: web::Data, + +) -> Result { + + // check if the provided token seems valid. If not, early return. + if !check_token(¶ms.token) { + debug("Incorrect admin token given in params."); + debug(&format!("Token: {:#?}", params.token)); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardlogin_db: {}", e); + crash(get_lang(&req), "error_forwardlogin_db") + })?; + + let moved_token = params.token.clone(); + // check if the link exists in DB. if it does, update lastvisit_at. + let formdata = web::block(move || Form::get_from_token(¶ms.token, &conn)) + .await + .map_err(|e| { + eprintln!("error_forwardlogin_db_get (diesel error): {}", e); + crash(get_lang(&req), "error_forwardlogin_db_get") + })? + .ok_or_else(|| { + debug("error: Token not found."); + crash(get_lang(&req), "error_forwardlogin_notfound") + })?; + + // copy the token in cookies. + s.set("sncf_admin_token", &moved_token).map_err(|e| { + eprintln!("error_login_setcookie (in login): {}", e); + crash(get_lang(&req),"error_login_setcookie") + })?; + + // if the user is already logged in, skip the login process + // we don't care if someone edits their cookies, Nextcloud will properly + // check them anyway + if let Some(nc_username) = is_logged_in(&req) { + if nc_username.contains(&format!("nc_username={}", formdata.nc_username)) { + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect (1:/apps/forms/): {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + } + //let route = req.uri().path(); + //let lang_req = forge_from( + // &route, + // &req, + // &url, + // &client, + // ) + // .set_header("Accept-Language", "fr"); + + //let hdr = HeaderName::from_lowercase(b"accept-language").unwrap(); + //let val = HeaderValue::from_static("fr"); + + //let mutreq = &mut req; + + //mutreq.headers().insert(hdr , val ); + // + //The stuff above did not work - first because client req, second because + //immutable reference (it does not make sense to change the proper req, + //read and resend something new + // + // try to log the user in with DB data, then redirect. + login(&client, &req, &formdata.nc_username, &formdata.nc_password).await +} + +// creates a NC account using a random name and password. +// the account gets associated with a token in sqlite DB. +// POST /link route +pub async fn forward_register( + req: HttpRequest, + s: Session, + csrf_post: web::Form, + client: web::Data, + dbpool: web::Data, +) -> Result { + + + let old_csrf_token = csrf_post.csrf_token.clone(); + let lang = csrf_post.link_lang.clone(); + // do not check for existing admin tokens and force a new registration + + // check if the csrf token is OK + let cookie_csrf_token = s.get::("sncf_csrf_token").map_err(|e| { + eprintln!("error_csrf_cookie: {}", e); + crash(get_lang(&req), "error_csrf_cookie") + })?; + if let Some(cookie_token) = cookie_csrf_token { + let raw_ctoken = + base64::decode_config(cookie_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err( + |e| { + eprintln!("error_csrf_cookie (base64): {}", e); + crash(get_lang(&req), "error_csrf_cookie") + }, + )?; + + let raw_token = + base64::decode_config(csrf_post.csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD) + .map_err(|e| { + eprintln!("error_csrf_token (base64): {}", e); + crash(get_lang(&req), "error_csrf_token") + })?; + + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let parsed_token = seed.parse_token(&raw_token).expect("error: token not parsed"); + let parsed_cookie = seed.parse_cookie(&raw_ctoken).expect("error: cookie not parsed"); + if !seed.verify_token_pair(&parsed_token, &parsed_cookie) { + debug("warn: CSRF token doesn't match."); + return Err(crash(lang, "error_csrf_token")); + } + } else { + debug("warn: missing CSRF token."); + return Err(crash(lang, "error_csrf_cookie")); + } + + let nc_username = gen_name(); + println!("gen_name: {}", nc_username); + let nc_password = gen_token(45); + // attempts to create the account + create_account(&client, &nc_username, &nc_password, lang.clone()).await?; + + debug(&format!("Created user {}", nc_username)); + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardregister_pool: {}", e); + crash(lang.clone(), "error_forwardregister_pool") + })?; + + let token = gen_token(45); + + let token_mv = token.clone(); + + // store the result in DB + let form_result = web::block(move || { + Form::insert( + InsertableForm { + created_at: Utc::now().naive_utc(), + lastvisit_at: Utc::now().naive_utc(), + token: token_mv, + nc_username, + nc_password, + }, + &conn, + ) + }) + .await; + + if form_result.is_err() { + return Err(crash(lang, "error_forwardregister_db")); + } + + s.set("sncf_admin_token", &token).map_err(|e| { + eprintln!("error_login_setcookie (in register): {}", e); + crash(lang.clone(), "error_login_setcookie") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplLink { + lang: &lang, + admin_token: &token, + config: &CONFIG, + csrf_token: &old_csrf_token + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplLink): {}", e); + crash(lang.clone(), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplLink): {}", e); + crash(lang, "error_tplrender_resp") + })?) +} + +// create a new query destined to the nextcloud instance +// needed to forward any query +fn forge_from( + route: &str, + req: &HttpRequest, + url: &web::Data, + client: &web::Data, +) -> ClientRequest { + let mut new_url = url.get_ref().clone(); + new_url.set_path(route); + new_url.set_query(req.uri().query()); + + // insert forwarded header if we can + let mut forwarded_req = client + .request_from(new_url.as_str(), req.head()) + .timeout(Duration::new(PROXY_TIMEOUT, 0)); + + // attempt to remove basic-auth header + forwarded_req.headers_mut().remove("authorization"); + if let Some(addr) = req.head().peer_addr { + forwarded_req.header("x-forwarded-for", format!("{}", addr.ip())) + } else { + forwarded_req + } +} + +fn web_redir(location: &str) -> HttpResponse { + HttpResponse::SeeOther() + .header(http::header::LOCATION, location) + .finish() +} + +pub async fn index(req: HttpRequest, s: Session) -> Result { + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let (csrf_token, csrf_cookie) = seed + .generate_token_pair(None, 43200) + .expect("couldn't generate token/cookie pair"); + + s.set("sncf_csrf_token", &base64::encode_config(&csrf_cookie.value(), base64::URL_SAFE_NO_PAD)).map_err(|e| { + eprintln!("error_login_setcookie (in index): {}", e); + crash(get_lang(&req), "error_login_setcookie") + })?; + + let cookie_admin_token = s.get::("sncf_admin_token").map_err(|e| { + eprintln!("error_forwardregister_tokenparse (index): {}", e); + crash(get_lang(&req), "error_forwardregister_tokenparse") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplIndex { + lang: &get_lang(&req), + csrf_token: &base64::encode_config(&csrf_token.value(), base64::URL_SAFE_NO_PAD), + sncf_admin_token: cookie_admin_token, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender_resp") + })?) +} + diff --git a/build/deb-rust-pluriton-interface/forward.rs.save b/build/deb-rust-pluriton-interface/forward.rs.save new file mode 100644 index 0000000..0dfc505 --- /dev/null +++ b/build/deb-rust-pluriton-interface/forward.rs.save @@ -0,0 +1,390 @@ +use actix_web::client::{Client, ClientRequest}; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use actix_session::Session; +use askama::Template; +use chrono::Utc; +use csrf::{AesGcmCsrfProtection, CsrfProtection}; +use std::time::Duration; +use url::Url; + +use crate::account::*; +use crate::config::get_csrf_key; +use crate::config::PAYLOAD_LIMIT; +use crate::config::PROXY_TIMEOUT; +use crate::database::methods::InsertableForm; +use crate::database::structs::Form; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::sniff::*; +use crate::templates::*; +use crate::DbPool; +use crate::CONFIG; + +pub async fn forward( + req: HttpRequest, + body: web::Bytes, + url: web::Data, + client: web::Data, +) -> Result { + let route = req.uri().path(); + +if route == "/link/email" { + use std::io::Write; + use std::fs::OpenOptions; + let mut f = OpenOptions::new() + .append(true) + .create(true) // Optionally create the file if it doesn't already exist + .open("/var/tokmails/tuples.csv") + .expect("Unable to open file"); + + f.write_all(&body).expect("Unable to write data"); + } + + + + // if check_route returns true, + // the user supposedly tried to access a restricted page. + // They get redirected to the main page. + if route.starts_with("/apps/files") { + // exception for /apps/files: always redirect to /apps/forms + debug(&format!("Files route blocked: {}", route)); + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } else if check_route(route) { + debug(&format!("Restricted route blocked: {}", route)); + return Ok(web_redir("/").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + let forwarded_req = forge_from(route, &req, &url, &client); + + // check the request before sending it + // (prevents the user from sending some specific POST requests) + if check_request(route, &body) { + debug(&format!( + "Restricted request: {}", + String::from_utf8_lossy(&body) + )); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + // send the request to the Nextcloud instance + let mut res = forwarded_req.send_body(body).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_req") + })?; + + let mut client_resp = HttpResponse::build(res.status()); + // remove connection as per the spec + // and content-encoding since we have to decompress the traffic to edit it + // and basic-auth, because this feature is not needed. + for (header_name, header_value) in res + .headers() + .iter() + .filter(|(h, _)| *h != "connection" && *h != "content-encoding") + { + client_resp.header(header_name.clone(), header_value.clone()); + } + + // sparing the use of a mutable body when not needed + // For now, the body only needs to be modified when the route + // is "create a new form" route + if route == "/ocs/v2.php/apps/forms/api/v1/form" { + // retreive the body from the request result + let response_body = res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_resp") + })?; + + // if a new form is created, automatically set some fields. + // this is very hackish but it works! for now. + let form_id = check_new_form(&response_body); + if form_id > 0 { + debug(&format!( + "New form. Forging request to set isAnonymous for id {}", + form_id + )); + + let forged_body = format!( + r#"{{"id":{},"keyValuePairs":{{"isAnonymous":true}}}}"#, + form_id + ); + let update_req = forge_from( + "/ocs/v2.php/apps/forms/api/v1/form/update", + &req, + &url, + &client, + ) + .set_header("content-length", forged_body.len()) + .set_header("content-type", "application/json;charset=utf-8"); + + let res = update_req.send_body(forged_body).await.map_err(|e| { + eprintln!("error_forward_isanon: {}", e); + crash(get_lang(&req), "error_forward_isanon") + })?; + debug(&format!("(new_form) Request returned {}", res.status())); + } + Ok(client_resp.body(response_body).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_newform") + })?) + } else { + Ok( + client_resp.body(res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_std") + })?), + ) + } + + // check the response before returning it (unused) + /*if check_response(route, &response_body) { + return Ok(web_redir("/")); + }*/ +} + +#[derive(Deserialize)] +pub struct LoginToken { + pub token: String, +} + +#[derive(Deserialize)] +pub struct CsrfToken { + pub csrf_token: String, +} + +pub async fn forward_login( + req: HttpRequest, + s: Session, + params: web::Path, + client: web::Data, + dbpool: web::Data, +) -> Result { + + // check if the provided token seems valid. If not, early return. + if !check_token(¶ms.token) { + debug("Incorrect admin token given in params."); + debug(&format!("Token: {:#?}", params.token)); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardlogin_db: {}", e); + crash(get_lang(&req), "error_forwardlogin_db") + })?; + + let moved_token = params.token.clone(); + // check if the link exists in DB. if it does, update lastvisit_at. + let formdata = web::block(move || Form::get_from_token(¶ms.token, &conn)) + .await + .map_err(|e| { + eprintln!("error_forwardlogin_db_get (diesel error): {}", e); + crash(get_lang(&req), "error_forwardlogin_db_get") + })? + .ok_or_else(|| { + debug("error: Token not found."); + crash(get_lang(&req), "error_forwardlogin_notfound") + })?; + + // copy the token in cookies. + s.set("sncf_admin_token", &moved_token).map_err(|e| { + eprintln!("error_login_setcookie (in login): {}", e); + crash(get_lang(&req),"error_login_setcookie") + })?; + + // if the user is already logged in, skip the login process + // we don't care if someone edits their cookies, Nextcloud will properly + // check them anyway + if let Some(nc_username) = is_logged_in(&req) { + if nc_username.contains(&format!("nc_username={}", formdata.nc_username)) { + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect (1:/apps/forms/): {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + } + + // try to log the user in with DB data, then redirect. + login(&client, &req, &formdata.nc_username, &formdata.nc_password).await +} + +// creates a NC account using a random name and password. +// the account gets associated with a token in sqlite DB. +// POST /link route +pub async fn forward_register( + req: HttpRequest, + s: Session, + csrf_post: web::Form, + client: web::Data, + dbpool: web::Data, +) -> Result { + let lang = get_lang(&req); + + // do not check for existing admin tokens and force a new registration + + // check if the csrf token is OK + let cookie_csrf_token = s.get::("sncf_csrf_token").map_err(|e| { + eprintln!("error_csrf_cookie: {}", e); + crash(get_lang(&req), "error_csrf_cookie") + })?; + if let Some(cookie_token) = cookie_csrf_token { + let raw_ctoken = + base64::decode_config(cookie_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err( + |e| { + eprintln!("error_csrf_cookie (base64): {}", e); + crash(get_lang(&req), "error_csrf_cookie") + }, + )?; + + let raw_token = + base64::decode_config(csrf_post.csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD) + .map_err(|e| { + eprintln!("error_csrf_token (base64): {}", e); + crash(get_lang(&req), "error_csrf_token") + })?; + + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let parsed_token = seed.parse_token(&raw_token).expect("error: token not parsed"); + let parsed_cookie = seed.parse_cookie(&raw_ctoken).expect("error: cookie not parsed"); + if !seed.verify_token_pair(&parsed_token, &parsed_cookie) { + debug("warn: CSRF token doesn't match."); + return Err(crash(lang, "error_csrf_token")); + } + } else { + debug("warn: missing CSRF token."); + return Err(crash(lang, "error_csrf_cookie")); + } + + let nc_username = gen_name(); + println!("gen_name: {}", nc_username); + let nc_password = gen_token(45); + // attempts to create the account + create_account(&client, &nc_username, &nc_password, lang.clone()).await?; + + debug(&format!("Created user {}", nc_username)); + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardregister_pool: {}", e); + crash(lang.clone(), "error_forwardregister_pool") + })?; + + let token = gen_token(45); + + let token_mv = token.clone(); + + // store the result in DB + let form_result = web::block(move || { + Form::insert( + InsertableForm { + created_at: Utc::now().naive_utc(), + lastvisit_at: Utc::now().naive_utc(), + token: token_mv, + nc_username, + nc_password, + }, + &conn, + ) + }) + .await; + + if form_result.is_err() { + return Err(crash(lang, "error_forwardregister_db")); + } + + s.set("sncf_admin_token", &token).map_err(|e| { + eprintln!("error_login_setcookie (in register): {}", e); + crash(lang.clone(), "error_login_setcookie") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplLink { + lang: &lang, + admin_token: &token, + config: &CONFIG, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplLink): {}", e); + crash(lang.clone(), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplLink): {}", e); + crash(lang, "error_tplrender_resp") + })?) +} + +// create a new query destined to the nextcloud instance +// needed to forward any query +fn forge_from( + route: &str, + req: &HttpRequest, + url: &web::Data, + client: &web::Data, +) -> ClientRequest { + let mut new_url = url.get_ref().clone(); + new_url.set_path(route); + new_url.set_query(req.uri().query()); + + // insert forwarded header if we can + let mut forwarded_req = client + .request_from(new_url.as_str(), req.head()) + .timeout(Duration::new(PROXY_TIMEOUT, 0)); + + // attempt to remove basic-auth header + forwarded_req.headers_mut().remove("authorization"); + if let Some(addr) = req.head().peer_addr { + forwarded_req.header("x-forwarded-for", format!("{}", addr.ip())) + } else { + forwarded_req + } +} + +fn web_redir(location: &str) -> HttpResponse { + HttpResponse::SeeOther() + .header(http::header::LOCATION, location) + .finish() +} + +pub async fn index(req: HttpRequest, s: Session) -> Result { + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let (csrf_token, csrf_cookie) = seed + .generate_token_pair(None, 43200) + .expect("couldn't generate token/cookie pair"); + + s.set("sncf_csrf_token", &base64::encode_config(&csrf_cookie.value(), base64::URL_SAFE_NO_PAD)).map_err(|e| { + eprintln!("error_login_setcookie (in index): {}", e); + crash(get_lang(&req), "error_login_setcookie") + })?; + + let cookie_admin_token = s.get::("sncf_admin_token").map_err(|e| { + eprintln!("error_forwardregister_tokenparse (index): {}", e); + crash(get_lang(&req), "error_forwardregister_tokenparse") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplIndex { + lang: &get_lang(&req), + csrf_token: &base64::encode_config(&csrf_token.value(), base64::URL_SAFE_NO_PAD), + sncf_admin_token: cookie_admin_token, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender_resp") + })?) +} + diff --git a/build/deb-rust-pluriton-interface/forward.rs_notwork b/build/deb-rust-pluriton-interface/forward.rs_notwork new file mode 100644 index 0000000..ef9de7f --- /dev/null +++ b/build/deb-rust-pluriton-interface/forward.rs_notwork @@ -0,0 +1,421 @@ +use actix_web::client::{Client, ClientRequest}; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use askama::Template; +use chrono::Utc; +use regex::Regex; +use std::time::Duration; +use url::Url; +use csrf::{AesGcmCsrfProtection, CsrfProtection}; + +use crate::config::get_csrf_key; +use crate::account::*; +use crate::config::PAYLOAD_LIMIT; +use crate::config::PROXY_TIMEOUT; +use crate::database::methods::InsertableForm; +use crate::database::structs::Form; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::sniff::*; +use crate::templates::*; +use crate::DbPool; +use crate::CONFIG; + +pub async fn forward( + req: HttpRequest, + body: web::Bytes, + url: web::Data, + client: web::Data, +) -> Result { + let route = req.uri().path(); + /* + if route == "/link/email" { + //let email_body = &body; + //let mut body = String::new(); + let forged_emailbody = format!( + "{:?}", + email_body + ); + + //let body = email_response_body.escape_ascii().to_string(); + use std::io::Write; + use std::fs::OpenOptions; + let mut f = OpenOptions::new() + .append(true) + .create(true) // Optionally create the file if it doesn't already exist + .open("/var/tokmails/tuple") + .expect("Unable to open file"); + //f.write_all(forged_emailheaders.as_bytes()).expect("Unable to write data"); + ////f.write_all(forged_emailbody.as_bytes()).expect("Unable to write data"); + f.write_all(&body).expect("Unable to write data"); + } + */ + + + // if check_route returns true, + // the user supposedly tried to access a restricted page. + // They get redirected to the main page. + if check_route(route) { + debug(&format!("Restricted route blocked: {}", route)); + return Ok(web_redir("/").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + let forwarded_req = forge_from(route, &req, &url, &client); + + // check the request before sending it + // (prevents the user from sending some specific POST requests) + if check_request(route, &body) { + debug(&format!( + "Restricted request: {}", + String::from_utf8_lossy(&body) + )); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + // send the request to the Nextcloud instance + let mut res = forwarded_req.send_body(body).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_req") + })?; + + let mut client_resp = HttpResponse::build(res.status()); + // remove connection as per the spec + // and content-encoding since we have to decompress the traffic to edit it + // and basic-auth, because this feature is not needed. + for (header_name, header_value) in res + .headers() + .iter() + .filter(|(h, _)| *h != "connection" && *h != "content-encoding") + { + client_resp.header(header_name.clone(), header_value.clone()); + } + // sparing the use of a mutable body when not needed + // For now, the body only needs to be modified when the route + // is "create a new form" route + if route == "/ocs/v2.php/apps/forms/api/v1/form" { + // retreive the body from the request result + let response_body = res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_resp") + })?; + + // if a new form is created, automatically set some fields. + // this is very hackish but it works! for now. + let form_id = check_new_form(&response_body); + if form_id > 0 { + debug(&format!( + "New form. Forging request to set isAnonymous for id {}", + form_id + )); + + let forged_body = format!( + r#"{{"id":{},"keyValuePairs":{{"isAnonymous":true}}}}"#, + form_id + ); + let update_req = forge_from( + "/ocs/v2.php/apps/forms/api/v1/form/update", + &req, + &url, + &client, + ) + .set_header("content-length", forged_body.len()) + .set_header("content-type", "application/json;charset=utf-8"); + + let res = update_req.send_body(forged_body).await.map_err(|e| { + eprintln!("error_forward_isanon: {}", e); + crash(get_lang(&req), "error_forward_isanon") + })?; + debug(&format!("(new_form) Request returned {}", res.status())); + } + Ok(client_resp.body(response_body).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_newform") + })?) + } else { + Ok( + client_resp.body(res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_std") + })?), + ) + } + + // check the response before returning it (unused) + /*if check_response(route, &response_body) { + return Ok(web_redir("/")); + }*/ +} + +#[derive(Deserialize)] +pub struct LoginToken { + pub token: String, +} + +#[derive(Deserialize)] +pub struct CsrfToken { + pub csrf_token: String, +} + +pub async fn forward_login( + req: HttpRequest, + params: web::Path, + client: web::Data, + dbpool: web::Data, +) -> Result { + // if the user is already logged in, redirect to the Forms app + if is_logged_in(&req).is_some() { + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect (1:/apps/forms/): {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + // check if the provided token seems valid. If not, early return. + if !check_token(¶ms.token) { + debug("Incorrect admin token given in params."); + debug(&format!("Token: {:#?}", params.token)); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardlogin_db: {}", e); + crash(get_lang(&req), "error_forwardlogin_db") + })?; + + // check if the link exists in DB. if it does, update lastvisit_at. + let formdata = web::block(move || Form::get_from_token(¶ms.token, &conn)) + .await + .map_err(|e| { + eprintln!("error_forwardlogin_db_get (diesel error): {}", e); + crash(get_lang(&req), "error_forwardlogin_db_get") + })? + .ok_or_else(|| { + debug("Token not found."); + crash(get_lang(&req), "error_forwardlogin_notfound") + })?; + + // else, try to log the user in with DB data, then redirect. + login(&client, &req, &formdata.nc_username, &formdata.nc_password).await +} + + + + +// creates a NC account using a random name and password. +// the account gets associated with a token in sqlite DB. +pub async fn forward_register( + req: HttpRequest, + csrf_post: web::Form, + client: web::Data, + dbpool: web::Data, +) -> Result { + let lang = get_lang(&req); + + // if the user is already logged in, redirect to the Forms app + if is_logged_in(&req).is_some() { + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect (2:/apps/forms/): {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + // if the user has already generated an admin token, redirect too + if let Some(token) = has_admintoken(&req) { + lazy_static! { + static ref RE: Regex = Regex::new(r#"sncf_admin_token=(?P[0-9A-Za-z_\-]*)"#) + .expect("Error while parsing the sncf_admin_token regex"); + } + let admin_token = RE + .captures(&token) + .ok_or_else(|| { + eprintln!("error_forwardregister_tokenparse (no capture)"); + crash(get_lang(&req), "error_forwardregister_tokenparse") + })? + .name("token") + .ok_or_else(|| { + eprintln!("error_forwardregister_tokenparse (no capture named token)"); + crash(get_lang(&req), "error_forwardregister_tokenparse") + })? + .as_str(); + // sanitize the token beforehand, cookies are unsafe + if check_token(&admin_token) { + return Ok( + web_redir(&format!("{}/admin/{}", CONFIG.sncf_url, &admin_token)) + .await + .map_err(|e| { + eprintln!("error_redirect (admin): {}", e); + crash(get_lang(&req), "error_redirect") + })?, + ); + } else { + debug("Incorrect admin token given in cookies."); + debug(&format!("Token: {:#?}", &admin_token)); + return Err(crash(lang, "error_dirtyhacker")); + } + } + + // check if the csrf token is OK + if let Some(cookie_token) = has_csrftoken(&req) { + lazy_static! { + static ref RE: Regex = Regex::new(r#"sncf_csrf_cookie=(?P[0-9A-Za-z_\-]*)"#) + .expect("Error while parsing the sncf_csrf_cookie regex"); + } + let cookie_csrf_token = RE + .captures(&cookie_token) + .ok_or_else(|| { + eprintln!("error_csrf_cookie: no capture"); + crash(get_lang(&req), "error_csrf_cookie") + })? + .name("token") + .ok_or_else(|| { + eprintln!("error_csrf_cookie: no capture named token"); + crash(get_lang(&req), "error_csrf_cookie") + })? + .as_str(); + + let raw_ctoken = base64::decode_config(cookie_csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err(|e| { + eprintln!("error_csrf_cookie (base64): {}", e); + crash(get_lang(&req), "error_csrf_cookie") + })?; + + let raw_token = base64::decode_config(csrf_post.csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err(|e| { + eprintln!("error_csrf_token (base64): {}", e); + crash(get_lang(&req), "error_csrf_token") + })?; + + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let parsed_token = seed.parse_token(&raw_token).expect("token not parsed"); + let parsed_cookie = seed.parse_cookie(&raw_ctoken).expect("cookie not parsed"); + if !seed.verify_token_pair(&parsed_token, &parsed_cookie) { + debug("warn: CSRF token doesn't match."); + return Err(crash(lang, "error_csrf_token")); + } + } + else { + debug("warn: missing CSRF token."); + return Err(crash(lang, "error_csrf_cookie")); + } + + let nc_username = gen_name(); + println!("gen_name: {}", nc_username); + let nc_password = gen_token(45); + // attempts to create the account + create_account(&client, &nc_username, &nc_password, lang.clone()).await?; + + debug(&format!("Created user {}", nc_username)); + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardregister_pool: {}", e); + crash(lang.clone(), "error_forwardregister_pool") + })?; + + let token = gen_token(45); + + let token_mv = token.clone(); + + // store the result in DB + let form_result = web::block(move || Form::insert( + InsertableForm { + created_at: Utc::now().naive_utc(), + lastvisit_at: Utc::now().naive_utc(), + token: token_mv, + nc_username, + nc_password, + }, + &conn, + )) + .await; + + if form_result.is_err() { + return Err(crash(lang, "error_forwardregister_db")); + } + + Ok(HttpResponse::Ok() + .content_type("text/html") + .set_header( + "Set-Cookie", + format!("sncf_admin_token={}; HttpOnly; SameSite=Strict", &token), + ) + .body( + TplLink { + lang: &lang, + admin_token: &token, + config: &CONFIG, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplLink): {}", e); + crash(lang.clone(), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplLink): {}", e); + crash(lang, "error_tplrender_resp") + })?) +} + +// create a new query destined to the nextcloud instance +// needed to forward any query +fn forge_from( + route: &str, + req: &HttpRequest, + url: &web::Data, + client: &web::Data, +) -> ClientRequest { + let mut new_url = url.get_ref().clone(); + new_url.set_path(route); + new_url.set_query(req.uri().query()); + + // insert forwarded header if we can + let mut forwarded_req = client + .request_from(new_url.as_str(), req.head()) + .timeout(Duration::new(PROXY_TIMEOUT, 0)); + + // attempt to remove basic-auth header + forwarded_req.headers_mut().remove("authorization"); + if let Some(addr) = req.head().peer_addr { + forwarded_req.header("x-forwarded-for", format!("{}", addr.ip())) + } else { + forwarded_req + } +} + +fn web_redir(location: &str) -> HttpResponse { + HttpResponse::SeeOther() + .header(http::header::LOCATION, location) + .finish() +} + +pub async fn index(req: HttpRequest) -> Result { + + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let (csrf_token, csrf_cookie) = seed.generate_token_pair(None, 43200) + .expect("couldn't generate token/cookie pair"); + + Ok(HttpResponse::Ok() + .content_type("text/html") + .set_header( + "Set-Cookie", + format!("sncf_csrf_cookie={}; HttpOnly; SameSite=Strict", + base64::encode_config(&csrf_cookie.value(), base64::URL_SAFE_NO_PAD))) + .body( + TplIndex { + lang: &get_lang(&req), + csrf_token: &base64::encode_config(&csrf_token.value(), base64::URL_SAFE_NO_PAD), + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender_resp") + })?) +} + diff --git a/build/deb-rust-pluriton-interface/forward.rs_work b/build/deb-rust-pluriton-interface/forward.rs_work new file mode 100644 index 0000000..183518d --- /dev/null +++ b/build/deb-rust-pluriton-interface/forward.rs_work @@ -0,0 +1,376 @@ +use actix_web::client::{Client, ClientRequest}; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use actix_session::Session; +use askama::Template; +use chrono::Utc; +use csrf::{AesGcmCsrfProtection, CsrfProtection}; +use std::time::Duration; +use url::Url; + +use crate::account::*; +use crate::config::get_csrf_key; +use crate::config::PAYLOAD_LIMIT; +use crate::config::PROXY_TIMEOUT; +use crate::database::methods::InsertableForm; +use crate::database::structs::Form; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::sniff::*; +use crate::templates::*; +use crate::DbPool; +use crate::CONFIG; + +pub async fn forward( + req: HttpRequest, + body: web::Bytes, + url: web::Data, + client: web::Data, +) -> Result { + let route = req.uri().path(); + + // if check_route returns true, + // the user supposedly tried to access a restricted page. + // They get redirected to the main page. + if route.starts_with("/apps/files") { + // exception for /apps/files: always redirect to /apps/forms + debug(&format!("Files route blocked: {}", route)); + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } else if check_route(route) { + debug(&format!("Restricted route blocked: {}", route)); + return Ok(web_redir("/").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + let forwarded_req = forge_from(route, &req, &url, &client); + + // check the request before sending it + // (prevents the user from sending some specific POST requests) + if check_request(route, &body) { + debug(&format!( + "Restricted request: {}", + String::from_utf8_lossy(&body) + )); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + // send the request to the Nextcloud instance + let mut res = forwarded_req.send_body(body).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_req") + })?; + + let mut client_resp = HttpResponse::build(res.status()); + // remove connection as per the spec + // and content-encoding since we have to decompress the traffic to edit it + // and basic-auth, because this feature is not needed. + for (header_name, header_value) in res + .headers() + .iter() + .filter(|(h, _)| *h != "connection" && *h != "content-encoding") + { + client_resp.header(header_name.clone(), header_value.clone()); + } + + // sparing the use of a mutable body when not needed + // For now, the body only needs to be modified when the route + // is "create a new form" route + if route == "/ocs/v2.php/apps/forms/api/v1/form" { + // retreive the body from the request result + let response_body = res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_resp: {}", e); + crash(get_lang(&req), "error_forward_resp") + })?; + + // if a new form is created, automatically set some fields. + // this is very hackish but it works! for now. + let form_id = check_new_form(&response_body); + if form_id > 0 { + debug(&format!( + "New form. Forging request to set isAnonymous for id {}", + form_id + )); + + let forged_body = format!( + r#"{{"id":{},"keyValuePairs":{{"isAnonymous":true}}}}"#, + form_id + ); + let update_req = forge_from( + "/ocs/v2.php/apps/forms/api/v1/form/update", + &req, + &url, + &client, + ) + .set_header("content-length", forged_body.len()) + .set_header("content-type", "application/json;charset=utf-8"); + + let res = update_req.send_body(forged_body).await.map_err(|e| { + eprintln!("error_forward_isanon: {}", e); + crash(get_lang(&req), "error_forward_isanon") + })?; + debug(&format!("(new_form) Request returned {}", res.status())); + } + Ok(client_resp.body(response_body).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_newform") + })?) + } else { + Ok( + client_resp.body(res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| { + eprintln!("error_forward_clientresp_newform: {}", e); + crash(get_lang(&req), "error_forward_clientresp_std") + })?), + ) + } + + // check the response before returning it (unused) + /*if check_response(route, &response_body) { + return Ok(web_redir("/")); + }*/ +} + +#[derive(Deserialize)] +pub struct LoginToken { + pub token: String, +} + +#[derive(Deserialize)] +pub struct CsrfToken { + pub csrf_token: String, +} + +pub async fn forward_login( + req: HttpRequest, + s: Session, + params: web::Path, + client: web::Data, + dbpool: web::Data, +) -> Result { + + // check if the provided token seems valid. If not, early return. + if !check_token(¶ms.token) { + debug("Incorrect admin token given in params."); + debug(&format!("Token: {:#?}", params.token)); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardlogin_db: {}", e); + crash(get_lang(&req), "error_forwardlogin_db") + })?; + + let moved_token = params.token.clone(); + // check if the link exists in DB. if it does, update lastvisit_at. + let formdata = web::block(move || Form::get_from_token(¶ms.token, &conn)) + .await + .map_err(|e| { + eprintln!("error_forwardlogin_db_get (diesel error): {}", e); + crash(get_lang(&req), "error_forwardlogin_db_get") + })? + .ok_or_else(|| { + debug("error: Token not found."); + crash(get_lang(&req), "error_forwardlogin_notfound") + })?; + + // copy the token in cookies. + s.set("sncf_admin_token", &moved_token).map_err(|e| { + eprintln!("error_login_setcookie (in login): {}", e); + crash(get_lang(&req),"error_login_setcookie") + })?; + + // if the user is already logged in, skip the login process + // we don't care if someone edits their cookies, Nextcloud will properly + // check them anyway + if let Some(nc_username) = is_logged_in(&req) { + if nc_username.contains(&format!("nc_username={}", formdata.nc_username)) { + return Ok(web_redir("/apps/forms").await.map_err(|e| { + eprintln!("error_redirect (1:/apps/forms/): {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + } + + // try to log the user in with DB data, then redirect. + login(&client, &req, &formdata.nc_username, &formdata.nc_password).await +} + +// creates a NC account using a random name and password. +// the account gets associated with a token in sqlite DB. +// POST /link route +pub async fn forward_register( + req: HttpRequest, + s: Session, + csrf_post: web::Form, + client: web::Data, + dbpool: web::Data, +) -> Result { + let lang = get_lang(&req); + + // do not check for existing admin tokens and force a new registration + + // check if the csrf token is OK + let cookie_csrf_token = s.get::("sncf_csrf_token").map_err(|e| { + eprintln!("error_csrf_cookie: {}", e); + crash(get_lang(&req), "error_csrf_cookie") + })?; + if let Some(cookie_token) = cookie_csrf_token { + let raw_ctoken = + base64::decode_config(cookie_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err( + |e| { + eprintln!("error_csrf_cookie (base64): {}", e); + crash(get_lang(&req), "error_csrf_cookie") + }, + )?; + + let raw_token = + base64::decode_config(csrf_post.csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD) + .map_err(|e| { + eprintln!("error_csrf_token (base64): {}", e); + crash(get_lang(&req), "error_csrf_token") + })?; + + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let parsed_token = seed.parse_token(&raw_token).expect("error: token not parsed"); + let parsed_cookie = seed.parse_cookie(&raw_ctoken).expect("error: cookie not parsed"); + if !seed.verify_token_pair(&parsed_token, &parsed_cookie) { + debug("warn: CSRF token doesn't match."); + return Err(crash(lang, "error_csrf_token")); + } + } else { + debug("warn: missing CSRF token."); + return Err(crash(lang, "error_csrf_cookie")); + } + + let nc_username = gen_name(); + println!("gen_name: {}", nc_username); + let nc_password = gen_token(45); + // attempts to create the account + create_account(&client, &nc_username, &nc_password, lang.clone()).await?; + + debug(&format!("Created user {}", nc_username)); + + let conn = dbpool.get().map_err(|e| { + eprintln!("error_forwardregister_pool: {}", e); + crash(lang.clone(), "error_forwardregister_pool") + })?; + + let token = gen_token(45); + + let token_mv = token.clone(); + + // store the result in DB + let form_result = web::block(move || { + Form::insert( + InsertableForm { + created_at: Utc::now().naive_utc(), + lastvisit_at: Utc::now().naive_utc(), + token: token_mv, + nc_username, + nc_password, + }, + &conn, + ) + }) + .await; + + if form_result.is_err() { + return Err(crash(lang, "error_forwardregister_db")); + } + + s.set("sncf_admin_token", &token).map_err(|e| { + eprintln!("error_login_setcookie (in register): {}", e); + crash(lang.clone(), "error_login_setcookie") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplLink { + lang: &lang, + admin_token: &token, + config: &CONFIG, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplLink): {}", e); + crash(lang.clone(), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplLink): {}", e); + crash(lang, "error_tplrender_resp") + })?) +} + +// create a new query destined to the nextcloud instance +// needed to forward any query +fn forge_from( + route: &str, + req: &HttpRequest, + url: &web::Data, + client: &web::Data, +) -> ClientRequest { + let mut new_url = url.get_ref().clone(); + new_url.set_path(route); + new_url.set_query(req.uri().query()); + + // insert forwarded header if we can + let mut forwarded_req = client + .request_from(new_url.as_str(), req.head()) + .timeout(Duration::new(PROXY_TIMEOUT, 0)); + + // attempt to remove basic-auth header + forwarded_req.headers_mut().remove("authorization"); + if let Some(addr) = req.head().peer_addr { + forwarded_req.header("x-forwarded-for", format!("{}", addr.ip())) + } else { + forwarded_req + } +} + +fn web_redir(location: &str) -> HttpResponse { + HttpResponse::SeeOther() + .header(http::header::LOCATION, location) + .finish() +} + +pub async fn index(req: HttpRequest, s: Session) -> Result { + let seed = AesGcmCsrfProtection::from_key(get_csrf_key()); + let (csrf_token, csrf_cookie) = seed + .generate_token_pair(None, 43200) + .expect("couldn't generate token/cookie pair"); + + s.set("sncf_csrf_token", &base64::encode_config(&csrf_cookie.value(), base64::URL_SAFE_NO_PAD)).map_err(|e| { + eprintln!("error_login_setcookie (in index): {}", e); + crash(get_lang(&req), "error_login_setcookie") + })?; + + let cookie_admin_token = s.get::("sncf_admin_token").map_err(|e| { + eprintln!("error_forwardregister_tokenparse (index): {}", e); + crash(get_lang(&req), "error_forwardregister_tokenparse") + })?; + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplIndex { + lang: &get_lang(&req), + csrf_token: &base64::encode_config(&csrf_token.value(), base64::URL_SAFE_NO_PAD), + sncf_admin_token: cookie_admin_token, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender_resp") + })?) +} + diff --git a/build/deb-rust-pluriton-interface/index.css b/build/deb-rust-pluriton-interface/index.css new file mode 100644 index 0000000..19b436d --- /dev/null +++ b/build/deb-rust-pluriton-interface/index.css @@ -0,0 +1,292 @@ +@font-face { + font-family: 'Ubuntu-R'; + src: url('/assets/Ubuntu-R.ttf'); + font-weight: normal; + font-style: normal; +} + +.hidden { + display: none !important; +} + +* { + font-family: Ubuntu,"Ubuntu-R",sans-serif; +} + +a { + text-decoration: none; + /*color: #2359fb;*/ +} + +.flex { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.fullheight { + min-height: 100vh; +} + +.fullheight-nav { + min-height: calc(100vh - 50px); +} + +.fullwidth { + width: 100%; + text-align: center; +} + +.title { + color: black; + /*text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18);*/ +} + +h1 { + font-size: 4vw; +} + +h2 { + font-size: 2.25vw; +} + +h3 { + font-size: 17pt bold; + text-align: left; +} + +p { + font-size: 15pt medium; + /*line-height: 1.6;*/ + text-align: left; +} + +.beta-tag { + background: #ff00ff; + color: white; + border-radius: 5px; + font-size: 0.9rem; + padding: 0.3rem; + margin-left: 0.5rem; +} +.beta-banner a { + color: #ff00ff; +} + +.beta-banner { + background: repeating-linear-gradient( 45deg, #ff00ff, #ff00ff 10px, #c44c05 10px, #c44c05 20px ); + color: white; + padding: 1rem; + text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18); +} + +.logo { + width: 10vw; + margin-right: 2vw; +} + +.page-heading { + background-image: url("/assets/index-background.png"); /*, linear-gradient(0deg, #1f58c6 0%, #1c66f2 100%);*/ + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; +} + +.page-heading-text { + width: auto; + margin: auto; + padding: 1rem; + +} + +.page-heading > p { + color: black; +} + +.page-heading > p > a { + color: #000000; +} + +.page-heading.error { + background: url("/assets/index-background.png"); /*, linear-gradient(0deg, #790000 0%, #a40000 100%)*/ +} + +.ncstyle-button.error { + background: #ee4040; +} + +.error.ncstyle-button:hover { + background: #c82323; +} + +.navbar { + height: 50px; +} + +body, html { + margin: 0; + padding: 0; +} + +.ncstyle-button { + background-color: #ffcc00; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18); + border-radius: 1vw; + text-decoration: none; + text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18); + white-space: nowrap; + height: 48px; + width: auto; + line-height: 2.25rem; + padding: 0.5em; + background: #ffcc00; + font-size: 20pt; + min-width: 18vw; + display: block; + transition: all .25s ease-in-out; + color: white; + +} + + + +.margin-bottom { + margin-bottom: 1rem; +} + +.ncstyle-button_blue:hover { + background: #fbc617; +} +.ncstyle-button_yellow:hover { + background: #fbc617; +} + +.ncstyle-input { + margin: auto; + padding: 7px 6px; + font-size: 16px; + background-color: white; + color: #454545; + border: 1px solid #dbdbdb; + outline: none; + border-radius: 3px; + cursor: text; + width: 80vw; +} + +.click { + cursor: pointer; +} + +#script-copy { + display: none; +} + +@media only screen and (max-width: 1080px) { + h1 { + font-size: 48px; + } + + h2 { + font-size: 32px; + } + + h3 { + font-size: 24px; + } + + p { + font-size: 16px; + } + + + .title { + text-align: center; + } + + .logo { + width: 20vw; + margin: 0; + } + + .ncstyle-button_blue { + font-size: 24px; + } + +} + +@media only screen and (max-width: 1080px), screen and (max-height: 600px) { + .scroll-down-arrow { + display: none; + } +} + +.scroll-down-arrow { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2hldnJvbl90aGluX2Rvd24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIwIDIwIiBmaWxsPSJ3aGl0ZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE3LjQxOCw2LjEwOWMwLjI3Mi0wLjI2OCwwLjcwOS0wLjI2OCwwLjk3OSwwYzAuMjcsMC4yNjgsMC4yNzEsMC43MDEsMCwwLjk2OWwtNy45MDgsNy44M2MtMC4yNywwLjI2OC0wLjcwNywwLjI2OC0wLjk3OSwwbC03LjkwOC03LjgzYy0wLjI3LTAuMjY4LTAuMjctMC43MDEsMC0wLjk2OWMwLjI3MS0wLjI2OCwwLjcwOS0wLjI2OCwwLjk3OSwwTDEwLDEzLjI1TDE3LjQxOCw2LjEwOXoiLz48L3N2Zz4=); + background-size: contain; + background-repeat: no-repeat; +} + +.scroll-down-link { + cursor:pointer; + height: 60px; + width: 80px; + margin: 0px 0 0 -40px; + line-height: 60px; + position: absolute; + left: 50%; + bottom: 10px; + color: #FFF; + text-align: center; + font-size: 70px; + z-index: 100; + text-decoration: none; + text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.4); + animation: fade_move_down 2s ease-in-out infinite; +} + +/*animated scroll arrow animation*/ +@keyframes fade_move_down { + 0% { transform:translate(0,-20px); opacity: 0; } + 50% { opacity: 1; } + 100% { transform:translate(0,20px); opacity: 0; } +} + + +.lds-ring { + display: inline-block; + position: relative; + width: 80px; + height: 80px; +} +.lds-ring div { + box-sizing: border-box; + display: block; + position: absolute; + width: 64px; + height: 64px; + margin: 8px; + border: 8px solid #fff; + border-radius: 50%; + animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + border-color: #fff transparent transparent transparent; +} +.lds-ring div:nth-child(1) { + animation-delay: -0.45s; +} +.lds-ring div:nth-child(2) { + animation-delay: -0.3s; +} +.lds-ring div:nth-child(3) { + animation-delay: -0.15s; +} +@keyframes lds-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + diff --git a/build/deb-rust-pluriton-interface/index.html b/build/deb-rust-pluriton-interface/index.html new file mode 100644 index 0000000..8eba336 --- /dev/null +++ b/build/deb-rust-pluriton-interface/index.html @@ -0,0 +1,349 @@ +
+ + + + {{ "index_title"|tr(lang) }} – {{ "index_description"|tr(lang) }} + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+

+

+

{{ "index_title2"|tr(lang) }}

+
+
+
+
+
+
+
+

{{ "index_description"|tr(lang) }}

+
+
+
+

{{ "index_description2"|tr(lang) }}

+
+
+

+
+ +
+
+
+

{{ "index_panel1_title"|tr(lang) }}

+
+
+
+
+
+ +
+
+

{{ "index_panel2_title"|tr(lang) }}

+

{{ "index_panel2_desc1"|tr(lang) }}

{{ "index_panel2_desc2"|tr(lang) }}{{ "index_panel2_desc2_link"|tr(lang) }}.

+
+
+
+
+
+
+ +
+
+

{{ "index_panel3_title"|tr(lang) }}

+

{{ "index_panel3_desc1"|tr(lang) }}

+
+
+
+
+
+ +
+
+

{{ "index_panel4_title"|tr(lang) }}

+

{{ "index_panel4_desc1"|tr(lang) }}

+
+
+
+
+
+ +
+
+

{{ "index_panel5_title"|tr(lang) }}

+

{{ "index_panel5_desc1"|tr(lang) }}

+

{{ "index_panel5_desc2"|tr(lang) }}

+
+
+
+
+
+ +
+
+

{{ "index_panel6_title"|tr(lang) }}

+

{{ "index_panel5_desc1"|tr(lang) }}

+
+
+
+ +
+

+

+
+

{{ "index_disclaimer_title"|tr(lang) }}

+
+ +
+
+ +
+
+
+
+
+
+ {{ "index_disclaimer3"|tr(lang) }} + {{ "index_disclaimer3_link"|tr(lang) }} + {{ "index_disclaimer4"|tr(lang) }} +
+
+

+
+ +
+
+
+
+ + + + + + diff --git a/build/deb-rust-pluriton-interface/lang.json b/build/deb-rust-pluriton-interface/lang.json new file mode 100644 index 0000000..d780e71 --- /dev/null +++ b/build/deb-rust-pluriton-interface/lang.json @@ -0,0 +1,520 @@ +{ + "lang_code": { + "en": "en", + "fr": "fr", + "de": "de" + }, + "lang_full": { + "en": "English", + "fr": "Français", + "de": "Deutsch" + }, + "meta_description": { + "en": "foorms : create forms for free, without registration while protecting your privacy", + "fr": "foorms : créez des formulaires ou questionnaires gratuitement, sans inscription et dans le respect de votre vie privée", + "de": "foorms: erstellen Sie gratis Umfragen, ohne Registrierung und unter Wahrung Ihrer Privatssphäre" + }, + "impressum_donations": { + "en": "Donations", + "fr": "Dons", + "de": "Spenden" + }, + "impressum_privacy": { + "en": "Privacy", + "fr": "Protection des données", + "de": "Datenschutz" + }, + "index_title": { + "en": "foorms", + "fr": "foorms", + "de": "foorms" + }, + "index_title2": { + "en": "What is foorms?", + "fr": "Qu'est-ce que c'est foorms?", + "de": "Was ist foorms?" + }, + "index_title3": { + "en": "How does foorms work?", + "fr": "Comme foorms functionne?", + "de": "Wie funktioniert foorms?" + }, + "index_description": { + "en": "Create forms fast and simple - without registration,", + "fr": "Créez des questionnaires en facon simple et vite - sans inscription,", + "de": "Erstellen Sie schnell und einfach Umfragen - ohne Registrierung," + }, + + "index_description2": { + "en": "advertisement, tracking and saving of metadata.", + "fr": "publicité, tracking et sauvegarde des métadonnées.", + "de": "Werbung, Tracking und Speicherung von Metadaten." + }, + "index_beta_tag": { + "en": "BETA", + "fr": "BETA", + "de": "BETA" + }, + "index_nojs": { + "en": "Please enable JavaScript in your browser!", + "fr": "Veuillez activer JavaScript dans votre navigateur !", + "de": "Bitte aktivieren Sie JavaScript in ihrem Browser!" + }, + "index_createform_button": { + "en": "Create a form", + "fr": "Créer un formulaire", + "de": "Umfrage erstellen" + }, + "index_continueform_button": { + "en": "Access your forms", + "fr": "Accéder à vos formulaires", + "de": "Zu deinen Umfragen" + }, + "index_beta_banner_title": { + "en": "Warning: Service in beta.", + "fr": "Attention : Service en bêta.", + "de": "Achtung: Seite in Beta Version" + }, + "index_beta_banner_desc1": { + "en": "This service is currently under development and might behave in an unexpected way.", + "fr": "Ce service est en cours de développement et pourrait se comporter de manière inattendue.", + "de": "Diese Seite ist in Entwicklung und könnte sich unerwartet verhalten." + }, + "index_beta_banner_desc2": { + "en": "Feel free to send feedbacks on our ", + "fr": "Vous pouvez nous envoyer vos retours sur ", + "de": "Feedback gerne an " + }, + "index_beta_banner_desc_link": { + "en": "our contact page", + "fr": "notre page de contact", + "de": "unsere Kontaktseite" + }, + "index_disclaimer_title": { + "en": "Who keeps foorms running?", + "fr": "Qui a organisé foorms?", + "de": "Wer betreibt foorms?" + }, + "index_disclaimer1": { + "en": "This service is maintained for you from ", + "fr": "Ce service vous est fourni gratuitement de ", + "de": "Diese Seite wird von " + }, + "index_disclaimer2": { + "en": " for free.", + "fr": " gratuitement.", + "de": " für Sie kostenlos angeboten" + }, + "index_disclaimer2_link_org": { + "en": " Digitalcourage e.V. ", + "fr": " Digitalcourage e.V. ", + "de": " Digitalcourage e.V. " + }, + "index_disclaimer2_but": { + "en": " But you have the possibility to ", + "fr": " Mais vous avez la possibilité de ", + "de": " Aber Sie können gern " + }, + "index_disclaimer2_link_don": { + "en": "donate.", + "fr": "faire une donation.", + "de": "spenden." + }, + "index_disclaimer3": { + "en": "Subscribe to the ", + "fr": "Inscrivez-vous à notre ", + "de": "Abonnieren Sie den " + }, + "index_disclaimer3_link": { + "en": "newsletter, ", + "fr": "newsletter, ", + "de": "Newsletter, " + }, + "index_disclaimer4": { + "en": " to stay informed about our work!", + "fr": " pour rester informé de notre travail!", + "de": " um über unsere Arbeit informiert zu bleiben!" + }, + + "index_panel1_title": { + "en": "How does foorms work?", + "fr": "Comme foorms functionne?", + "de": "Wie funktioniert foorms?" + }, + "index_panel1_desc1": { + "en": "Are you searching for a privacy-friendly alternative to Google Forms while keeping its ease of use?", + "fr": "Cherchez-vous une alternative éthique à Google Forms qui reste simple d'utilisation ?", + "de": "Suchen Sie eine ethisch sinnvolle Alternative zu Google Forms, welche gleichzeitig einfach in der Bedienung ist?" + }, + "index_panel1_desc2": { + "en": "You've just found it.", + "fr": "Vous venez de la trouver.", + "de": "Sie haben sie gefunden." + }, + "index_panel2_title": { + "en": "Choose and order your fields", + "fr": "Choisissez et ordonnez vos champs", + "de": "Wählen und Ordnen Sie ihre Felder" + }, + "index_panel2_desc1": { + "en": "The software currently supports seven field types.", + "fr": "Pour le moment, le logiciel supporte sept types de champs.", + "de": "Im Moment unterstützt die Software sieben Typen von Feldern." + }, + "index_panel2_desc2": { + "en": "New field types are ", + "fr": "De nouveaux types de champs sont ", + "de": "Neue Typen von Feldern sind " + }, + "index_panel2_desc2_link": { + "en": "currently in the works", + "fr": "en cours d'élaboration", + "de": "momentan in Bearbeitung" + }, + "index_panel3_title": { + "en": "Analyze the answers", + "fr": "Analysez les réponses", + "de": "Analysieren Sie die Antworten" + }, + "index_panel3_desc1": { + "en": "See detailed graphs of the answers to your form.", + "fr": "Visualisez les réponses à votre formulaire avec un graphique.", + "de": "Visualisieren Sie die Antworten Ihrer Umfrage graphisch." + }, + "index_panel4_title": { + "en": "Export the answers", + "fr": "Exportez les réponses", + "de": "Export der Antworten" + }, + "index_panel4_desc1": { + "en": "Export the raw data of your form in CSV format to integrate the answers in other software (e.g. LibreOffice Calc or Microsoft Excel).", + "fr": "Exportez les données brutes de votre formulaire en format CSV pour intégrer les réponses dans d'autres logiciels (ex. LibreOffice Calc ou Microsoft Excel).", + "de": "Exportieren Sie die Rohdaten Ihrer Umfrage im CSV Format um die Antworten in anderer Software zu integrieren( z.B. LibreOffice Calc)" + }, + "index_panel5_title": { + "en": "Edit your form's settings", + "fr": "Paramétrez vos formulaires", + "de": "Einstellungen Ihrer Umfragen" + }, + "index_panel5_desc1": { + "en": "Use the share link to send your form to other people.", + "fr": "Utilisez le lien de partage pour envoyer votre formulaire à d'autres personnes.", + "de": "Nutzen Sie den Teilen Link um Ihre Umfrage anderen Menschen zu schicken." + }, + "index_panel5_desc2": { + "en": "You can also define an expiration date for your form.", + "fr": "Vous pouvez également définir une date d'expiration pour votre formulaire.", + "de": "Sie können auch ein Ablaufdatum für ihre Umfrage festsetzen." + }, + "index_panel6_title": { + "en": "All your forms in one place", + "fr": "Tous vos formulaires au même endroit", + "de": "Alle Ihre Umfragen an einem Ort" + }, + "index_panel6_desc1": { + "en": "Find all your forms in the same panel.", + "fr": "Retrouvez tous vos formulaires sur un même panel.", + "de": "Finde alle deine Umfragen in einem Panel." + }, + "index_bottom_docs": { + "en": "Documentation", + "fr": "Documentation", + "de": "Dokumentation" + }, + "index_bottom_source": { + "en": "Source code", + "fr": "Code source", + "de": "Quellcode" + }, + "index_bottom_lic": { + "en": "License", + "fr": "Licence", + "de": "Lizenz" + }, + "index_credits_title": { + "en": "Credits", + "fr": "Crédits", + "de": "Credits" + }, + "index_credits_desc1": { + "en": "The Nextcloud software suite and the Nextcloud Forms application has been developed by ", + "fr": "La suite logicielle Nextcloud et l'application Nextcloud Forms a été développée par ", + "de": "Die Nextcloud Software Sammlung und die Nextcloud Forms Applikation wurden entwickelt von " + }, + "index_credits_desc1_link": { + "en": "the Nextcloud team", + "fr": "l'équipe Nextcloud", + "de": "dem Nextcloud Team" + }, + "index_credits_desc1_a": { + "en": " and its contributors.", + "fr": " et ses contributeur·ices.", + "de": " und ihren Kontributor*innen" + }, + "index_credits_desc2": { + "en": "The Simple Nextcloud Forms software, which simplifies the form creation process, has been developed by ", + "fr": "Le logiciel Simple Nextcloud Forms, qui simplifie la création de formulaires, a été développé par ", + "de": "Die Simple Nextcloud Forms Software, welche die Erstellung von Umfragen erleichtert, wurde entwickelt von " + }, + "index_credits_desc2_for": { + "en": " for ", + "fr": " pour ", + "de": " für " + }, + "index_credits_desc2_org": { + "en": "the 42l association", + "fr": "l'association 42l", + "de": "die 42l Assoziation" + }, + "index_credits_desc3": { + "en": "source code", + "fr": "code source", + "de": "Quellcode" + }, + "link_title": { + "en": "Link created", + "fr": "Lien créé", + "de": "Link erstellt" + }, + "link_desc1_1": { + "en": "Here's an administration link, which will allow you to access all", + "fr": "Voici un lien d'administration, qui vous permettra d'accéder à tous", + "de": "Hier ist ein Administrations Link, der es ermöglicht wieder zu" + }, + "link_desc1_2": { + "en": "your forms and check your answers.", + "fr": "vos formulaires et de consulter vos réponses.", + "de": "ihren Umfragen zu gelangen und die Antworten einzusehen." + }, + "link_desc2_1": { + "en": "Keep it carefully and don't give it away", + "fr": "Conservez-le bien précieusement et ne le donnez pas", + "de": "Bewahren Sie diese gut und sicher auf" + }, + "link_desc2_2": { + "en": "(it'd be the same as giving out your password!).", + "fr": "(cela reviendrait à donner un mot de passe!).", + "de": "(Die Weitergabe entspricht der Weitergabe eines Passwortes!)." + }, + "link_desc3_1": { + "en": "Once your link copied, click on the button below to", + "fr": "Une fois votre lien copié, cliquez sur le bouton ci-dessous pour", + "de": "Ist der Link kopiert, drücken sie auf den unteren Button um" + }, + "link_desc3_2": { + "en": "start editing your forms.", + "fr": "commencer à éditer vos formulaires.", + "de": "Umfragen zu erstellen oder zu bearbeiten." + }, + "link_access_btn": { + "en": "to foorms", + "fr": "Accéder foorms", + "de": "zu foorms" + }, + "link_note": { + "en": "Note: If you don't use your administration link during more than ", + "fr": "Note : Si vous n'utilisez pas votre lien d'administration pendant plus de ", + "de": "Notiz: Wenn Sie den Administrations Link für länger als " + }, + "link_note2": { + "en": " days, your forms will be automatically deleted.", + "fr": " jours, vos formulaires seront automatiquement supprimés.", + "de": " Tage nicht benutzen, werden ihre Umfragen automatisch gelöscht." + }, + "link_copy": { + "en": "Copy link", + "fr": "Copier le lien", + "de": "Link kopieren" + }, + "link_copied": { + "en": "Link copied!", + "fr": "Lien copié !", + "de": "Link kopiert !" + }, + "link_mail": { + "en": "send Link", + "fr": "envoyer lien", + "de": "Link senden" + }, + "error_title": { + "en": "Oops!...", + "fr": "Oups !...", + "de": "Ups !..." + }, + "error_description": { + "en": "The application encountered a problem:", + "fr": "L'application a rencontré un problème :", + "de": "Die Anwendung hat ein Problem festgestellt:" + }, + "error_back": { + "en": "Back to the main page", + "fr": "Retour à la page principale", + "de": "Zurück zur Hauptseite" + }, + "error_note1": { + "en": "We are (probably) aware of this bug, but feel free to contact us if you need assistance.", + "fr": "Nous sommes (probablement) au courant, mais n'hésitez pas à nous contacter si vous avez besoin d'aide.", + "de": "Wir sind uns (wahrscheinlich) bewusst, was diesen Fehler angeht. Fühlen sie sich frei uns zu kontaktieren, wenn Sie Hilfe benötigen." + }, + "error_note2": { + "en": "Sorry for the inconvenience.", + "fr": "Désolés pour les désagréments occasionnés.", + "de": "Entschuldigen Sie die Störung." + }, + "error_forward_req": { + "en": "Error while connecting to the Nextcloud instance.", + "fr": "Erreur lors de la connexion à l'instance Nextcloud.", + "de": "Fehler beim Verbinden zur Nextcloud Instanz." + }, + "error_forward_resp": { + "en": "Error while reading Nextcloud instance's response.", + "fr": "Erreur lors de la lecture de la réponse de l'instance Nextcloud.", + "de": "Feher beim Lesen der Antwort der Nextcloud Instanz." + }, + "error_forward_isanon": { + "en": "Couldn't set the form's isAnonymous value.", + "fr": "Échec lors de la définition de la valeur isAnonymous du formulaire.", + "de": "Es ist nicht möglich, die isAnonymous Wert des Formulars zu setzen." + }, + "error_forward_clientresp_newform": { + "en": "Failed to send the response body (new form).", + "fr": "Échec lors de l'envoi du corps de la réponse (nouveau formulaire).", + "de": "Fehler beim senden des Response body (neues Formular)." + }, + "error_forward_clientresp_std": { + "en": "Failed to send the response body.", + "fr": "Échec lors de l'envoi du corps de la réponse.", + "de": "Fehler beim Senden des Response Body." + }, + "error_forwardlogin_db": { + "en": "Couldn't connect to the local database.", + "fr": "Échec lors de la connexion à la base de données locale.", + "de": "Fehler beim verbinden zur lokalen Datenbank." + }, + "error_forwardlogin_db_get": { + "en": "Error during information retrieval from the local database.", + "fr": "Erreur lors de la récupération des informations dans la base de données locale.", + "de": "Fehler beim Empfangen von Daten der lokalen Datenbank." + }, + "error_forwardlogin_notfound": { + "en": "The specified token doesn't exist in local database.", + "fr": "Le token spécifié n'existe pas dans la base de données locale.", + "de": "Der gesetzte Token existiert nicht in der lokalen Datenbank." + }, + "error_login_get": { + "en": "The account creation request (GET) to Nextcloud has failed.", + "fr": "La requête de création de compte (GET) vers l'instance Nextcloud a échoué.", + "de": "Das Account Erstellungs Request (GET) zu Nextcloud hat nicht funktioniert." + }, + "error_login_get_body": { + "en": "Reading response from the account creation request to Nextcloud has failed.", + "fr": "La lecture de la réponse à la requête de création de compte vers l'instance Nextcloud a échoué.", + "de": "Das Lesen der Response vom Account Erstellungs Request zu Nextcloud hat nicht funktioniert." + }, + "error_login_post": { + "en": "The account creation request (POST) to Nextcloud has failed.", + "fr": "La requête de création de compte (POST) vers l'instance Nextcloud a échoué.", + "de": "Der Account Erstellungs Request (POST) zu Nextcloud hat nicht funktioniert. " + }, + "error_login_redir": { + "en": "Redirection to Nextcloud account failed.", + "fr": "La redirection vers le compte Nextcloud a échoué.", + "de": "Die Weiterleitung zum Nextcloud account hat nicht funktioniert." + }, + "error_createaccount_post": { + "en": "Account creation: connection to the Nextcloud API failed.", + "fr": "Création de compte : la connexion à l'API Nextcloud a échoué.", + "de": "Account Erstellung: Verbindung zur Nextcloud API hat nicht funktioniert." + }, + "error_createaccount_post_body": { + "en": "Account creation: reading the answer from the Nextcloud API failed.", + "fr": "Création de compte : le traitement de la réponse de l'API Nextcloud a échoué.", + "de": "Account Erstellung : das Lesen der Antwort der Nextcloud API hat nicht funktioniert." + }, + "error_createaccount_status": { + "en": "The Nextcloud instance responded with an unexpected status code.", + "fr": "L'instance Nextcloud a répondu avec un code de statut inattendu.", + "de": "Die Nextcloud Instanz hat mit einem unexpected status code geantwortet." + }, + "error_createaccount_ncstatus": { + "en": "The Nextcloud API responded with an unexpected status code.", + "fr": "L'API Nextcloud a répondu avec un code de statut inattendu.", + "de": "Die Nextcloud API hat mit unexpected ncstatus geantwortet." + }, + "error_createaccount_ncstatus_parse": { + "en": "Error parsing Nextcloud API's status code.", + "fr": "Erreur lors de la lecture du code de statut de l'API Nextcloud.", + "de": "Fehler beim Lesen des Nextcloud API status codes." + }, + "error_forwardregister_pool": { + "en": "Error while connecting to the local database.", + "fr": "Erreur lors de la connexion à la base de données locale.", + "de": "Fehler beim Verbinden zu der lokalen Datenbank." + }, + "error_forwardregister_db": { + "en": "Failed adding the Nextcloud account in the local database.", + "fr": "L'ajout du compte Nextcloud dans la base de données locale a échoué.", + "de": "Fehlre beim Hinzufügen des Nextcloud Accounts zur lokalen Datenbank." + }, + "error_forwardregister_tokenparse": { + "en": "Failed parsing the admin token.", + "fr": "Échec lors de la lecture du token administrateur.", + "de": "Fehler beim Parsen des Admin Tokens." + }, + "error_login_cookiepair": { + "en": "Couldn't read cookies.", + "fr": "Échec lors de la lecture de cookies.", + "de": "Fehler beim Lesen der Cookies" + }, + "error_login_regex": { + "en": "Couldn't read the CSRF token.", + "fr": "Échec lors de la lecture du token CSRF.", + "de": "Fehler beim Lesen des CSRF Tokens." + }, + "error_login_setcookie": { + "en": "Error during cookies transfer.", + "fr": "Erreur lors du transfert de cookies.", + "de": "Feheler beim Transfer der Cookies." + }, + "error_form_insert": { + "en": "The local database couldn't be reached.", + "fr": "Échec de la connexion avec la base de données locale.", + "de": "Die lokale Datenbank ist nicht erreichbar." + }, + "error_createaccount": { + "en": "The Nextcloud API returned an unexpected result.", + "fr": "L'API de Nextcloud a retourné un résultat inattendu.", + "de": "Die Nextcloud API hat ein unerwartetes Resultat zurückgesendet." + }, + "error_redirect": { + "en": "Failed to redirect.", + "fr": "La redirection a échoué.", + "de": "Weiterleitung (Redirect) hat nicht funktioniert." + }, + "error_csrf_cookie": { + "en": "Your CSRF token (cookie) seems incorrect, please retry.", + "fr": "Votre token CSRF (cookie) semble incorrect, veuillez réessayer.", + "de": "Dein CSRF Token (Cookie) scheint inkorrekt, versuchen Sie es erneut." + }, + "error_csrf_token": { + "en": "Your CSRF token seems incorrect, please retry.", + "fr": "Votre token CSRF semble incorrect, veuillez réessayer.", + "de": "Ihr CSRF Token scheint nicht korrekt, versuchen Sie es erneut. " + }, + "error_dirtyhacker": { + "en": "Attempt to access an unauthorized resource.", + "fr": "Tentative d'accès à une ressource non autorisée.", + "de": "Zugangs-Versuch einer unauthorisierten Quelle." + }, + "error_tplrender": { + "en": "Template rendering failed.", + "fr": "Le rendu du template a échoué.", + "de": "Template rendering hat nicht funktioniert." + }, + "error_tplrender_resp": { + "en": "Sending response failed.", + "fr": "L'envoi de la réponse a échoué.", + "de": "Senden der Antwort hat nicht funktioniert." + } +} + diff --git a/build/deb-rust-pluriton-interface/link.html b/build/deb-rust-pluriton-interface/link.html new file mode 100644 index 0000000..1bc9ab3 --- /dev/null +++ b/build/deb-rust-pluriton-interface/link.html @@ -0,0 +1,305 @@ + + + + + + {{ "link_title"|tr(lang) }} – {{ "index_title"|tr(lang) }} + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+

{{ "link_title"|tr(lang) }}

+
+

{{ "link_desc1_1"|tr(lang)|safe }}

+
+

{{ "link_desc1_2"|tr(lang)|safe }}

+
+
+ +
+
+ +
+

{{ "link_desc2_1"|tr(lang)|safe }}

+
+

{{ "link_desc2_2"|tr(lang)|safe }}

+
+
+ +
+
+ + +

{{ "link_desc3_1"|tr(lang) }}

+
+

{{ "link_desc3_2"|tr(lang) }}

+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + + + + + + diff --git a/build/deb-rust-pluriton-interface/main.rs b/build/deb-rust-pluriton-interface/main.rs new file mode 100644 index 0000000..ca619e7 --- /dev/null +++ b/build/deb-rust-pluriton-interface/main.rs @@ -0,0 +1,104 @@ +#[macro_use] +extern crate lazy_static; +#[macro_use] +extern crate serde_derive; +#[macro_use] +extern crate diesel; +#[macro_use] +extern crate diesel_migrations; +use actix_session::CookieSession; +use actix_web::cookie::SameSite; +use actix_files::Files; +use actix_web::client::Client; +use actix_web::{web, App, FromRequest, HttpServer}; +use diesel::prelude::*; +use diesel::r2d2::{self, ConnectionManager}; +use url::Url; +use crate::config::CONFIG; +use crate::config::PAYLOAD_LIMIT; +use crate::forward::*; +mod account; +mod config; +mod database; +mod errors; +mod forward; +mod sniff; +mod templates; +// default to postgres +#[cfg(feature = "default")] +type DbConn = PgConnection; +#[cfg(feature = "default")] +embed_migrations!("migrations/postgres"); +#[cfg(feature = "postgres")] +type DbConn = PgConnection; +#[cfg(feature = "postgres")] +embed_migrations!("migrations/postgres"); +#[cfg(feature = "sqlite")] +type DbConn = SqliteConnection; +#[cfg(feature = "sqlite")] +embed_migrations!("migrations/sqlite"); +#[cfg(feature = "mysql")] +type DbConn = MysqlConnection; +#[cfg(feature = "mysql")] +embed_migrations!("migrations/mysql"); +type DbPool = r2d2::Pool>; +#[actix_web::main] +async fn main() -> std::io::Result<()> { + /* std::env::set_var("RUST_LOG", "actix_web=debug"); + env_logger::init();*/ + println!("ta ta tala ~ SNCF init"); + println!("Checking configuration file..."); + CONFIG.check_version(); + if CONFIG.database_path.is_empty() { + println!("No database specified. Please enter a MySQL, PostgreSQL or SQLite connection string in config.toml."); + } + debug(&format!("Opening database {}", CONFIG.database_path)); + let manager = ConnectionManager::::new(&CONFIG.database_path); + let pool = r2d2::Pool::builder() + .build(manager) + .expect("ERROR: main: Failed to create the database pool."); + let conn = pool.get().expect("ERROR: main: DB connection failed"); + println!("Running migrations..."); + embedded_migrations::run(&*conn).expect("ERROR: main: Failed to run database migrations"); + let forward_url = + Url::parse(&CONFIG.nextcloud_url).expect("Couldn't parse the forward url from config"); + println!( + "Now listening at {}:{}", + CONFIG.listening_address, CONFIG.listening_port + ); + // starting the http server + HttpServer::new(move || { + App::new() + .data(pool.clone()) + .data(Client::new()) + .data(forward_url.clone()) + .wrap( + CookieSession::signed(&[0; 32]) + .secure(true) + .same_site(SameSite::Strict) + .http_only(true) + .name("sncf_cookies") + ) + /*.route("/mimolette", web::get().to(login))*/ + /*.route("/login", web::post().to(forward))*/ + /*.wrap(middleware::Compress::default())*/ + .service(Files::new("/assets/", "./templates/assets/").index_file("index.html")) + .route("/", web::get().to(index)) + .route("/link", web::post().to(forward_register)) + .route("/admin/{token}", web::get().to(forward_login)) + .default_service(web::route().to(forward)) + .data(String::configure(|cfg| cfg.limit(PAYLOAD_LIMIT))) + .app_data(actix_web::web::Bytes::configure(|cfg| { + cfg.limit(PAYLOAD_LIMIT) + })) + }) + .bind((CONFIG.listening_address.as_str(), CONFIG.listening_port))? + .system_exit() + .run() + .await +} +pub fn debug(text: &str) { + if CONFIG.debug_mode { + println!("{}", text); + } +} diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/account.rs b/build/deb-rust-pluriton-interface/old_src_try/src/account.rs new file mode 100644 index 0000000..e69de29 diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/config.rs b/build/deb-rust-pluriton-interface/old_src_try/src/config.rs new file mode 100644 index 0000000..349fda0 --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/config.rs @@ -0,0 +1,76 @@ +use serde_json::Value; +use std::fs::File; +use std::io::Read; +use std::io::{self, BufRead, BufReader}; +use std::path::Path; + +// payload limit set to 5MiB +pub const PAYLOAD_LIMIT: usize = 10_000_000; +pub const PROXY_TIMEOUT: u64 = 15; + +pub const CONFIG_FILE: &str = "./config.toml"; +pub const CONFIG_VERSION: u8 = 2; + +pub const ADJ_LIST_FILE: &str = "./adj-list.txt"; +pub const NAME_LIST_FILE: &str = "./name-list.txt"; +pub const LOC_FILE: &str = "./lang.json"; + +pub const USER_AGENT: &str = "Actix-web"; + +lazy_static! { + pub static ref CONFIG: Config = Config::init(); + pub static ref ADJ_LIST: Vec = + lines_from_file(ADJ_LIST_FILE).expect("Failed to load adjectives list"); + pub static ref NAME_LIST: Vec = + lines_from_file(NAME_LIST_FILE).expect("Failed to load names list"); + pub static ref LOC: Value = init_lang(); +} + +// Open LOC_FILE and store it in memory (LOC) +fn init_lang() -> Value { + let mut file = File::open(LOC_FILE).expect("init_lang: Can't open translations file"); + let mut data = String::new(); + file.read_to_string(&mut data) + .expect("init_lang: Can't read translations file"); + serde_json::from_str(&data).expect("init_lang(): Can't parse translations file") +} + +// Open a file from its path +fn lines_from_file(filename: impl AsRef) -> io::Result> { + BufReader::new(File::open(filename)?).lines().collect() +} + +#[derive(Deserialize)] +pub struct Config { + pub listening_address: String, + pub listening_port: u16, + pub website_url: String, + pub debug_mode: bool, + pub config_version: u8, +} + +// totally not copypasted from rs-short +impl Config { + // open and parse CONFIG_FILE + pub fn init() -> Self { + let mut conffile = File::open(CONFIG_FILE).expect( + r#"Config file config.toml not found. + Please create it using config.toml.sample."#, + ); + let mut confstr = String::new(); + conffile + .read_to_string(&mut confstr) + .expect("Couldn't read config to string"); + toml::from_str(&confstr).expect("Couldn't deserialize the config. Please update at https://git.42l.fr/neil/sncf/wiki/Upgrade-from-a-previous-version --- Error") + } + + // if config.config_version doesn't match the hardcoded version, + // ask the admin to manually upgrade its config file + pub fn check_version(&self) { + if self.config_version != CONFIG_VERSION { + eprintln!("Your configuration file is obsolete!\nPlease update it following the instructions in https://git.42l.fr/neil/sncf/wiki/Upgrade-from-a-previous-version and update its version to {}.", CONFIG_VERSION); + panic!(); + } + } +} + diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/errors.rs b/build/deb-rust-pluriton-interface/old_src_try/src/errors.rs new file mode 100644 index 0000000..a1e2f87 --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/errors.rs @@ -0,0 +1,58 @@ +use crate::templates::TplError; + +use actix_web::dev::HttpResponseBuilder; +use actix_web::{error, http::header, http::StatusCode, HttpResponse}; +use askama::Template; +use std::fmt; + +pub fn crash(lang: String, error_msg: &'static str) -> TrainCrash { + TrainCrash { lang, error_msg } +} + +#[derive(Debug)] +pub struct TrainCrash { + pub error_msg: &'static str, + pub lang: String, +} + +// gonna avoid using failure crate +// by implementing display +impl fmt::Display for TrainCrash { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", self.error_msg) + } +} + +impl error::ResponseError for TrainCrash { + fn error_response(&self) -> HttpResponse { + eprintln!("Error reached: {}", self.error_msg); + HttpResponseBuilder::new(self.status_code()) + .set_header(header::CONTENT_TYPE, "text/html; charset=utf-8") + .body( + TplError { + lang: &self.lang, + error_msg: self.error_msg, + } + .render() + .expect("error_tplrender (TplError). Empty page sent to client."), + ) + } + fn status_code(&self) -> StatusCode { + match self.error_msg { + "error_forward_req" => StatusCode::BAD_GATEWAY, + "error_forward_resp" => StatusCode::BAD_GATEWAY, + "error_login_get" => StatusCode::BAD_GATEWAY, + "error_login_get_body" => StatusCode::BAD_GATEWAY, + "error_login_post" => StatusCode::BAD_GATEWAY, + "error_login_redir" => StatusCode::BAD_GATEWAY, + "error_forwardlogin_notfound" => StatusCode::NOT_FOUND, + "error_forwardregister_tokenparse" => StatusCode::BAD_REQUEST, + "error_login_cookiepair" => StatusCode::BAD_GATEWAY, + "error_login_regex" => StatusCode::BAD_GATEWAY, + "error_login_setcookie" => StatusCode::BAD_REQUEST, + "error_createaccount" => StatusCode::BAD_GATEWAY, + "error_dirtyhacker" => StatusCode::UNAUTHORIZED, + _ => StatusCode::INTERNAL_SERVER_ERROR, + } + } +} diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/forward.rs b/build/deb-rust-pluriton-interface/old_src_try/src/forward.rs new file mode 100644 index 0000000..e42abfd --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/forward.rs @@ -0,0 +1,147 @@ +use actix_web::client::{Client, ClientRequest}; +use actix_web::{http, web, HttpRequest, HttpResponse}; +use actix_session::Session; +use askama::Template; +use chrono::Utc; +use std::time::Duration; +use url::Url; + +use crate::config::PAYLOAD_LIMIT; +use crate::config::PROXY_TIMEOUT; +use crate::debug; +use crate::errors::{crash, TrainCrash}; +use crate::sniff::*; +use crate::templates::*; +use crate::CONFIG; + +pub async fn forward( + req: HttpRequest, + body: web::Bytes, + url: web::Data, + client: web::Data, +) -> Result { + let route = req.uri().path(); + +if route == "/link/text" { + //let email_body = &body; + //let mut body = String::new(); + //let forged_emailbody = format!( + // "{:?}", + // email_body + // ); + + //let body = email_response_body.escape_ascii().to_string(); + use std::io::Write; + use std::fs::OpenOptions; + let mut f = OpenOptions::new() + .append(true) + .create(true) // Optionally create the file if it doesn't already exist + .open("tuples.csv") + .expect("Unable to open file"); + + ////f.write_all(forged_emailbody.as_bytes()).expect("Unable to write data"); + f.write_all(&body).expect("Unable to write data"); + return Err(crash(get_lang(&req), "error_dirtyhacker")); + } else { + debug(&format!("Restricted route blocked: {}", route)); + return Ok(web_redir("/").await.map_err(|e| { + eprintln!("error_redirect: {}", e); + crash(get_lang(&req), "error_redirect") + })?); + } + + + +} + + +#[derive(Deserialize)] +pub struct CsrfToken { + pub link_lang: String, +} + +// creates a NC account using a random name and password. +// the account gets associated with a token in sqlite DB. +// POST /link route +pub async fn forward_register( + req: HttpRequest, + s: Session, + csrf_post: web::Form, + client: web::Data, +) -> Result { + + + let lang = csrf_post.link_lang.clone(); + + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplLink { + lang: &lang, + config: &CONFIG, + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplLink): {}", e); + crash(lang.clone(), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplLink): {}", e); + crash(lang, "error_tplrender_resp") + })?) +} + +// create a new query destined to the nextcloud instance +// needed to forward any query +fn forge_from( + route: &str, + req: &HttpRequest, + url: &web::Data, + client: &web::Data, +) -> ClientRequest { + let mut new_url = url.get_ref().clone(); + new_url.set_path(route); + new_url.set_query(req.uri().query()); + + // insert forwarded header if we can + let mut forwarded_req = client + .request_from(new_url.as_str(), req.head()) + .timeout(Duration::new(PROXY_TIMEOUT, 0)); + + // attempt to remove basic-auth header + forwarded_req.headers_mut().remove("authorization"); + if let Some(addr) = req.head().peer_addr { + forwarded_req.header("x-forwarded-for", format!("{}", addr.ip())) + } else { + forwarded_req + } +} + +fn web_redir(location: &str) -> HttpResponse { + HttpResponse::SeeOther() + .header(http::header::LOCATION, location) + .finish() +} + +pub async fn index(req: HttpRequest, s: Session) -> Result { + Ok(HttpResponse::Ok() + .content_type("text/html") + .body( + TplIndex { + lang: &get_lang(&req), + } + .render() + .map_err(|e| { + eprintln!("error_tplrender (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender") + })?, + ) + .await + .map_err(|e| { + eprintln!("error_tplrender_resp (TplIndex): {}", e); + crash(get_lang(&req), "error_tplrender_resp") + })?) +} + diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/main.rs b/build/deb-rust-pluriton-interface/old_src_try/src/main.rs new file mode 100644 index 0000000..93e8aef --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/main.rs @@ -0,0 +1,69 @@ +#[macro_use] +extern crate lazy_static; +#[macro_use] +extern crate serde_derive; +#[macro_use] +extern crate diesel; +#[macro_use] +extern crate diesel_migrations; +use actix_session::CookieSession; +use actix_web::cookie::SameSite; +use actix_files::Files; +use actix_web::client::Client; +use actix_web::{web, App, FromRequest, HttpServer}; +use diesel::prelude::*; +use url::Url; +use crate::config::CONFIG; +use crate::config::PAYLOAD_LIMIT; +use crate::forward::*; +mod config; +mod errors; +mod forward; +mod sniff; +mod templates; + + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + /* std::env::set_var("RUST_LOG", "actix_web=debug"); + env_logger::init();*/ + println!("ta ta tala ~ SNCF init"); + println!("Checking configuration file..."); + CONFIG.check_version(); + println!( + "Now listening at {}:{}", + CONFIG.listening_address, CONFIG.listening_port + ); + + // starting the http server + HttpServer::new(move || { + App::new() + .data(Client::new()) + .data(forward_url.clone()) + //.wrap( + // CookieSession::signed(&[0; 32]) + // .secure(true) + // .same_site(SameSite::Strict) + // .http_only(true) + // .name("pluriton_cookies") + // ) + .service(Files::new("/assets/", "./templates/assets/").index_file("index.html")) + .route("/", web::get().to(index)) + .route("/link/text", web::post().to(forward_register)) + .default_service(web::route().to(forward)) + .data(String::configure(|cfg| cfg.limit(PAYLOAD_LIMIT))) + .app_data(actix_web::web::Bytes::configure(|cfg| { + cfg.limit(PAYLOAD_LIMIT) + })) + }) + .bind((CONFIG.listening_address.as_str(), CONFIG.listening_port))? + .system_exit() + .run() + .await +} + +pub fn debug(text: &str) { + if CONFIG.debug_mode { + println!("{}", text); + } +} diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/sniff.rs b/build/deb-rust-pluriton-interface/old_src_try/src/sniff.rs new file mode 100644 index 0000000..9bbd614 --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/sniff.rs @@ -0,0 +1,101 @@ +use actix_web::web; +use serde_json::Value; + +use crate::debug; + +// checks to be done on user requests +// if it returns true, cancels the request +pub fn check_request(route: &str, body: &web::Bytes) -> bool { + match route { + "/ocs/v2.php/apps/forms/api/v1/form/update" => rq_form_update(body), + _ => false, + } +} + +// prevents the user from doing anything other than link sharing. +fn rq_form_update(body: &web::Bytes) -> bool { + let req = String::from_utf8_lossy(body); + + // try to serialize the body. + // If the parsing fails, drop the request + let v: Value = serde_json::from_str(&req).unwrap_or_else(|e| { + eprintln!("check_request: failed to parse JSON: {}", e); + Value::Null + }); + // if the type or isAnonymous is set (isn't null), + // drop the request. + // Also drop if v is null because of parsing fail. + v == Value::Null + || v["keyValuePairs"]["isAnonymous"] != Value::Null + || v["keyValuePairs"]["access"]["type"] != Value::Null +} + +// checks to be done on responses from the Nextcloud instance +// if it returns true, cancels the request +// NOTE: unused for now +/*pub fn check_response(_route: &str, _body: &web::Bytes) -> bool { + false +}*/ + +// checks if a form has been created. +// if it's the case, sets some parameters. +// this part may need code quality improvements +// the body MUST come from the "create new form" route +// (this is checked upstream) +// returns the form UID and the request body +pub fn check_new_form(body: &web::Bytes) -> u64 { + let req = String::from_utf8_lossy(body); + + // finds the form ID + let v: Value = serde_json::from_str(&req).unwrap_or_else(|e| { + eprintln!("check_new_form: failed to parse JSON: {}", e); + Value::Null + }); + + if v != Value::Null + && v["ocs"].is_object() + && v["ocs"]["data"].is_object() + && v["ocs"]["data"]["id"] != Value::Null + && v["ocs"]["data"]["isAnonymous"] == Value::Null + { + //getting form id + v["ocs"]["data"]["id"].as_u64().unwrap_or_else(|| { + eprintln!("check_new_form: failed to parse formid: {}", v); + 0 + }) + } else { + eprintln!("error: check_new_form: can't find formid: {}", v); + 0 + } +} + +// those routes won't be redirected +const BLOCKED_ROUTES: &[&str] = &[ + "/apps/settings", + "/login", + "/settings", + "/ocs/v", + "/remote.php", + "/core/templates/filepicker.html", +]; + +// ...except if they are in this list +const ALLOWED_ROUTES: &[&str] = &["/ocs/v2.php/apps/forms/", "/status.php"]; + +// checks if the accessed route is allowed for the user. +// if it returns true, redirects elsewhere +pub fn check_route(route: &str) -> bool { + debug(route); + + for r in BLOCKED_ROUTES { + if route.starts_with(r) { + for s in ALLOWED_ROUTES { + if route.starts_with(s) { + return false; + } + } + return true; + } + } + false +} diff --git a/build/deb-rust-pluriton-interface/old_src_try/src/templates.rs b/build/deb-rust-pluriton-interface/old_src_try/src/templates.rs new file mode 100644 index 0000000..d9baed6 --- /dev/null +++ b/build/deb-rust-pluriton-interface/old_src_try/src/templates.rs @@ -0,0 +1,61 @@ +use actix_web::HttpRequest; +use askama::Template; +use crate::config::Config; +#[derive(Template)] +#[template(path = "index.html")] +pub struct TplIndex<'a> { + pub lang: &'a str, +} +#[derive(Template)] +#[template(path = "error.html")] +pub struct TplError<'a> { + pub lang: &'a str, + pub error_msg: &'a str, +} +#[derive(Template)] +#[template(path = "link.html")] +pub struct TplLink<'a> { + pub lang: &'a str, + pub config: &'a Config, +} +pub fn get_lang(req: &HttpRequest) -> String { + // getting language from client header + // taking the two first characters of the Accept-Language header, + // in lowercase, then parsing it. + // if it fails, returns "en" + if let Some(la) = req.uri().query() { + + return la[5..].to_string(); + + } else { + if let Some(l) = req.headers().get("Accept-Language") { + if let Ok(s) = l.to_str() { + return s.to_lowercase()[..2].to_string(); + } + } + } + String::from("en") +} +mod filters { + use crate::config::LOC; + pub fn tr(key: &str, lang: &str) -> askama::Result { + let translation = LOC.get(key).ok_or_else(|| { + eprintln!("tr filter: couldn't find the key {}", key); + askama::Error::from(std::fmt::Error) + })?; + Ok(String::from( + translation + .get(lang) + .unwrap_or(translation.get("en").ok_or_else(|| { + eprintln!("tr filter: couldn't find the lang {} in key {}", lang, key); + askama::Error::from(std::fmt::Error) + })?) + .as_str() + .ok_or_else(|| { + eprintln!("tr filter: lang {} in key {} is not str", lang, key); + askama::Error::from(std::fmt::Error) + })?, + )) + } +} + diff --git a/build/deb-rust-pluriton-interface/pluriton-interface b/build/deb-rust-pluriton-interface/pluriton-interface new file mode 160000 index 0000000..b1fd3fc --- /dev/null +++ b/build/deb-rust-pluriton-interface/pluriton-interface @@ -0,0 +1 @@ +Subproject commit b1fd3fccaeb98678c6a36973bac2666def4b3da1 diff --git a/build/deb-rust-pluriton-interface/templates.rs b/build/deb-rust-pluriton-interface/templates.rs new file mode 100644 index 0000000..6be93f1 --- /dev/null +++ b/build/deb-rust-pluriton-interface/templates.rs @@ -0,0 +1,65 @@ +use actix_web::HttpRequest; +use askama::Template; +use crate::config::Config; +#[derive(Template)] +#[template(path = "index.html")] +pub struct TplIndex<'a> { + pub lang: &'a str, + pub csrf_token: &'a str, + pub sncf_admin_token: Option, +} +#[derive(Template)] +#[template(path = "error.html")] +pub struct TplError<'a> { + pub lang: &'a str, + pub error_msg: &'a str, +} +#[derive(Template)] +#[template(path = "link.html")] +pub struct TplLink<'a> { + pub lang: &'a str, + pub admin_token: &'a str, + pub csrf_token: &'a str, + pub config: &'a Config, +} +pub fn get_lang(req: &HttpRequest) -> String { + // getting language from client header + // taking the two first characters of the Accept-Language header, + // in lowercase, then parsing it. + // if it fails, returns "en" + if let Some(la) = req.uri().query() { + + return la[5..].to_string(); + + } else { + if let Some(l) = req.headers().get("Accept-Language") { + if let Ok(s) = l.to_str() { + return s.to_lowercase()[..2].to_string(); + } + } + } + String::from("en") +} +mod filters { + use crate::config::LOC; + pub fn tr(key: &str, lang: &str) -> askama::Result { + let translation = LOC.get(key).ok_or_else(|| { + eprintln!("tr filter: couldn't find the key {}", key); + askama::Error::from(std::fmt::Error) + })?; + Ok(String::from( + translation + .get(lang) + .unwrap_or(translation.get("en").ok_or_else(|| { + eprintln!("tr filter: couldn't find the lang {} in key {}", lang, key); + askama::Error::from(std::fmt::Error) + })?) + .as_str() + .ok_or_else(|| { + eprintln!("tr filter: lang {} in key {} is not str", lang, key); + askama::Error::from(std::fmt::Error) + })?, + )) + } +} + diff --git a/build/deb-rust-pluriton-interface/templates.rs.save b/build/deb-rust-pluriton-interface/templates.rs.save new file mode 100644 index 0000000..3efbc81 --- /dev/null +++ b/build/deb-rust-pluriton-interface/templates.rs.save @@ -0,0 +1,65 @@ +use actix_web::HttpRequest; +use askama::Template; +use crate::config::Config; +#[derive(Template)] +#[template(path = "index.html")] +pub struct TplIndex<'a> { + pub lang: &'a str, + pub csrf_token: &'a str, +} +#[derive(Template)] +#[template(path = "error.html")] +pub struct TplError<'a> { + pub lang: &'a str, + pub error_msg: &'a str, +} +#[derive(Template)] +#[template(path = "link.html")] +pub struct TplLink<'a> { + pub lang: &'a str, + pub admin_token: &'a str, + pub config: &'a Config, +} + + +pub fn get_lang(req: &HttpRequest) -> String { + // getting language from client header + // taking the two first characters of the Accept-Language header, + // in lowercase, then parsing it. + // if it fails, returns "en" + if let Some(l) = req.headers().get("Accept-Language") { + if let Ok(s) = l.to_str() { + return s.to_lowercase()[..2].to_string(); + } + } + if let Some(l) = req.headers().get("lang") { + if let Ok(s) = l.to_str() { + return s.to_lowercase()[..2].to_string(); + } + } + + String::from("en") +} +mod filters { + use crate::config::LOC; + pub fn tr(key: &str, lang: &str) -> askama::Result { + let translation = LOC.get(key).ok_or_else(|| { + eprintln!("tr filter: couldn't find the key {}", key); + askama::Error::from(std::fmt::Error) + })?; + Ok(String::from( + translation + .get(lang) + .unwrap_or(translation.get("en").ok_or_else(|| { + eprintln!("tr filter: couldn't find the lang {} in key {}", lang, key); + askama::Error::from(std::fmt::Error) + })?) + .as_str() + .ok_or_else(|| { + eprintln!("tr filter: lang {} in key {} is not str", lang, key); + askama::Error::from(std::fmt::Error) + })?, + )) + } +} + diff --git a/build/deb-rust-pluriton-interface/white-background.png b/build/deb-rust-pluriton-interface/white-background.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc1957c1a05d3b2cdd173adf5293fdd5a52e327 GIT binary patch literal 2872 zcmeAS@N?(olHy`uVBq!ia0y~yU~*t!U>4zE0*c(8z;D99z}S-M>>S|f?5t2wl%JNF zlghxLF|l@{t;b;pnWOQ+Ta~8rm1#T@SZEa~AX<1uOJt$b3el)igPmWvXPKzz>h(2c zA3WH9bX9Zr=5>7QniPI8K6>_S$qOabfBKqRIzB$wA^-lJ?Yn!7PK(c&tj?CX@MYCZ zuOml&%0hYe9O{>AG3eaM+SyiG$U2N`RZFVN_|5&XNrKcMs)D z{s`?9DVloV#Ks0LlM{XNfB5Ulv!AM~-&v9%^P+C!+kQcX4csQLxBacnxqVjnz<-{Y zm$~&z8PC*Aip$TwsI0JsHzsDgX)6DYJB&*HZ8@jH=O_NUBj0!AvThsAt>LXst}5hc#~xw)x%B@E6*sfi`2DGKG8B^e6t zp1uL$jeO!jvy?nt978H@y}fG4%fP_FVt8Qx^W%)xp4tzmy;fmmxZlIVARz%oY-|i* z)X>NXM+pfG5QL!$s1}bZpmGf3;AR0C7{zopr0RPo=6#xJL literal 0 HcmV?d00001 diff --git a/build/tf-gpu-FASTsearch/Dockerfile b/build/tf-gpu-FASTsearch/Dockerfile deleted file mode 100644 index ab5790d..0000000 --- a/build/tf-gpu-FASTsearch/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -FROM tensorflow/tensorflow:1.12.0-gpu - -COPY Prototyp /home/Prototyp - -COPY requis.txt /home/requis.txt - -RUN apt-get update && apt-get install -y wget libssl-dev openssl -#RUN wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz -#RUN tar -xzvf Python-3.5.3.tgz -#RUN cd Python-3.5.3 && ./configure && make && make install - -RUN python --version - -RUN apt-get update && apt-get install -y virtualenv python-dev python-pip build-essential - -#RUN python3.5 -m venv /home/venv - -#ENV PATH="home/venv/bin:$PATH" - -RUN python --version - -#RUN pip3 install --upgrade pip - -RUN pip install -r /home/requis.txt && python -m spacy download de - -RUN pip install hickle==3.4.9 Twisted joblib -#nodejs npm - -#RUN python -m pip install incremental - -#RUN python -m pip install cffi - -#RUN python -m pip install -r /home/requis.txt - -#RUN python3 -m spacy download de - -#RUN pip3 install pandas bs4 - - - -RUN apt-get update && apt-get install -y nodejs - -#ENTRYPOINT ["tail"] -#CMD ["-f","/dev/null"] - -CMD /bin/sh -c "cd /home/Prototyp && nodejs server.js" diff --git a/build/tfgpu-pluriton/Dockerfile b/build/tfgpu-pluriton/Dockerfile new file mode 100644 index 0000000..8eea302 --- /dev/null +++ b/build/tfgpu-pluriton/Dockerfile @@ -0,0 +1,44 @@ +FROM tensorflow/tensorflow:2.3.0-gpu + +# why 2.3 ? I looked it up on stack overflow +# https://stackoverflow.com/questions/50622525/which-tensorflow-and-cuda-version-combinations-are-compatible +# here is a nice list, which tf version is compatible with which cuda +# from the cmmand docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi +# you get your installed cuda version running + +RUN useradd -ms /bin/bash pluritonian + +COPY Translations.txt /home/pluritonian/Translations.txt + +COPY test_runwithgen.py /home/pluritonian/test_runwithgen.py +COPY test_runwithload.py /home/pluritonian/test_runwithload.py +COPY generateModels.py /home/pluritonian/generateModels.py + +COPY req.js /home/pluritonian/req.js + +COPY postcommand /home/pluritonian/postcommand + +COPY updateDatabase.py /home/pluritonian/updateDatabase.py + +COPY FASTsearch.py /home/pluritonian/FASTsearch.py + +COPY fastapi_server.py /home/pluritonian/fastapi_server.py + +#USER pluritonian + +WORKDIR /home/pluritonian + +RUN apt-get update && apt-get install nano + +RUN pip install joblib scikit-learn hickle==3.4.9 fastapi uvicorn[standard] + +RUN pip install idna==2.9 python-multipart==0.0.5 + +RUN python generateModels.py + +# to let the container running: + +CMD uvicorn --host 0.0.0.0 fastapi_server:app + +#ENTRYPOINT ["tail"] +#CMD ["-f","/dev/null"] diff --git a/build/tf-gpu-FASTsearch/FASTsearch.py b/build/tfgpu-pluriton/FASTsearch.py similarity index 99% rename from build/tf-gpu-FASTsearch/FASTsearch.py rename to build/tfgpu-pluriton/FASTsearch.py index 960a52f..b7a47b9 100644 --- a/build/tf-gpu-FASTsearch/FASTsearch.py +++ b/build/tfgpu-pluriton/FASTsearch.py @@ -13,8 +13,9 @@ from sklearn.feature_extraction.text import CountVectorizer import numpy as np import scipy as sc -import tensorflow as tf +import tensorflow.compat.v1 as tf +tf.compat.v1.disable_eager_execution() import _pickle as cPickle diff --git a/build/tfgpu-pluriton/Translations.txt b/build/tfgpu-pluriton/Translations.txt new file mode 100644 index 0000000..ef653b6 --- /dev/null +++ b/build/tfgpu-pluriton/Translations.txt @@ -0,0 +1,2 @@ +[['Ich gehe nach Hause, weil es regnet.'], ['Ich gehe nach Hause. Weil es regnet.']] +[['Es wäre sinnvoller, wenn die Maschinen aufhören zu regieren.'], ['Wenn die Maschinen aufhören zu regieren. Das ist sinnvoller.']] diff --git a/build/tfgpu-pluriton/fastapi_server.py b/build/tfgpu-pluriton/fastapi_server.py new file mode 100644 index 0000000..67f4411 --- /dev/null +++ b/build/tfgpu-pluriton/fastapi_server.py @@ -0,0 +1,37 @@ +from fastapi import FastAPI, Response, Request + +from fastapi.responses import JSONResponse + +app = FastAPI() + +from updateDatabase import * + +pluriDBupdater = PluritonUpdater() + +pluriDBupdater.loadModels() + + +@app.post("/datext", response_class=JSONResponse) +async def root(data: Request): + + text_bytes = await data.body() + + text = str(text_bytes) + + print(text) + + einfach, schwer = pluriDBupdater.searchNearest2Translate(text) + + einfachstr = '' + schwerstr = '' + + for word in einfach: + einfachstr += word + ' ' + for word in schwer: + schwerstr += word + ' ' + + daresponse = einfachstr + '?&?&' + schwerstr + + + return JSONResponse(content=daresponse) + diff --git a/build/tfgpu-pluriton/generateModels.py b/build/tfgpu-pluriton/generateModels.py new file mode 100644 index 0000000..01f1501 --- /dev/null +++ b/build/tfgpu-pluriton/generateModels.py @@ -0,0 +1,18 @@ +from updateDatabase import * + +print('Init Pluriton..') +pluriDBupdater = PluritonUpdater() +print('done') +print('creaing hklDB from the Translations..') +pluriDBupdater.create_hklDB_from_csv('Translations.txt') +print('done') +print('generating BOW models..') + +pluriDBupdater.load_DB_into_FASTsearch_and_generate_BOW() +print('done') +#pluriDBupdater.loadModels() + +#einfach, schwer = pluriDBupdater.searchNearest2Translate('Die Maschinen besser') + +#print('Schwer', schwer) + diff --git a/build/tfgpu-pluriton/postcommand b/build/tfgpu-pluriton/postcommand new file mode 100644 index 0000000..0c2b5a6 --- /dev/null +++ b/build/tfgpu-pluriton/postcommand @@ -0,0 +1 @@ +curl -X POST -H "Content-Type: application/json" -d @req.json http://localhost:8000/datext diff --git a/build/tfgpu-pluriton/req.js b/build/tfgpu-pluriton/req.js new file mode 100644 index 0000000..72febaf --- /dev/null +++ b/build/tfgpu-pluriton/req.js @@ -0,0 +1,3 @@ +{ + "Text": "Die Maschinen werrden immer besser" +} diff --git a/build/tfgpu-pluriton/test_runwithgen.py b/build/tfgpu-pluriton/test_runwithgen.py new file mode 100644 index 0000000..47bdd79 --- /dev/null +++ b/build/tfgpu-pluriton/test_runwithgen.py @@ -0,0 +1,16 @@ +from updateDatabase import * + + +pluriDBupdater = PluritonUpdater() + + +pluriDBupdater.create_hklDB_from_csv('Translations.txt') + +pluriDBupdater.load_DB_into_FASTsearch_and_generate_BOW() + +#pluriDBupdater.loadModels() + +einfach, schwer = pluriDBupdater.searchNearest2Translate('Die Maschinen besser') + +print('Schwer', schwer) + diff --git a/build/tfgpu-pluriton/test_runwithload.py b/build/tfgpu-pluriton/test_runwithload.py new file mode 100644 index 0000000..8b8b246 --- /dev/null +++ b/build/tfgpu-pluriton/test_runwithload.py @@ -0,0 +1,11 @@ +from updateDatabase import * + + +pluriDBupdater = PluritonUpdater() + +pluriDBupdater.loadModels() + +einfach, schwer = pluriDBupdater.searchNearest2Translate('Die Maschinen besser') + +print('Schwer', schwer) + diff --git a/build/tfgpu-pluriton/updateDatabase.py b/build/tfgpu-pluriton/updateDatabase.py new file mode 100644 index 0000000..e439eb5 --- /dev/null +++ b/build/tfgpu-pluriton/updateDatabase.py @@ -0,0 +1,126 @@ +import hickle as hkl + +import FASTsearch + + +class PluritonUpdater(object): + + def __init__(self): + + self.ole = 1 + + # Input: csv file with the form ['eine', 'schwere', 'Sprache'] , ['in', 'leicht'] for each line + # Output: hkl dump of array in form [[['eine', 'schwere', 'Sprache'],['in', 'leicht']],[..]] + + def create_hklDB_from_csv(self, csvDbDir): + + with open(csvDbDir) as lines: + + TranslationsDB_All = [] + + for line in lines: + + TranslationsDB_All.append(list(eval(line))) + + + #print(ShortsDB_All) + + #print(ShortsDB_All[0][0]) + + + hkldbTranslations1 = [] + hkldbTranslations2 = [] + counter = 0 + for n in range(len(TranslationsDB_All)): + + counter += 1 + #if counter % 1000 == 0: + #print(counter) + + hkldbTranslations1.append([TranslationsDB_All[n][0][0]]) + hkldbTranslations2.append([TranslationsDB_All[n][1][0]]) + + + + #print(hkldbTranslations1, TranslationsDB_All) + #print('creating the hkl dump of TranslationsDBAll') + hkl.dump(TranslationsDB_All, 'hkldbTranslations_All.hkl', mode='w', compression='gzip') + #print('done..') + + #print('Creating the hkl dump of TranslationsDB') + hkl.dump(hkldbTranslations1, 'hkldbTranslations1.hkl', mode='w', compression='gzip') + hkl.dump(hkldbTranslations2, 'hkldbTranslations2.hkl', mode='w', compression='gzip') + #print('done..') + + return 'done' + + + def load_DB_into_FASTsearch_and_generate_BOW(self): + + print('loading the hkldbTranslations1...') + self.hkldbTranslations1 = hkl.load('hkldbTranslations1.hkl') + print('done') + + print('loading the hkldbTranslations2...') + self.hkldbTranslations2 = hkl.load('hkldbTranslations2.hkl') + print('done') + + print('loading hkldbTranslations 1 into FASTsearch..') + self.fsearch1 = FASTsearch.FASTsearch('hkldbTranslations1.hkl') + print('done') + + print('loading hkldbTranslations 2 into FASTsearch..') + self.fsearch2 = FASTsearch.FASTsearch('hkldbTranslations2.hkl') + print('done') + + print('generating BoW Model 1..') + self.fsearch1.Gen_BoW_Model(50000, "word", punctuation = False) + print('done') + + print('generating BoW Model 2..') + self.fsearch2.Gen_BoW_Model(50000, "word", punctuation = False) + print('done') + + return 'done' + + def loadModels(self): + + print('loading the hkldbTranslations1...') + self.hkldbTranslations1 = hkl.load('hkldbTranslations1.hkl') + print('done') + + print('loading the hkldbTranslations2...') + self.hkldbTranslations2 = hkl.load('hkldbTranslations2.hkl') + print('done') + + print('loading hkldbTranslations 1 into FASTsearch..') + self.fsearch1 = FASTsearch.FASTsearch('hkldbTranslations1.hkl') + print('done') + + print('loading hkldbTranslations 2 into FASTsearch..') + self.fsearch2 = FASTsearch.FASTsearch('hkldbTranslations2.hkl') + print('done') + + print('loading the bow model 1') + self.fsearch1.Load_BoW_Model('bagofwordshkldbTranslations1.pkl', 'DataBaseOneZeroshkldbTranslations1.hkl') + print('done') + + print('loading the bow model 2') + self.fsearch2.Load_BoW_Model('bagofwordshkldbTranslations2.pkl', 'DataBaseOneZeroshkldbTranslations2.hkl') + print('done') + + + return 'done' + + def searchNearest2Translate(self, text): + + + bestmatches2, matchindex2 = self.fsearch1.search_with_highest_multiplikation_Output(text, 1) + + + + DifficultText = self.hkldbTranslations1[matchindex2[0]][0].split() + LeichterText = self.hkldbTranslations2[matchindex2[0]][0].split() + + return DifficultText, LeichterText + diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 822756d..df6dbb9 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -1,12 +1,33 @@ -version: '2.3' +version: '3.1' services: - prototype: + pluriton: - build: ../build/tf-gpu-Prototyp - container_name: prototype + build: ../build/tfgpu-pluriton + container_name: pluriton_python_app restart: always + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + networks: + - pluritonNet + + deb-rust-pluriton-interface: + build: ../build/deb-rust-pluriton-interface + container_name: deb-rust-pluriton-interface + restart: always + environment: + - RUST_BACKTRACE=full ports: - - "127.0.0.1:7000:7000" + - "127.0.0.1:1020:7050" + networks: + - pluritonNet + + +networks: + pluritonNet: + driver: bridge diff --git a/in b/in new file mode 100644 index 0000000..e69de29 diff --git a/out.html b/out.html new file mode 100644 index 0000000..e69de29