mirror of
https://github.com/samsonjs/agate.git
synced 2026-03-25 09:05:50 +00:00
File serving
This commit is contained in:
parent
7eeba3959e
commit
b5ce738240
1 changed files with 21 additions and 14 deletions
35
src/main.rs
35
src/main.rs
|
|
@ -8,7 +8,7 @@ use {
|
|||
rustls::internal::pemfile::{certs, rsa_private_keys},
|
||||
std::{
|
||||
error::Error,
|
||||
fs::File,
|
||||
fs::{File, read},
|
||||
io::BufReader,
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
|
|
@ -16,7 +16,7 @@ use {
|
|||
url::Url,
|
||||
};
|
||||
|
||||
pub type Result<T=()> = std::result::Result<T, Box<dyn Error>>;
|
||||
pub type Result<T=()> = std::result::Result<T, Box<dyn Error + Send + Sync>>;
|
||||
|
||||
fn main() -> Result {
|
||||
let certs = certs(&mut BufReader::new(File::open("tests/cert.pem")?))
|
||||
|
|
@ -57,18 +57,25 @@ async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result {
|
|||
let url = Url::parse(request.trim())?;
|
||||
eprintln!("Got request: {:?}", url);
|
||||
|
||||
let path: PathBuf = url.path_segments().unwrap().collect();
|
||||
eprintln!("Path: {:?}", path);
|
||||
let path = Path::new(".").join(path).canonicalize()?;
|
||||
eprintln!("Path: {:?}", path);
|
||||
|
||||
// TODO: Return a not found error
|
||||
assert!(path.starts_with(std::env::current_dir()?));
|
||||
|
||||
let mut stream = stream.into_inner();
|
||||
stream.write_all(b"20 text/gemini\r\n").await?;
|
||||
stream.write_all(b"=> ").await?;
|
||||
stream.write_all(url.as_str().as_bytes()).await?;
|
||||
stream.write_all(b" Reload\r\n").await?;
|
||||
match get(&url) {
|
||||
Ok(response) => {
|
||||
stream.write_all(b"20 text/gemini\r\n").await?;
|
||||
stream.write_all(&response).await?;
|
||||
}
|
||||
Err(_) => {
|
||||
stream.write_all(b"40 Not found, sorry.\r\n").await?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get(url: &Url) -> Result<Vec<u8>> {
|
||||
let path: PathBuf = url.path_segments().unwrap().collect();
|
||||
let path = Path::new(".").join(path).canonicalize()?;
|
||||
if !path.starts_with(std::env::current_dir()?) {
|
||||
Err("invalid path")?
|
||||
}
|
||||
let response = read(path)?;
|
||||
Ok(response)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue