diff --git a/fixtures/notes.sql b/fixtures/notes.sql index b7583bc..ca30b51 100644 --- a/fixtures/notes.sql +++ b/fixtures/notes.sql @@ -24,21 +24,21 @@ INSERT INTO users ( mfa_enabled, webauthn_enabled, totp_secret, totp_last_ticket, created_at, premium_since, verified, disabled, deleted, email, flags, public_flags, purchased_flags, premium_usage_flags, rights, data, fingerprints, extended_settings, - settings_index, relevant_events + settings_index ) VALUES (7250861145186111490, 'john_doe_notes', '1296', 'avatar1.png', 16777215, 'banner1.png', NULL, 'he/him', '+1234567890', true, false, true, 1, false, 'This is my bio', false, true, true, true, 'secret123', 'ticket456', '2024-01-01 12:00:00', '2024-01-02 12:00:00', true, false, false, 'john_doe_notes@example.com', 100, 10, - 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 7251169922837909504, - '[]'), + 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 7251169922837909504 + ), (7250861145186111491, 'jane_smith_notes', '5678', 'avatar2.png', 123456, NULL, NULL, 'she/her', NULL, false, true, false, 0, false, '', false, false, false, false, NULL, NULL, '2024-02-01 15:30:00', NULL, false, false, false, 'jane_smith_notes@example.com', 50, 5, - 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 7251169922837909505, - '[]'); + 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 7251169922837909505 + ); COMMIT; INSERT INTO notes ( diff --git a/fixtures/private_channels.sql b/fixtures/private_channels.sql index bcb7462..fa80737 100644 --- a/fixtures/private_channels.sql +++ b/fixtures/private_channels.sql @@ -25,21 +25,21 @@ INSERT INTO users ( mfa_enabled, webauthn_enabled, totp_secret, totp_last_ticket, created_at, premium_since, verified, disabled, deleted, email, flags, public_flags, purchased_flags, premium_usage_flags, rights, data, fingerprints, extended_settings, - settings_index, relevant_events + settings_index ) VALUES (7250861145186111490, 'john_doe_private_channels', '1296', 'avatar1.png', 16777215, 'banner1.png', NULL, 'he/him', '+1234567890', true, false, true, 1, false, 'This is my bio', false, true, true, true, 'secret123', 'ticket456', '2024-01-01 12:00:00', '2024-01-02 12:00:00', true, false, false, 'john_doe_private_channels@example.com', 100, 10, - 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 7250861145186111495, - '[]'), + 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 7250861145186111495 + ), (7250861145186111491, 'jane_smith_private_channels', '5678', 'avatar2.png', 123456, NULL, NULL, 'she/her', NULL, false, true, false, 0, false, '', false, false, false, false, NULL, NULL, '2024-02-01 15:30:00', NULL, false, false, false, 'jane_smith_private_channels@example.com', 50, 5, - 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 7250861145186111496, - '[]'); + 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 7250861145186111496 + ); COMMIT; INSERT INTO channels ( diff --git a/fixtures/users.sql b/fixtures/users.sql index 1e0c4c6..249a97e 100644 --- a/fixtures/users.sql +++ b/fixtures/users.sql @@ -36,37 +36,37 @@ INSERT INTO users ( mfa_enabled, webauthn_enabled, totp_secret, totp_last_ticket, created_at, premium_since, verified, disabled, deleted, email, flags, public_flags, purchased_flags, premium_usage_flags, rights, data, fingerprints, extended_settings, - settings_index, relevant_events + settings_index ) VALUES (7248639845155737600, 'john_doe', '1296', 'avatar1.png', 16777215, 'banner1.png', NULL, 'he/him', '+1234567890', true, false, true, 1, false, 'This is my bio', false, true, true, true, 'secret123', 'ticket456', '2024-01-01 12:00:00', '2024-01-02 12:00:00', true, false, false, 'john_doe@example.com', 100, 10, - 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 1, - '[]'), + 5, 1, 100, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint1', '{"setting": "value"}', 1 + ), (7248639891561517057, 'jane_smith', '5678', 'avatar2.png', 123456, NULL, NULL, 'she/her', NULL, false, true, false, 0, false, '', false, false, false, false, NULL, NULL, '2024-02-01 15:30:00', NULL, false, false, false, 'jane_smith@example.com', 50, 5, - 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 2, - '[]'), + 0, 0, 50, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint2', '{"setting": "another_value"}', 2 + ), (7248640296244744192, 'alice_malice', '9876', 'avatar3.png', 987654, 'banner3.png', NULL, 'they/them', '+1230987654', true, true, false, 0, false, 'Life is an adventure', false, false, true, false, 'secret789', 'ticket123', '2024-03-01 08:45:00', NULL, false, false, false, 'alice@example.com', 200, 20, - 2, 1, 150, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint3', '{"setting3": "value3"}', 3, - '[]'), + 2, 1, 150, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint3', '{"setting3": "value3"}', 3 + ), (7248640311927246848, 'bob_the_woz', '1122', 'avatar4.png', 556677, NULL, NULL, 'he/him', NULL, true, false, true, 1, false, 'Building the future', false, true, false, true, 'secret456', 'ticket789', '2024-03-15 14:30:00', '2024-04-01 14:30:00', true, false, false, 'bob@example.com', 250, 25, - 3, 2, 200, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint4', '{"setting4": "value4"}', 4, - '[]'), + 3, 2, 200, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint4', '{"setting4": "value4"}', 4 + ), (7248640327265816576, 'xenia', '3344', 'avatar5.png', NULL, 'banner5.png', NULL, 'he/him', '+4567890123', false, true, false, 0, false, 'Chocolate is life', false, false, false, true, 'secret555', 'ticket987', '2024-04-10 10:00:00', NULL, false, false, false, 'charlie@example.com', 180, 15, - 0, 0, 180, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint5', '{"setting5": "value5"}', 5, - '[]'); + 0, 0, 180, '{"hash": "$2b$14$AbcNYTh5GcOYaB4v4P7OWeGW0hQkd/ysvmY4fGyIA/tyEnK0chGNu", "valid_tokens_since": "2024-10-07T20:22:06.162070616Z"}', 'fingerprint5', '{"setting5": "value5"}', 5 + ); COMMIT; \ No newline at end of file diff --git a/migrations/20231007011757_users.sql b/migrations/20231007011757_users.sql index ce97ff6..92a1daf 100644 --- a/migrations/20231007011757_users.sql +++ b/migrations/20231007011757_users.sql @@ -35,7 +35,6 @@ create table if not exists users ( fingerprints text not null, extended_settings json not null, settings_index numeric(20, 0) null constraint chk_settings_index_range check (settings_index >= 0 AND settings_index <= 18446744073709551615), - relevant_events json not null default '[]', constraint users_settings_index_uindex unique (settings_index), constraint users_user_settings_index_fk foreign key (settings_index) references user_settings (index), constraint check_theme_colors_elements check ( diff --git a/src/api/mod.rs b/src/api/mod.rs index 5d66388..a69ca34 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -6,12 +6,14 @@ static DEFAULT_API_BIND: &str = "0.0.0.0:3001"; +use poem::middleware::Cors; use poem::{ listener::TcpListener, middleware::{NormalizePath, TrailingSlash}, web::Json, EndpointExt, IntoResponse, Route, Server, }; +use reqwest::Method; use serde_json::json; use sqlx::PgPool; @@ -31,6 +33,13 @@ use crate::{ mod middleware; mod routes; +lazy_static::lazy_static! { + pub static ref BIND_API: String = std::env::var("API_BIND").unwrap_or_else(|_| { + log::warn!(target: "symfonia::db", "You did not specify API_BIND environment variable. Defaulting to '{DEFAULT_API_BIND}'."); + DEFAULT_API_BIND.to_string() + }); +} + pub async fn start_api( db: PgPool, connected_users: ConnectedUsers, @@ -86,25 +95,30 @@ pub async fn start_api( .data(config) .data(connected_users) .with(NormalizePath::new(TrailingSlash::Trim)) + .with(Cors::new().allow_methods(&[ + Method::CONNECT, + Method::DELETE, + Method::GET, + Method::HEAD, + Method::OPTIONS, + Method::PATCH, + Method::POST, + Method::PUT, + Method::TRACE, + ])) .catch_all_error(custom_error); - let bind = &std::env::var("API_BIND").unwrap_or_else(|_| { - log::warn!(target: "symfonia::db", "You did not specify API_BIND environment variable. Defaulting to '{DEFAULT_API_BIND}'."); - DEFAULT_API_BIND.to_string() - }); - let bind_clone = bind.clone(); - log::info!(target: "symfonia::api", "Starting HTTP Server"); tokio::task::spawn(async move { - Server::new(TcpListener::bind(bind_clone)) + Server::new(TcpListener::bind(BIND_API.to_string())) .run(v9_api) .await .expect("Failed to start HTTP server"); log::info!(target: "symfonia::api", "HTTP Server stopped"); }); - log::info!(target: "symfonia::api", "HTTP Server listening on {bind}"); + log::info!(target: "symfonia::api", "HTTP Server listening on {}", BIND_API.as_str()); Ok(()) } diff --git a/src/api/routes/policies/instance/domain.rs b/src/api/routes/policies/instance/domain.rs index 477af08..4b6acf6 100644 --- a/src/api/routes/policies/instance/domain.rs +++ b/src/api/routes/policies/instance/domain.rs @@ -18,26 +18,28 @@ pub async fn domain( Data(db): Data<&sqlx::PgPool>, Data(cfg): Data<&Config>, ) -> Result { - let cdn = if let Some(endpoint) = &cfg.cdn.endpoint_public { - endpoint.to_owned() - } else if let Ok(endpoint) = std::env::var("CDN") { + let cdn = if let Ok(endpoint) = std::env::var("CDN") { endpoint + } else if let Some(endpoint) = &cfg.cdn.endpoint_public { + endpoint.to_owned() } else { - "http://localhost:3001".to_string() + "http://localhost:3002".to_string() }; - let gateway = if let Some(endpoint) = &cfg.gateway.endpoint_public { - endpoint.to_owned() - } else if let Ok(endpoint) = std::env::var("GATEWAY") { + let gateway = if let Ok(endpoint) = std::env::var("GATEWAY") { endpoint + } else if let Some(endpoint) = &cfg.gateway.endpoint_public { + endpoint.to_owned() } else { - "ws://localhost:3001".to_string() + "http://localhost:3003".to_string() }; - let api = if let Some(endpoint) = &cfg.api.endpoint_public { + let api = if let Ok(endpoint) = std::env::var("API") { + endpoint + } else if let Some(endpoint) = &cfg.api.endpoint_public { endpoint.to_owned() } else { - "http://localhost:3001/api".to_string() + "http://localhost:3001".to_string() }; Ok(Json(json!({ diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index d8b1732..319f995 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -42,7 +42,6 @@ pub struct User { #[sqlx(skip)] #[serde(skip)] pub publisher: SharedEventPublisher, - pub relevant_events: sqlx::types::Json>, } impl Deref for User { diff --git a/src/logo.rs b/src/logo.rs new file mode 100644 index 0000000..20a2487 --- /dev/null +++ b/src/logo.rs @@ -0,0 +1,29 @@ +pub(super) fn print_logo() { + let logo = "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%***#%%%%%%%%%%%%%%%%%#**%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%#----=++**#######*++=----#%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%#*+=--------------=++*%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%#===*#%%%%%%##***++****#%%%%%%#*===*%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%=-----=+*#%%%%%%%%%%%%%%%%#*+=-----=%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%*=--------=++**####***+==-------=*#%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%#*+=----------------------=+*#%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%#=---+*#%%%%%%%%#*+==----------==+**#%%%%%%%%*+=--=#%%%%%%%%% +%%%%%%%%%--------=*#%%%%%%%%%%%%#######%%%%%%%%%%%#*+--------%%%%%%%%% +%%%%%%%%%+----------=+*##%%%%%%%%%%%%%%%%%%%%##*+=----------+%%%%%%%%% +%%%%%%%%%%#*=------------==+**##########**++=------------=*#%%%%%%%%%% +%%%%%%%%%%%%%#*+=------------------------------------=+*#%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%#*+=----------------------------=+*#%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%#*++=----------------=++*#%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##********###%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +"; + for line in logo.lines() { + log::info!(target: "symfonia", "{line}") + } +} diff --git a/src/main.rs b/src/main.rs index b56b2d2..d5b092e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,7 @@ use log4rs::{ filter::Filter, Config, }; +use logo::print_logo; use parking_lot::RwLock; use pubserve::Publisher; use tokio::sync::Mutex; @@ -40,6 +41,7 @@ mod cdn; mod database; mod errors; mod gateway; +mod logo; mod util; pub type SharedEventPublisher = Arc>>; @@ -179,6 +181,7 @@ async fn main() { let _handle = log4rs::init_config(config).unwrap(); log::info!(target: "symfonia", "Starting up Symfonia"); + print_logo(); match loglevel { LevelFilter::Debug | LevelFilter::Trace => {