|
@@ -1,10 +1,14 @@
|
|
|
use rocket_contrib::serve::StaticFiles;
|
|
|
use rocket_contrib::json::Json;
|
|
|
use rocket::response::content;
|
|
|
+use rocket::http::ContentType;
|
|
|
+use rocket::response::Response;
|
|
|
use std::sync::Mutex;
|
|
|
use std::collections::HashMap;
|
|
|
use super::ACCOUNTS;
|
|
|
use super::query::*;
|
|
|
+use reqwest;
|
|
|
+use urldecode;
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
|
struct Task {
|
|
@@ -16,6 +20,32 @@ lazy_static! {
|
|
|
static ref TASKS: Mutex<Vec<Task>> = Mutex::new(vec![]);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+pub fn proxy(url: &str) -> Vec<u8> {
|
|
|
+ match reqwest::get(url) {
|
|
|
+ Ok(mut resp) => {
|
|
|
+ // println!("resp = {:?}", resp);
|
|
|
+ let mut buf: Vec<u8> = vec![];
|
|
|
+ match resp.copy_to(&mut buf) {
|
|
|
+ Ok(_r) => buf,
|
|
|
+ Err(e) => vec![]
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ Err(e) => vec![]
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#[get("/proxy/<url>")]
|
|
|
+fn proxy_gate(url: String) -> Vec<u8>{
|
|
|
+ let html = ContentType::parse_flexible("image/jpeg").unwrap();
|
|
|
+ let response = Response::build().header(html).finalize();
|
|
|
+ proxy(&urldecode::decode(url))
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
#[get("/")]
|
|
|
fn index() -> &'static str {
|
|
|
let accounts = ACCOUNTS.lock().unwrap();
|
|
@@ -27,7 +57,6 @@ fn index() -> &'static str {
|
|
|
#[post("/save", data = "<account>")] //<tasks> means that the function below will have a var called tasks
|
|
|
fn save(account: Json<HashMap<String, Account>>) -> &'static str {
|
|
|
dbg!(&account);
|
|
|
-
|
|
|
let mut accounts = ACCOUNTS.lock().unwrap();
|
|
|
accounts.extend(account.into_inner());
|
|
|
dbg!(&accounts);
|
|
@@ -35,13 +64,9 @@ fn save(account: Json<HashMap<String, Account>>) -> &'static str {
|
|
|
"Inserted"
|
|
|
}
|
|
|
|
|
|
-// turn tasks into json (serialize)
|
|
|
#[get("/load/<account>")]
|
|
|
fn load(account: String) -> content::Json<String> {
|
|
|
- // get a lock here on TASKS
|
|
|
let guard = ACCOUNTS.lock().unwrap().clone();
|
|
|
- // drop(ACCOUNTS);
|
|
|
- // serialize all tasks
|
|
|
match guard.get(&account) {
|
|
|
Some(accountdata) => {
|
|
|
let json_string = serde_json::to_string(&accountdata.queries).unwrap();
|
|
@@ -49,8 +74,6 @@ fn load(account: String) -> content::Json<String> {
|
|
|
},
|
|
|
None => content::Json("{}".to_string())
|
|
|
}
|
|
|
-
|
|
|
- // hand them out to the browser (or anything else) and tell them to expect json
|
|
|
}
|
|
|
|
|
|
pub fn run() {
|
|
@@ -58,6 +81,7 @@ pub fn run() {
|
|
|
// .mount("/", routes![index])
|
|
|
.mount("/", routes![save])
|
|
|
.mount("/", routes![load])
|
|
|
+ .mount("/", routes![proxy_gate])
|
|
|
.mount("/", StaticFiles::from("webapp"))
|
|
|
.launch();
|
|
|
}
|