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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user