commit 2969e87b5262b0c75d9298f8a2bf4a82336e918d
parent ce62e898c3de0ec160354d0f7f622b03a1f48c8e
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Sun, 14 Mar 2021 23:24:47 +0100
Add separate host-only fromrequest handler
Diffstat:
1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/src/auth.rs b/src/auth.rs
@@ -222,13 +222,12 @@ use crate::db::{
DbConn,
};
-pub struct Headers {
- pub host: String,
- pub device: Device,
- pub user: User,
+pub struct Host {
+ pub host: String
}
-impl<'a, 'r> FromRequest<'a, 'r> for Headers {
+
+impl<'a, 'r> FromRequest<'a, 'r> for Host {
type Error = &'static str;
fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
@@ -262,6 +261,28 @@ impl<'a, 'r> FromRequest<'a, 'r> for Headers {
format!("{}://{}", protocol, host)
};
+ Outcome::Success(Host { host })
+ }
+}
+
+pub struct Headers {
+ pub host: String,
+ pub device: Device,
+ pub user: User,
+}
+
+impl<'a, 'r> FromRequest<'a, 'r> for Headers {
+ type Error = &'static str;
+
+ fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
+ let headers = request.headers();
+
+ let host = match Host::from_request(request) {
+ Outcome::Forward(_) => return Outcome::Forward(()),
+ Outcome::Failure(f) => return Outcome::Failure(f),
+ Outcome::Success(host) => host.host,
+ };
+
// Get access_token
let access_token: &str = match headers.get_one("Authorization") {
Some(a) => match a.rsplit("Bearer ").next() {