diff --git a/Cargo.lock b/Cargo.lock index 4ace77f..4df9730 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1003,12 +1003,13 @@ version = "0.1.0" dependencies = [ "dotenvy", "log", - "pronouns", + "pronounslib", "rocket", "simple_logger", "sqlx", "time", "tokio", + "urlencoding", ] [[package]] @@ -1034,7 +1035,7 @@ dependencies = [ ] [[package]] -name = "pronouns" +name = "pronounslib" version = "0.1.0" dependencies = [ "serde", @@ -1971,6 +1972,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "valuable" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index fd18838..4494d47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] members = [ - "pronouns", + "pronounslib", "prns", ] diff --git a/prns/Cargo.toml b/prns/Cargo.toml index 142b315..e03a2e0 100644 --- a/prns/Cargo.toml +++ b/prns/Cargo.toml @@ -14,3 +14,4 @@ tokio = { version = "1.27.0", features = ["full"] } dotenvy = "0.15.7" simple_logger = "4.2.0" log = "0.4.19" +urlencoding = "2.1.3" diff --git a/prns/src/main.rs b/prns/src/main.rs index cf8ef55..b1f8303 100644 --- a/prns/src/main.rs +++ b/prns/src/main.rs @@ -1,8 +1,11 @@ -use pronouns::models::{member::Member, user::User}; +pub mod models; + +use crate::models::{Member, User}; use rocket::{response::Redirect, Config, State}; use simple_logger; use sqlx::{postgres::PgPoolOptions, Pool, Postgres}; use std::{env, path::PathBuf}; +use urlencoding::encode; #[macro_use] extern crate rocket; @@ -25,7 +28,7 @@ async fn redirect(state: &State, path: PathBuf) -> Redirect { .await .map_or_else( |_| Redirect::temporary(state.base_url.clone()), - |u| Redirect::temporary(format!("{}/@{}", state.base_url, u.username)), + |u| Redirect::temporary(format!("{}/@{}", state.base_url, encode(&u.username))), ), 6 => { let member = match sqlx::query_as!( @@ -52,7 +55,7 @@ async fn redirect(state: &State, path: PathBuf) -> Redirect { |u| { Redirect::temporary(format!( "{}/@{}/{}", - state.base_url, u.username, member.name + state.base_url, encode(&u.username), encode(&member.name) )) }, ) diff --git a/prns/src/models.rs b/prns/src/models.rs new file mode 100644 index 0000000..e0bf2d7 --- /dev/null +++ b/prns/src/models.rs @@ -0,0 +1,14 @@ +#[derive(Debug)] +pub struct User { + pub id: String, + pub sid: String, + pub username: String, +} + +#[derive(Debug)] +pub struct Member { + pub id: String, + pub user_id: String, + pub sid: String, + pub name: String, +}