diff --git a/migrations/2021-03-26-164945_create_users/up.sql b/migrations/2021-03-26-164945_create_users/up.sql index de90533..25cc0c8 100644 --- a/migrations/2021-03-26-164945_create_users/up.sql +++ b/migrations/2021-03-26-164945_create_users/up.sql @@ -1,7 +1,7 @@ -- Your SQL goes here CREATE TABLE localuser ( `user_id` VARCHAR NOT NULL PRIMARY KEY, - `username` VARCHAR NOT NULL UNIQUE, + `email` VARCHAR NOT NULL UNIQUE, `password` VARCHAR NOT NULL, `role` TEXT CHECK(role IN ('admin', 'zoneadmin')) NOT NULL, -- note: migrate to postgres so enum are actually a thing FOREIGN KEY(user_id) REFERENCES user(id) diff --git a/src/cli/user.rs b/src/cli/user.rs index 7eb4f4c..e72248c 100644 --- a/src/cli/user.rs +++ b/src/cli/user.rs @@ -17,8 +17,6 @@ pub enum UserCommand { #[derive(Parser)] pub struct AddUserCommand { - #[clap(long = "--name", short = 'n')] - pub name: String, #[clap(long = "--email", short = 'e')] pub email: String, #[clap(long = "--is-admin", short = 'a')] @@ -39,7 +37,6 @@ impl NomiloCommand for UserCommand { impl NomiloCommand for AddUserCommand { fn run(self, figment: Figment, _app_config: Config) { let res = LocalUser::create_user(&get_db_conn(&figment), CreateUserRequest { - username: self.name, email: self.email, role: Some(if self.is_admin { Role::Admin } else { Role::ZoneAdmin }), password: self.password.unwrap(), diff --git a/src/controllers.rs b/src/controllers.rs index 807c446..6635298 100644 --- a/src/controllers.rs +++ b/src/controllers.rs @@ -17,7 +17,7 @@ pub async fn do_login( let session = conn.run(move |c| { let user_info = models::LocalUser::get_user_by_creds( c, - &auth_request.username, + &auth_request.email, &auth_request.password )?; diff --git a/src/models/session.rs b/src/models/session.rs index 553035e..f87b712 100644 --- a/src/models/session.rs +++ b/src/models/session.rs @@ -22,7 +22,7 @@ pub const COOKIE_NAME: &str = "session_id"; #[derive(Debug, Deserialize, FromForm)] pub struct AuthTokenRequest { - pub username: String, + pub email: String, pub password: String, } diff --git a/src/models/user.rs b/src/models/user.rs index 54329e6..277f416 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -40,7 +40,7 @@ pub struct User { #[primary_key(user_id)] pub struct LocalUser { pub user_id: String, - pub username: String, + pub email: String, pub password: String, pub role: Role, } @@ -55,7 +55,6 @@ pub struct UserZone { #[derive(Debug, Deserialize)] pub struct CreateUserRequest { - pub username: String, pub password: String, pub email: String, pub role: Option @@ -159,7 +158,7 @@ impl LocalUser { let new_localuser = LocalUser { user_id: new_user_id, - username: user_request.username.clone(), + email: user_request.email.clone(), password: LocalUser::hash_password(&user_request.password), role: if let Some(user_role) = user_request.role { user_role } else { Role::ZoneAdmin }, }; @@ -167,7 +166,7 @@ impl LocalUser { let res = UserInfo { id: new_user.id.clone(), role: new_localuser.role.clone(), - username: new_localuser.username.clone(), + username: new_localuser.email.clone(), }; conn.immediate_transaction(|| -> diesel::QueryResult<()> { @@ -190,7 +189,7 @@ impl LocalUser { pub fn get_user_by_creds( conn: &diesel::SqliteConnection, - request_username: &str, + request_email: &str, request_password: &str ) -> Result { @@ -198,7 +197,7 @@ impl LocalUser { use crate::schema::user::dsl::*; let (client_user, client_localuser): (User, LocalUser) = user.inner_join(localuser) - .filter(username.eq(request_username)) + .filter(email.eq(request_email)) .get_result(conn) .map_err(|e| match e { DieselError::NotFound => UserError::BadCreds, @@ -212,7 +211,7 @@ impl LocalUser { Ok(UserInfo { id: client_user.id, role: client_localuser.role, - username: client_localuser.username, + username: client_localuser.email, }) } @@ -231,7 +230,7 @@ impl LocalUser { Ok(UserInfo { id: client_user.id, role: client_localuser.role, - username: client_localuser.username, + username: client_localuser.email, }) } } diff --git a/src/schema.rs b/src/schema.rs index e6a0109..4947cba 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -4,7 +4,7 @@ table! { localuser (user_id) { user_id -> Text, - username -> Text, + email -> Text, password -> Text, role -> RoleMapping, }