Fixed some errors found by jetforce_diagnostics.py

This commit is contained in:
int 80h
2020-05-05 23:58:02 -04:00
parent b8e2ff3fd8
commit 83163f9a95

View File

@@ -103,19 +103,22 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
println!("{} New Connection: {}", now, con.peer_addr); println!("{} New Connection: {}", now, con.peer_addr);
let mut buffer = [0; 1024]; let mut buffer = [0; 1024];
con.stream.read(&mut buffer).await?; con.stream.read(&mut buffer).await?;
let request = match String::from_utf8(buffer[..].to_vec()) { let mut request = match String::from_utf8(buffer[..].to_vec()) {
Ok(request) => request, Ok(request) => request,
Err(_) => { Err(_) => {
println!("Bad Request"); println!("Bad Request");
con.send_status(status::Status::BadRequest, "Bad Request!\r\n").await?; con.send_status(status::Status::BadRequest, "Bad Request!").await?;
return Ok(()) return Ok(())
} }
}; };
if request.starts_with("//") {
request = request.replacen("//", "gemini://", 1);
}
println!("Request: {}", request); println!("Request: {}", request);
let url = match Url::parse(&request) { let url = match Url::parse(&request) {
Ok(url) => url, Ok(url) => url,
Err(_) => { con.send_status(status::Status::BadRequest, "Bad Request!\r\n").await?; Err(_) => { con.send_status(status::Status::BadRequest, "Bad Request!").await?;
return Ok(()) return Ok(())
} }
}; };
@@ -124,11 +127,18 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
con.send_status(status::Status::ProxyRequestRefused, "Url doesn't match certificate!").await?; con.send_status(status::Status::ProxyRequestRefused, "Url doesn't match certificate!").await?;
return Ok(()); return Ok(());
} }
// TODO get port from config
match url.port() {
Some(p) => { if p != 1965 {
con.send_status(status::Status::ProxyRequestRefused, "Wrong Port!").await?;
}},
None => {}
}
if url.scheme() != "gemini" { if url.scheme() != "gemini" {
con.send_status( con.send_status(
status::Status::ProxyRequestRefused, status::Status::ProxyRequestRefused,
"Not a gemini scheme!\r\n", "Not a gemini scheme!",
) )
.await?; .await?;
return Ok(()); return Ok(());
@@ -154,7 +164,7 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
} }
if !path.exists() { if !path.exists() {
con.send_status(status::Status::NotFound, "Not found!\r\n").await?; con.send_status(status::Status::NotFound, "Not found!").await?;
return Ok(()); return Ok(());
} }
@@ -165,7 +175,7 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
if !url.path().ends_with("/") { if !url.path().ends_with("/") {
con.send_status( con.send_status(
status::Status::RedirectPermanent, status::Status::RedirectPermanent,
format!("{}/\r\n", url).as_str(), format!("{}/", url).as_str(),
) )
.await?; .await?;
return Ok(()); return Ok(());
@@ -184,14 +194,14 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
return Ok(()); return Ok(());
} else { } else {
con.send_status( con.send_status(
status::Status::CGIError, "CGI Error!\r\n").await?; status::Status::CGIError, "CGI Error!").await?;
return Ok(()); return Ok(());
} }
} }
if perm.mode() & 0o0444 != 0o0444 { if perm.mode() & 0o0444 != 0o0444 {
con.send_status( con.send_status(
status::Status::NotFound, "Not Found!\r\n").await?; status::Status::NotFound, "Not Found!").await?;
return Ok(()); return Ok(());
} }