]> Untitled Git - lemmy.git/commitdiff
Externalizing JWT token
authorDessalines <tyhou13@gmx.com>
Thu, 2 May 2019 16:55:29 +0000 (09:55 -0700)
committerDessalines <tyhou13@gmx.com>
Thu, 2 May 2019 16:55:29 +0000 (09:55 -0700)
docker-compose.yml
install.sh
server/src/actions/user.rs
server/src/apub.rs
server/src/lib.rs
server/src/websocket_server/server.rs
ui/src/components/navbar.tsx

index 03c72881737235488d90a47a1114199b472ac40f..1f86c53122a3e2bb88cc9cf7b262390806c8d77f 100644 (file)
@@ -22,6 +22,8 @@ services:
     environment:
       LEMMY_FRONT_END_DIR: /app/dist
       DATABASE_URL: postgres://rrr:rrr@db:5432/rrr
+      JWT_SECRET: changeme
+      HOSTNAME: rrr
     restart: always
     depends_on: 
       db: 
index 071acc6fb497b707f265a2689495d6cf9df31cda..80d3277a10d58c072ae035ffbe3e6a119c04b4cb 100755 (executable)
@@ -2,6 +2,8 @@
 set -e
 
 export DATABASE_URL=postgres://rrr:rrr@localhost/rrr
+export JWT_SECRET=changeme
+export HOSTNAME=rrr
 
 cd ui
 yarn
index 58cfd89d7efe17cde36f6510386608e37abf903a..9c9e0a52ef1b21064c8268b45e03f25524e08e51 100644 (file)
@@ -3,7 +3,7 @@ use diesel::*;
 use diesel::result::Error;
 use schema::user_::dsl::*;
 use serde::{Serialize, Deserialize};
-use {Crud,is_email_regex};
+use {Crud,is_email_regex, Settings};
 use jsonwebtoken::{encode, decode, Header, Validation, TokenData};
 use bcrypt::{DEFAULT_COST, hash};
 
@@ -86,7 +86,7 @@ impl Claims {
       validate_exp: false,
       ..Validation::default()
     };
-    decode::<Claims>(&jwt, "secret".as_ref(), &v)
+    decode::<Claims>(&jwt, Settings::get().jwt_secret.as_ref(), &v)
   }
 }
 
@@ -96,9 +96,9 @@ impl User_ {
     let my_claims = Claims {
       id: self.id,
       username: self.name.to_owned(),
-      iss: "rrf".to_string() // TODO this should come from config file
+      iss: self.fedi_name.to_owned(),
     };
-    encode(&Header::default(), &my_claims, "secret".as_ref()).unwrap()
+    encode(&Header::default(), &my_claims, Settings::get().jwt_secret.as_ref()).unwrap()
   }
 
   pub fn find_by_email_or_username(conn: &PgConnection, username_or_email: &str) -> Result<Self, Error> {
index a9a417e2053ad665a62cfb3e151c4a02de8827ee..4fc0ba3343f944f44a8a075a0b682014584cf2aa 100644 (file)
@@ -50,7 +50,7 @@ mod tests {
     };
 
     let person = expected_user.person();
-    assert_eq!("http://0.0.0.0/api/v1/user/thom", person.object_props.id_string().unwrap());
+    assert_eq!("rrr/api/v1/user/thom", person.object_props.id_string().unwrap());
     let json = serde_json::to_string_pretty(&person).unwrap();
     println!("{}", json);
 
index d8d7f152df053090767e3de2e9829e7eac3b3da3..71b72ac3241a454d5f64d4322140f0f7fa0fa702 100644 (file)
@@ -75,7 +75,8 @@ pub fn establish_connection() -> PgConnection {
 
 pub struct Settings {
   db_url: String,
-  hostname: String
+  hostname: String,
+  jwt_secret: String,
 }
 
 impl Settings {
@@ -84,7 +85,8 @@ impl Settings {
     Settings {
       db_url: env::var("DATABASE_URL")
         .expect("DATABASE_URL must be set"),
-        hostname: env::var("HOSTNAME").unwrap_or("http://0.0.0.0".to_string())
+        hostname: env::var("HOSTNAME").unwrap_or("rrr".to_string()),
+        jwt_secret: env::var("JWT_SECRET").unwrap_or("changeme".to_string()),
     }
   }
   fn api_endpoint(&self) -> String {
@@ -143,7 +145,7 @@ mod tests {
   use {Settings, is_email_regex, remove_slurs, has_slurs, fuzzy_search};
   #[test]
   fn test_api() {
-    assert_eq!(Settings::get().api_endpoint(), "http://0.0.0.0/api/v1");
+    assert_eq!(Settings::get().api_endpoint(), "rrr/api/v1");
   }
 
   #[test] fn test_email() {
index aaeae132b295aeb2e84e0824a3e4f02eab9af270..82c4007d7aca7eba107c884aaaecfdb2bd6df4ba 100644 (file)
@@ -13,7 +13,7 @@ use diesel::PgConnection;
 use failure::Error;
 use std::time::{SystemTime};
 
-use {Crud, Joinable, Likeable, Followable, Bannable, Saveable, establish_connection, naive_now, naive_from_unix, SortType, SearchType, has_slurs, remove_slurs};
+use {Crud, Joinable, Likeable, Followable, Bannable, Saveable, establish_connection, naive_now, naive_from_unix, SortType, SearchType, has_slurs, remove_slurs, Settings};
 use actions::community::*;
 use actions::user::*;
 use actions::post::*;
@@ -902,7 +902,7 @@ impl Perform for Register {
     // Register the new user
     let user_form = UserForm {
       name: self.username.to_owned(),
-      fedi_name: "rrf".into(),
+      fedi_name: Settings::get().hostname.into(),
       email: self.email.to_owned(),
       password_encrypted: self.password.to_owned(),
       preferred_username: None,
index 6861461c160f8ad7a419924eb36d5bcc3360b12c..844711457f68aca68a82856ea043768b402500b3 100644 (file)
@@ -144,6 +144,10 @@ export class Navbar extends Component<any, NavbarState> {
   parseMessage(msg: any) {
     let op: UserOperation = msgOp(msg);
     if (msg.error) {
+      if (msg.error == "Not logged in.") {
+        UserService.Instance.logout();
+        location.reload();
+      }
       return;
     } else if (op == UserOperation.GetReplies) {
       let res: GetRepliesResponse = msg;