mirror of
https://gitlab.com/hagrid-keyserver/hagrid.git
synced 2023-02-13 20:55:02 -05:00
return correct mime type for by-* routes
This commit is contained in:
parent
572e97b952
commit
9d77cc6797
2 changed files with 51 additions and 18 deletions
|
@ -40,10 +40,6 @@ http {
|
||||||
proxy_pass http://127.0.0.1:8080;
|
proxy_pass http://127.0.0.1:8080;
|
||||||
}
|
}
|
||||||
|
|
||||||
location = /keys {
|
|
||||||
proxy_pass http://127.0.0.1:8080;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ^~ /vks/ {
|
location ^~ /vks/ {
|
||||||
proxy_pass http://127.0.0.1:8080;
|
proxy_pass http://127.0.0.1:8080;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ use rocket::{State, Outcome};
|
||||||
use rocket::http::Status;
|
use rocket::http::Status;
|
||||||
use rocket::request::{self, Request, FromRequest};
|
use rocket::request::{self, Request, FromRequest};
|
||||||
use rocket::response::status::Custom;
|
use rocket::response::status::Custom;
|
||||||
use rocket::response::NamedFile;
|
use rocket::response::{Response, NamedFile};
|
||||||
use rocket::fairing::AdHoc;
|
use rocket::fairing::AdHoc;
|
||||||
use rocket_contrib::templates::Template;
|
use rocket_contrib::templates::Template;
|
||||||
|
|
||||||
|
@ -96,9 +96,11 @@ impl<'a, 'r> FromRequest<'a, 'r> for queries::Hkp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_key(bytes: &[u8]) -> result::Result<String, Custom<String>> {
|
fn key_to_response<'a,'b>(bytes: &'a[u8]) -> Response<'b> {
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use sequoia_openpgp::armor::{Writer, Kind};
|
use sequoia_openpgp::armor::{Writer, Kind};
|
||||||
|
use std::io::Cursor;
|
||||||
|
use rocket::http::{Status, ContentType};
|
||||||
|
|
||||||
let key = || -> Result<String> {
|
let key = || -> Result<String> {
|
||||||
let mut buffer = Vec::default();
|
let mut buffer = Vec::default();
|
||||||
|
@ -111,56 +113,91 @@ fn process_key(bytes: &[u8]) -> result::Result<String, Custom<String>> {
|
||||||
}();
|
}();
|
||||||
|
|
||||||
match key {
|
match key {
|
||||||
Ok(s) => Ok(s),
|
Ok(s) =>
|
||||||
|
Response::build()
|
||||||
|
.status(Status::Ok)
|
||||||
|
.header(ContentType::new("application", "pgp-keys"))
|
||||||
|
.sized_body(Cursor::new(s))
|
||||||
|
.finalize(),
|
||||||
Err(_) =>
|
Err(_) =>
|
||||||
Err(Custom(Status::InternalServerError,
|
Response::build()
|
||||||
"Failed to ASCII armor key".to_string())),
|
.status(Status::InternalServerError)
|
||||||
|
.header(ContentType::Plain)
|
||||||
|
.sized_body(Cursor::new("Failed to ASCII armor key"))
|
||||||
|
.finalize(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/by-fpr/<fpr>")]
|
#[get("/by-fpr/<fpr>")]
|
||||||
fn by_fpr(db: rocket::State<Polymorphic>, fpr: String)
|
fn by_fpr(db: rocket::State<Polymorphic>, fpr: String)
|
||||||
-> result::Result<String, Custom<String>>
|
-> Response
|
||||||
{
|
{
|
||||||
|
use std::io::Cursor;
|
||||||
|
use rocket::http::{Status, ContentType};
|
||||||
|
|
||||||
let maybe_key = match Fingerprint::from_str(&fpr) {
|
let maybe_key = match Fingerprint::from_str(&fpr) {
|
||||||
Ok(ref fpr) => db.by_fpr(fpr),
|
Ok(ref fpr) => db.by_fpr(fpr),
|
||||||
Err(_) => None,
|
Err(_) => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
match maybe_key {
|
match maybe_key {
|
||||||
Some(ref bytes) => process_key(bytes),
|
Some(ref bytes) => key_to_response(bytes),
|
||||||
None => Ok("No such key :-(".to_string()),
|
None =>
|
||||||
|
Response::build()
|
||||||
|
.status(Status::NotFound)
|
||||||
|
.header(ContentType::Plain)
|
||||||
|
.sized_body(Cursor::new("No such key :-("))
|
||||||
|
.finalize(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/by-email/<email>")]
|
#[get("/by-email/<email>")]
|
||||||
fn by_email(db: rocket::State<Polymorphic>, email: String)
|
fn by_email(db: rocket::State<Polymorphic>, email: String)
|
||||||
-> result::Result<String, Custom<String>>
|
-> Response
|
||||||
{
|
{
|
||||||
|
use std::io::Cursor;
|
||||||
|
use rocket::http::{Status, ContentType};
|
||||||
|
|
||||||
let maybe_key = match Email::from_str(&email) {
|
let maybe_key = match Email::from_str(&email) {
|
||||||
Ok(ref email) => db.by_email(email),
|
Ok(ref email) => db.by_email(email),
|
||||||
Err(_) => None,
|
Err(_) => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
match maybe_key {
|
match maybe_key {
|
||||||
Some(ref bytes) => process_key(bytes),
|
Some(ref bytes) => key_to_response(bytes),
|
||||||
None => Ok("No such key :-(".to_string()),
|
None =>
|
||||||
|
Response::build()
|
||||||
|
.status(Status::NotFound)
|
||||||
|
.header(ContentType::Plain)
|
||||||
|
.sized_body(Cursor::new("No such key :-("))
|
||||||
|
.finalize(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/by-kid/<kid>")]
|
#[get("/by-kid/<kid>")]
|
||||||
fn by_kid(db: rocket::State<Polymorphic>, kid: String)
|
fn by_kid(db: rocket::State<Polymorphic>, kid: String)
|
||||||
-> result::Result<String, Custom<String>>
|
-> Response
|
||||||
{
|
{
|
||||||
|
use std::io::Cursor;
|
||||||
|
use rocket::http::{Status, ContentType};
|
||||||
|
|
||||||
let maybe_key = match KeyID::from_str(&kid) {
|
let maybe_key = match KeyID::from_str(&kid) {
|
||||||
Ok(ref key) => db.by_kid(key),
|
Ok(ref key) => db.by_kid(key),
|
||||||
Err(_) => None,
|
Err(_) => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
match maybe_key {
|
match maybe_key {
|
||||||
Some(ref bytes) => process_key(bytes),
|
Some(ref bytes) => {
|
||||||
None => Ok("No such key :-(".to_string()),
|
key_to_response(bytes)
|
||||||
}
|
}
|
||||||
|
None =>
|
||||||
|
Response::build()
|
||||||
|
.status(Status::NotFound)
|
||||||
|
.header(ContentType::Plain)
|
||||||
|
.sized_body(Cursor::new("No such key :-("))
|
||||||
|
.finalize(),
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/vks/verify/<token>")]
|
#[get("/vks/verify/<token>")]
|
||||||
|
|
Loading…
Reference in a new issue