pastebin code is reduced to 42 lines :D
pastebin code is reduced to 42 lines :D
Hello, last time I shared my dirty code of pastebin and people suggested me a lot of things so I have implemented those. now the code is reduced to only 42 lines of code :D
last post: https://lemmy.ca/post/36410861
here is the code:
use axum::{extract::Path, routing::get, routing::post, Router}; use std::fs::{read_to_string, File}; use std::io::prelude::*; use std::sync::atomic::{AtomicUsize, Ordering}; const MAX_FILE_SIZE: usize = 1024 * 1024 * 10; static mut FILE_COUNT: AtomicUsize = AtomicUsize::new(0); async fn handle(Path(id): Path<String>) -> String { if let Ok(content) = read_to_string(id) { return content; } return String::from("ERROR: File not found"); } async fn submit_handle(bytes: String) -> String { dbg!(&bytes); if bytes.len() > MAX_FILE_SIZE { // Don't store the file if it exceeds max size return String::from("ERROR: max size exceeded"); } unsafe { let path = FILE_COUNT.load(Ordering::Relaxed); FILE_COUNT.store(path+1, Ordering::Relaxed); let mut output = File::create(path.to_string()).unwrap(); write!(output, "{}", bytes).unwrap(); let mut url = String::from("http://localhost:3000/"); url.push_str(&path.to_string()); return url; } } #[tokio::main] async fn main() { let app = Router::new() .route("/", get(|| async { "Paste something in pastebin! use curl -X POST http://localhost:3000/submit -d 'this is some data'" })) .route("/{id}", get(handle)) .route("/submit", post(submit_handle)); let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); }