Fixed some errors found by jetforce_diagnostics.py
This commit is contained in:
26
src/main.rs
26
src/main.rs
@@ -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(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user