add /p/<id> routes

This is to work with text/plain type files only

Signed-off-by: Gunwant Jain <mail@wantguns.dev>
This commit is contained in:
Gunwant Jain 2020-12-29 17:37:29 +05:30
parent 805e4ce7d2
commit 66ea75de7f
4 changed files with 765 additions and 23 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target
upload/*

759
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -9,3 +9,11 @@ edition = "2018"
[dependencies]
rand = "0.8.0"
rocket = "0.4.6"
rocket_contrib = { version = "0.4.6", features = ["tera_templates"] }
tree_magic = "0.2.3"
# [dependencies.rocket_contrib]
# version = "0.4.6"
# default-features = false
# features = ["tera_templates"]

View File

@ -1,17 +1,31 @@
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
extern crate tree_magic;
use std::io;
use std::path::Path;
use std::fs::File;
use rocket::Data;
use rocket::http::RawStr;
use rocket_contrib::templates::Template;
mod paste_id;
use paste_id::PasteId;
#[get("/p/<id>")]
fn pretty_retrieve(id: PasteId) -> Option<File> {
let filename = format!("upload/{id}", id = id);
let filepath = Path::new(&filename);
match tree_magic::from_filepath(filepath).as_str() {
"text/plain" => File::open(&filename).ok(),
_ => Err("does not have the MIME type of a plaintext file").ok()
}
}
#[get("/<id>")]
fn retrieve(id: PasteId) -> Option<File> {
let filename = format!("upload/{id}", id = id);
@ -43,11 +57,15 @@ USAGE
GET /<id>
retrieves the content for the paste with id `<id>`
GET /p/<id>
retrieves the content for the paste with id `<id>`, with syntax highlighting
"
}
fn main() {
rocket::ignite()
.mount("/", routes![index, upload, retrieve])
.mount("/", routes![index, upload, retrieve, pretty_retrieve])
.launch();
}