add Host(String) wrapper type
we can use this to handle rocket Requests (from_request) but we still have to figure out how to automatically assign the type to custom_domain: Optional<Host>, and public_domain: Host.
This commit is contained in:
parent
6bcc4f0ab0
commit
92bbeeb45e
@ -7,6 +7,10 @@ use openssl::{
|
|||||||
rsa::Rsa,
|
rsa::Rsa,
|
||||||
sign::{Signer, Verifier},
|
sign::{Signer, Verifier},
|
||||||
};
|
};
|
||||||
|
use rocket::{
|
||||||
|
outcome::IntoOutcome,
|
||||||
|
request::{self, FromRequest, Request},
|
||||||
|
};
|
||||||
use serde_json;
|
use serde_json;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
use webfinger::*;
|
use webfinger::*;
|
||||||
@ -21,11 +25,45 @@ use posts::Post;
|
|||||||
use safe_string::SafeString;
|
use safe_string::SafeString;
|
||||||
use schema::blogs;
|
use schema::blogs;
|
||||||
use search::Searcher;
|
use search::Searcher;
|
||||||
|
use std::fmt;
|
||||||
use users::User;
|
use users::User;
|
||||||
use {Connection, Error, PlumeRocket, Result};
|
use {Connection, Error, PlumeRocket, Result};
|
||||||
|
|
||||||
pub type CustomGroup = CustomObject<ApSignature, Group>;
|
pub type CustomGroup = CustomObject<ApSignature, Group>;
|
||||||
|
|
||||||
|
#[derive(Queryable, Clone)]
|
||||||
|
pub struct Host(String);
|
||||||
|
|
||||||
|
impl Host {
|
||||||
|
pub fn new<T: Into<String>>(host: T) -> Host {
|
||||||
|
Host(host.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Into<String> for Host {
|
||||||
|
fn into(self) -> String {
|
||||||
|
self.0.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<String> for Host {
|
||||||
|
fn from(s: String) -> Host {
|
||||||
|
Host::new(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<str> for Host {
|
||||||
|
fn as_ref(&self) -> &str {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for Host {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Queryable, Identifiable, Clone, AsChangeset)]
|
#[derive(Queryable, Identifiable, Clone, AsChangeset)]
|
||||||
#[changeset_options(treat_none_as_null = "true")]
|
#[changeset_options(treat_none_as_null = "true")]
|
||||||
pub struct Blog {
|
pub struct Blog {
|
||||||
@ -294,6 +332,24 @@ impl Blog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, 'r> FromRequest<'a, 'r> for Host {
|
||||||
|
type Error = ();
|
||||||
|
|
||||||
|
fn from_request(request: &'a Request<'r>) -> request::Outcome<Host, ()> {
|
||||||
|
request
|
||||||
|
.headers()
|
||||||
|
.get_one("Host")
|
||||||
|
.and_then(|x| {
|
||||||
|
if x != Instance::get_local().ok()?.public_domain {
|
||||||
|
Some(Host(x.to_string()))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.or_forward(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl IntoId for Blog {
|
impl IntoId for Blog {
|
||||||
fn into_id(self) -> Id {
|
fn into_id(self) -> Id {
|
||||||
Id::new(self.ap_url)
|
Id::new(self.ap_url)
|
||||||
|
Loading…
Reference in New Issue
Block a user