Use iron instead of rocket
This commit is contained in:
parent
89d16fa886
commit
1a56b8d709
@ -6,10 +6,10 @@ version = "0.1.0"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
base64 = "0.9.0"
|
base64 = "0.9.0"
|
||||||
image = "0.18.0"
|
image = "0.18.0"
|
||||||
|
iron = "0.6.0"
|
||||||
palette = "0.2.1"
|
palette = "0.2.1"
|
||||||
regex = "0.2.5"
|
regex = "0.2.5"
|
||||||
reqwest = "0.8.2"
|
reqwest = "0.8.2"
|
||||||
rocket = "0.3.5"
|
rocket = "0.3.5"
|
||||||
rocket_codegen = "0.3.5"
|
rocket_codegen = "0.3.5"
|
||||||
serde_json = "1.0.9"
|
serde_json = "1.0.9"
|
||||||
|
|
||||||
|
@ -1,7 +1,15 @@
|
|||||||
#![feature(plugin, custom_derive)]
|
//#![feature(plugin, custom_derive)]
|
||||||
#![plugin(rocket_codegen)]
|
//#![plugin(rocket_codegen)]
|
||||||
|
|
||||||
extern crate rocket;
|
//extern crate rocket;
|
||||||
|
extern crate iron;
|
||||||
|
use iron::prelude::*;
|
||||||
|
use iron::Handler;
|
||||||
|
use iron::Headers;
|
||||||
|
use iron::Url;
|
||||||
|
use iron::TypeMap;
|
||||||
|
use iron::status::Status;
|
||||||
|
use iron::response::WriteBody;
|
||||||
|
|
||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
use reqwest::{Client, ClientBuilder};
|
use reqwest::{Client, ClientBuilder};
|
||||||
@ -23,38 +31,16 @@ extern crate wynnautocrop;
|
|||||||
use wynnautocrop::*;
|
use wynnautocrop::*;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::io::{Cursor, Read};
|
use std::env;
|
||||||
|
use std::io::{Cursor, Read, Write};
|
||||||
|
|
||||||
#[derive(FromForm)]
|
fn postimg_gallery(out: &mut Write, url: &str) -> Result<(), std::io::Error> {
|
||||||
struct UrlForm {
|
let html = reqwest::get(url).unwrap().text().unwrap();
|
||||||
url: String
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/crop?<url>")]
|
|
||||||
fn crop_url(url: UrlForm) -> String {
|
|
||||||
let url = url.url;
|
|
||||||
if url.starts_with("https://postimg.org/gallery/") {
|
|
||||||
postimg_gallery(url)
|
|
||||||
} else {
|
|
||||||
let mut buf = Vec::new();
|
|
||||||
reqwest::get(&url).unwrap().read_to_end(&mut buf).unwrap();
|
|
||||||
let mut img = image::load(Cursor::new(&*buf), image::guess_format(&buf).unwrap()).unwrap();
|
|
||||||
img = crop(img);
|
|
||||||
let mut buf = Vec::new();
|
|
||||||
img.save(&mut buf, ImageFormat::PNG).unwrap();
|
|
||||||
//let handle = imgur::Handle::new("c819d6faf0219ac".to_owned());
|
|
||||||
//handle.upload(&buf).unwrap().link().unwrap().to_owned()
|
|
||||||
upload_image(&Client::new(), &buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn postimg_gallery(url: String) -> String {
|
|
||||||
let html = reqwest::get(&url).unwrap().text().unwrap();
|
|
||||||
let regex = Regex::new(r"embed_value=(\{.+\});").unwrap();
|
let regex = Regex::new(r"embed_value=(\{.+\});").unwrap();
|
||||||
let regex2 = Regex::new(r#"href="(.*\?dl=1)""#).unwrap();
|
let regex2 = Regex::new(r#"href="(.*\?dl=1)""#).unwrap();
|
||||||
let json = regex.captures(&html).unwrap().get(1).unwrap().as_str();
|
let json = regex.captures(&html).unwrap().get(1).unwrap().as_str();
|
||||||
let data: serde_json::Value = serde_json::from_str(json).unwrap();
|
let data: serde_json::Value = serde_json::from_str(json).unwrap();
|
||||||
let mut acc = String::new();
|
//let mut acc = String::new();
|
||||||
let mut headers = header::Headers::new();
|
let mut headers = header::Headers::new();
|
||||||
headers.set(header::UserAgent::new("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36".to_string()));
|
headers.set(header::UserAgent::new("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36".to_string()));
|
||||||
let client = ClientBuilder::new()
|
let client = ClientBuilder::new()
|
||||||
@ -82,8 +68,9 @@ fn postimg_gallery(url: String) -> String {
|
|||||||
//acc += upload.link().unwrap();
|
//acc += upload.link().unwrap();
|
||||||
let url = upload_image(&client, &buf);
|
let url = upload_image(&client, &buf);
|
||||||
println!("uploaded to {:?}", url);
|
println!("uploaded to {:?}", url);
|
||||||
acc += &url;
|
out.write_all(url.as_bytes())?;
|
||||||
acc += " ";
|
out.write_all(b" ")?;
|
||||||
|
out.flush()?;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,7 +80,7 @@ fn postimg_gallery(url: String) -> String {
|
|||||||
println!("retrying..");
|
println!("retrying..");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
acc
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn upload_image(client: &Client, buf: &[u8]) -> String {
|
fn upload_image(client: &Client, buf: &[u8]) -> String {
|
||||||
@ -111,5 +98,64 @@ fn upload_image(client: &Client, buf: &[u8]) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
rocket::ignite().mount("/", routes![crop_url]).launch();
|
let port = env::var("PORT").expect("no $PORT");
|
||||||
|
let mut router = Router::new();
|
||||||
|
|
||||||
|
router.add_route("crop".to_string(), |req: &mut Request| {
|
||||||
|
Ok(Response {
|
||||||
|
status: Some(Status::Ok),
|
||||||
|
headers: Headers::new(),
|
||||||
|
extensions: TypeMap::new(),
|
||||||
|
body: Some(Box::new(Writer(req.url.clone())))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
Iron::new(router).http(&("0.0.0.0:".to_owned() + &port)).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Writer(Url);
|
||||||
|
|
||||||
|
impl WriteBody for Writer {
|
||||||
|
fn write_body(&mut self, res: &mut Write) -> Result<(), std::io::Error> {
|
||||||
|
let url = &self.0.query().unwrap()[4..];
|
||||||
|
if url.starts_with("https://postimg.org/gallery/") {
|
||||||
|
postimg_gallery(res, url)?;
|
||||||
|
} else {
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
reqwest::get(url).unwrap().read_to_end(&mut buf).unwrap();
|
||||||
|
let mut img = image::load(Cursor::new(&*buf), image::guess_format(&buf).unwrap()).unwrap();
|
||||||
|
img = crop(img);
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
img.save(&mut buf, ImageFormat::PNG).unwrap();
|
||||||
|
//let handle = imgur::Handle::new("c819d6faf0219ac".to_owned());
|
||||||
|
//handle.upload(&buf).unwrap().link().unwrap().to_owned()
|
||||||
|
let image_url = upload_image(&Client::new(), &buf);
|
||||||
|
res.write_all(&image_url.as_bytes())?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Router {
|
||||||
|
// Routes here are simply matched with the url path.
|
||||||
|
routes: HashMap<String, Box<Handler>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Router {
|
||||||
|
fn new() -> Self {
|
||||||
|
Router { routes: HashMap::new() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_route<H>(&mut self, path: String, handler: H) where H: Handler {
|
||||||
|
self.routes.insert(path, Box::new(handler));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Handler for Router {
|
||||||
|
fn handle(&self, req: &mut Request) -> IronResult<Response> {
|
||||||
|
match self.routes.get(&req.url.path().join("/")) {
|
||||||
|
Some(handler) => handler.handle(req),
|
||||||
|
None => Ok(Response::with(Status::NotFound))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user