Use more env vars for config
It will make it easier to test federation
This commit is contained in:
		
							parent
							
								
									9fdfb2b25e
								
							
						
					
					
						commit
						5f43f783b6
					
				
							
								
								
									
										2
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.env
									
									
									
									
									
								
							| @ -1 +1 @@ | ||||
| DATABASE_URL=postgres://plume:plume@localhost/plume | ||||
| DB_URL=postgres://plume:plume@localhost/plume | ||||
|  | ||||
							
								
								
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -808,6 +808,7 @@ dependencies = [ | ||||
|  "dotenv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "reqwest 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  | ||||
| @ -8,6 +8,7 @@ bcrypt = "0.2" | ||||
| dotenv = "*" | ||||
| heck = "0.3.0" | ||||
| hex = "0.3" | ||||
| lazy_static = "*" | ||||
| openssl = "0.10.6" | ||||
| reqwest = "0.8" | ||||
| rocket = "*" | ||||
|  | ||||
| @ -0,0 +1,2 @@ | ||||
| -- This file should undo anything in `up.sql` | ||||
| ALTER TABLE instances ADD COLUMN local_domain VARCHAR NOT NULL; | ||||
| @ -0,0 +1,2 @@ | ||||
| -- Your SQL goes here | ||||
| ALTER TABLE instances DROP COLUMN local_domain; | ||||
| @ -1,5 +1,4 @@ | ||||
| use diesel::PgConnection; | ||||
| use diesel::associations::Identifiable; | ||||
| use serde_json; | ||||
| 
 | ||||
| use activity_pub::activity::Activity; | ||||
|  | ||||
							
								
								
									
										15
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/main.rs
									
									
									
									
									
								
							| @ -9,6 +9,8 @@ extern crate hex; | ||||
| #[macro_use] | ||||
| extern crate diesel; | ||||
| extern crate dotenv; | ||||
| #[macro_use] | ||||
| extern crate lazy_static; | ||||
| extern crate openssl; | ||||
| extern crate reqwest; | ||||
| extern crate rocket; | ||||
| @ -33,15 +35,22 @@ mod schema; | ||||
| mod routes; | ||||
| mod utils; | ||||
| 
 | ||||
| lazy_static! { | ||||
|     pub static ref BASE_URL: String = env::var("BASE_URL") | ||||
|         .unwrap_or(format!("127.0.0.1:{}", env::var("ROCKET_PORT").unwrap_or(String::from("8000")))); | ||||
|     
 | ||||
|     pub static ref DB_URL: String = env::var("DB_URL") | ||||
|         .unwrap_or(format!("DATABASE_URL=postgres://plume:plume@localhost/{}", env::var("DB_TABLE").unwrap_or(String::from("plume")))); | ||||
| } | ||||
| 
 | ||||
| type PgPool = Pool<ConnectionManager<PgConnection>>; | ||||
| 
 | ||||
| /// Initializes a database pool.
 | ||||
| fn init_pool() -> PgPool { | ||||
|     dotenv().ok(); | ||||
| 
 | ||||
|     let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); | ||||
|     let manager = ConnectionManager::<PgConnection>::new(database_url); | ||||
|     Pool::new(manager).expect("db pool") | ||||
|     let manager = ConnectionManager::<PgConnection>::new(DB_URL.as_str()); | ||||
|     Pool::new(manager).expect("DB pool error") | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
|  | ||||
| @ -8,7 +8,6 @@ use schema::{instances, users}; | ||||
| #[derive(Identifiable, Queryable)] | ||||
| pub struct Instance { | ||||
|     pub id: i32, | ||||
|     pub local_domain: String, | ||||
|     pub public_domain: String, | ||||
|     pub name: String, | ||||
|     pub local: bool, | ||||
| @ -19,7 +18,6 @@ pub struct Instance { | ||||
| #[derive(Insertable)] | ||||
| #[table_name = "instances"] | ||||
| pub struct NewInstance { | ||||
|     pub local_domain: String, | ||||
|     pub public_domain: String, | ||||
|     pub name: String, | ||||
|     pub local: bool | ||||
| @ -44,10 +42,9 @@ impl Instance { | ||||
|         Instance::get_local(conn).unwrap().id | ||||
|     } | ||||
| 
 | ||||
|     pub fn insert<'a>(conn: &PgConnection, loc_dom: String, pub_dom: String, name: String, local: bool) -> Instance { | ||||
|     pub fn insert<'a>(conn: &PgConnection, pub_dom: String, name: String, local: bool) -> Instance { | ||||
|         diesel::insert_into(instances::table) | ||||
|             .values(NewInstance { | ||||
|                 local_domain: loc_dom, | ||||
|                 public_domain: pub_dom, | ||||
|                 name: name, | ||||
|                 local: local | ||||
|  | ||||
| @ -10,6 +10,7 @@ use rocket::outcome::IntoOutcome; | ||||
| use serde_json; | ||||
| use url::Url; | ||||
| 
 | ||||
| use BASE_URL; | ||||
| use activity_pub::activity::Activity; | ||||
| use activity_pub::actor::{ActorType, Actor}; | ||||
| use activity_pub::inbox::Inbox; | ||||
| @ -138,7 +139,7 @@ impl User { | ||||
|         let instance = match Instance::get_by_domain(conn, inst.clone()) { | ||||
|             Some(instance) => instance, | ||||
|             None => { | ||||
|                 Instance::insert(conn, String::from(""), inst.clone(), inst.clone(), false) | ||||
|                 Instance::insert(conn, inst.clone(), inst.clone(), false) | ||||
|             } | ||||
|         }; | ||||
|         User::insert(conn, NewUser { | ||||
| @ -249,7 +250,7 @@ impl Actor for User { | ||||
|             None => { | ||||
|                 // The requested user was not in the DB
 | ||||
|                 // We try to fetch it if it is remote
 | ||||
|                 if Url::parse(url.as_ref()).unwrap().host_str().unwrap() != Instance::get_local(conn).unwrap().public_domain { | ||||
|                 if Url::parse(url.as_ref()).unwrap().host_str().unwrap() != BASE_URL.as_str() { | ||||
|                     Some(User::fetch_from_url(conn, url).unwrap()) | ||||
|                 } else { | ||||
|                     None | ||||
|  | ||||
| @ -36,7 +36,6 @@ struct NewBlogForm { | ||||
| 
 | ||||
| #[post("/blogs/new", data = "<data>")] | ||||
| fn create(conn: DbConn, data: Form<NewBlogForm>, user: User) -> Redirect { | ||||
|     let inst = Instance::get_local(&*conn).unwrap(); | ||||
|     let form = data.get(); | ||||
|     let slug = utils::make_actor_id(form.title.to_string()); | ||||
| 
 | ||||
| @ -44,7 +43,7 @@ fn create(conn: DbConn, data: Form<NewBlogForm>, user: User) -> Redirect { | ||||
|         slug.to_string(), | ||||
|         form.title.to_string(), | ||||
|         String::from(""), | ||||
|         inst.id | ||||
|         Instance::local_id(&*conn) | ||||
|     )); | ||||
|     blog.update_boxes(&*conn); | ||||
| 
 | ||||
|  | ||||
| @ -3,6 +3,7 @@ use rocket::response::Redirect; | ||||
| use rocket_contrib::Template; | ||||
| use std::collections::HashMap; | ||||
| 
 | ||||
| use BASE_URL; | ||||
| use db_conn::DbConn; | ||||
| use models::instance::*; | ||||
| 
 | ||||
| @ -25,8 +26,6 @@ fn configure() -> Template { | ||||
| 
 | ||||
| #[derive(FromForm)] | ||||
| struct NewInstanceForm { | ||||
|     local_domain: String, | ||||
|     public_domain: String, | ||||
|     name: String | ||||
| } | ||||
| 
 | ||||
| @ -35,8 +34,7 @@ fn post_config(conn: DbConn, data: Form<NewInstanceForm>) -> Redirect { | ||||
|     let form = data.get(); | ||||
|     let inst = Instance::insert( | ||||
|         &*conn, | ||||
|         form.local_domain.to_string(), | ||||
|         form.public_domain.to_string(), 
 | ||||
|         BASE_URL.as_str().to_string(), | ||||
|         form.name.to_string(), | ||||
|         true); | ||||
|     if inst.has_admin(&*conn) { | ||||
|  | ||||
| @ -1,21 +1,20 @@ | ||||
| use rocket::http::ContentType; | ||||
| use rocket::response::Content; | ||||
| 
 | ||||
| use BASE_URL; | ||||
| use activity_pub::webfinger::Webfinger; | ||||
| use db_conn::DbConn; | ||||
| use models::blogs::Blog; | ||||
| use models::instance::Instance; | ||||
| use models::users::User; | ||||
| 
 | ||||
| #[get("/.well-known/host-meta", format = "application/xml")] | ||||
| fn host_meta(conn: DbConn) -> String { | ||||
|     let domain = Instance::get_local(&*conn).unwrap().public_domain; | ||||
| fn host_meta() -> String { | ||||
|     format!(r#" | ||||
|     <?xml version="1.0"?> | ||||
|     <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> | ||||
|         <Link rel="lrdd" type="application/xrd+xml" template="https://{domain}/.well-known/webfinger?resource={{uri}}"/> | ||||
|     </XRD> | ||||
|     "#, domain = domain)
 | ||||
|     "#, domain = BASE_URL.as_str())
 | ||||
| } | ||||
| 
 | ||||
| #[derive(FromForm)] | ||||
| @ -34,9 +33,7 @@ fn webfinger(query: WebfingerQuery, conn: DbConn) -> Content<Result<String, &'st | ||||
|         let user = parsed_res.next().unwrap(); | ||||
|         let res_dom = parsed_res.next().unwrap(); | ||||
| 
 | ||||
|         let domain = Instance::get_local(&*conn).unwrap().public_domain; | ||||
| 
 | ||||
|         if res_dom == domain { | ||||
|         if res_dom == BASE_URL.as_str() { | ||||
|             let res = match User::find_local(&*conn, String::from(user)) { | ||||
|                 Some(usr) => Ok(usr.webfinger(&*conn)), | ||||
|                 None => match Blog::find_by_actor_id(&*conn, String::from(user)) { | ||||
|  | ||||
| @ -32,7 +32,6 @@ table! { | ||||
| table! { | ||||
|     instances (id) { | ||||
|         id -> Int4, | ||||
|         local_domain -> Varchar, | ||||
|         public_domain -> Varchar, | ||||
|         name -> Varchar, | ||||
|         local -> Bool, | ||||
|  | ||||
| @ -7,12 +7,6 @@ | ||||
|     <body> | ||||
|         <h1>Configure your instance</h1> | ||||
|         <form method="post"> | ||||
|             <label for="local_domain">Internal domain</label> | ||||
|             <input name="local_domain"> | ||||
| 
 | ||||
|             <label for="public_domain">Public domain</label> | ||||
|             <input name="public_domain"> | ||||
| 
 | ||||
|             <label for="name">Name</label> | ||||
|             <input name="name"> | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user