create & attach an AdHoc Fairing for dealing with Custom Domains
this rewrites the URL to /custom_domain/<url>
(we have no route handlers for this path yet)
Lots of help from @fdb-hiroshima & @BaptisteGelez in dealing with the
borrow checker — thank you 💜️
This commit is contained in:
parent
351c01f71c
commit
3a4c2f2cf9
@ -25,6 +25,7 @@ use posts::Post;
|
||||
use safe_string::SafeString;
|
||||
use schema::blogs;
|
||||
use search::Searcher;
|
||||
use std::fmt::{self, Display};
|
||||
use users::User;
|
||||
use {Connection, Error, PlumeRocket, Result};
|
||||
|
||||
@ -39,6 +40,12 @@ impl Host {
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Host {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", self.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<str> for Host {
|
||||
fn as_ref(&self) -> &str {
|
||||
&self.0
|
||||
|
14
src/main.rs
14
src/main.rs
@ -42,12 +42,14 @@ extern crate webfinger;
|
||||
use clap::App;
|
||||
use diesel::r2d2::ConnectionManager;
|
||||
use plume_models::{
|
||||
blogs::Host,
|
||||
db_conn::{DbPool, PragmaForeignKey},
|
||||
instance::Instance,
|
||||
migrations::IMPORTED_MIGRATIONS,
|
||||
search::{Searcher as UnmanagedSearcher, SearcherError},
|
||||
Connection, Error, CONFIG,
|
||||
};
|
||||
use rocket::{fairing::AdHoc, http::uri::Origin};
|
||||
use rocket_csrf::CsrfFairingBuilder;
|
||||
use scheduled_thread_pool::ScheduledThreadPool;
|
||||
use std::process::exit;
|
||||
@ -175,8 +177,13 @@ Then try to restart Plume
|
||||
println!("Please refer to the documentation to see how to configure it.");
|
||||
}
|
||||
|
||||
let custom_domains = plume_models::blogs::Blog::list_custom_domains(&dbpool.get().unwrap()).unwrap();
|
||||
dbg!(custom_domains);
|
||||
let custom_domain_fairing = AdHoc::on_request("Custom Blog Domains", |req, _data| {
|
||||
let host = req.guard::<Host>();
|
||||
if host.is_success() {
|
||||
let rewrite_uri = format!("/custom_domains/{}/{}", host.unwrap(), req.uri());
|
||||
req.set_uri(Origin::parse_owned(rewrite_uri).unwrap())
|
||||
}
|
||||
});
|
||||
|
||||
let rocket = rocket::custom(CONFIG.rocket.clone().unwrap())
|
||||
.mount(
|
||||
@ -317,7 +324,8 @@ Then try to restart Plume
|
||||
])
|
||||
.finalize()
|
||||
.expect("main: csrf fairing creation error"),
|
||||
);
|
||||
)
|
||||
.attach(custom_domain_fairing);
|
||||
|
||||
#[cfg(feature = "test")]
|
||||
let rocket = rocket.mount("/test", routes![test_routes::health,]);
|
||||
|
Loading…
Reference in New Issue
Block a user