feat: start implementing device name generation in the backend
This commit is contained in:
parent
3647086adb
commit
8656115dc9
7 changed files with 1034 additions and 22 deletions
|
@ -60,5 +60,6 @@ regex = "1.11"
|
|||
random-string = "1.1"
|
||||
lettre = { version = "0.11", features = ["tokio1", "tokio1-native-tls"] }
|
||||
chrono = { version = "0.4.41", features = ["serde"] }
|
||||
rand = "0.9.1"
|
||||
|
||||
|
||||
|
|
|
@ -7,10 +7,7 @@ use diesel_async::RunQueryDsl;
|
|||
use serde::Deserialize;
|
||||
|
||||
use crate::{
|
||||
Data,
|
||||
error::Error,
|
||||
schema::*,
|
||||
utils::{PASSWORD_REGEX, generate_token, new_refresh_token_cookie, user_uuid_from_identifier},
|
||||
error::Error, schema::*, utils::{generate_token, new_refresh_token_cookie, user_uuid_from_identifier, PASSWORD_REGEX}, generate_device_name::generate_device_name, Data
|
||||
};
|
||||
|
||||
use super::Response;
|
||||
|
@ -19,7 +16,6 @@ use super::Response;
|
|||
struct LoginInformation {
|
||||
username: String,
|
||||
password: String,
|
||||
device_name: String,
|
||||
}
|
||||
|
||||
#[post("/login")]
|
||||
|
@ -63,12 +59,14 @@ pub async fn response(
|
|||
|
||||
use refresh_tokens::dsl as rdsl;
|
||||
|
||||
let device_name = generate_device_name();
|
||||
|
||||
insert_into(refresh_tokens::table)
|
||||
.values((
|
||||
rdsl::token.eq(&refresh_token),
|
||||
rdsl::uuid.eq(uuid),
|
||||
rdsl::created_at.eq(current_time),
|
||||
rdsl::device_name.eq(&login_information.device_name),
|
||||
rdsl::device_name.eq(&device_name),
|
||||
))
|
||||
.execute(&mut conn)
|
||||
.await?;
|
||||
|
@ -87,5 +85,5 @@ pub async fn response(
|
|||
|
||||
Ok(HttpResponse::Ok()
|
||||
.cookie(new_refresh_token_cookie(&data.config, refresh_token))
|
||||
.json(Response { access_token }))
|
||||
.json(Response { access_token, device_name }))
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ mod verify_email;
|
|||
#[derive(Serialize)]
|
||||
struct Response {
|
||||
access_token: String,
|
||||
device_name: String,
|
||||
}
|
||||
|
||||
pub fn web() -> Scope {
|
||||
|
|
|
@ -77,6 +77,15 @@ pub async fn res(req: HttpRequest, data: web::Data<Data>) -> Result<HttpResponse
|
|||
|
||||
let access_token = generate_token::<16>()?;
|
||||
|
||||
let device_name: String;
|
||||
|
||||
// fix me tomorrow
|
||||
// let devices: Vec<Device> = dsl::refresh_tokens
|
||||
// .filter(dsl::uuid.eq(uuid))
|
||||
// .select(Device::as_select())
|
||||
// .get_results(&mut conn)
|
||||
// .await?;
|
||||
|
||||
update(access_tokens::table)
|
||||
.filter(dsl::refresh_token.eq(&refresh_token))
|
||||
.set((
|
||||
|
@ -88,7 +97,7 @@ pub async fn res(req: HttpRequest, data: web::Data<Data>) -> Result<HttpResponse
|
|||
|
||||
return Ok(HttpResponse::Ok()
|
||||
.cookie(new_refresh_token_cookie(&data.config, refresh_token))
|
||||
.json(Response { access_token }));
|
||||
.json(Response { access_token, device_name }));
|
||||
}
|
||||
|
||||
refresh_token_cookie.make_removal();
|
||||
|
|
|
@ -12,17 +12,13 @@ use uuid::Uuid;
|
|||
|
||||
use super::Response;
|
||||
use crate::{
|
||||
Data,
|
||||
error::Error,
|
||||
objects::Member,
|
||||
schema::{
|
||||
error::Error, objects::Member, schema::{
|
||||
access_tokens::{self, dsl as adsl},
|
||||
refresh_tokens::{self, dsl as rdsl},
|
||||
users::{self, dsl as udsl},
|
||||
},
|
||||
utils::{
|
||||
EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX, generate_token, new_refresh_token_cookie,
|
||||
},
|
||||
}, utils::{
|
||||
generate_token, new_refresh_token_cookie, EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX
|
||||
}, generate_device_name::generate_device_name, Data
|
||||
};
|
||||
|
||||
#[derive(Deserialize)]
|
||||
|
@ -30,7 +26,6 @@ struct AccountInformation {
|
|||
identifier: String,
|
||||
email: String,
|
||||
password: String,
|
||||
device_name: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
|
@ -125,12 +120,14 @@ pub async fn res(
|
|||
|
||||
let current_time = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64;
|
||||
|
||||
let device_name = generate_device_name();
|
||||
|
||||
insert_into(refresh_tokens::table)
|
||||
.values((
|
||||
rdsl::token.eq(&refresh_token),
|
||||
rdsl::uuid.eq(uuid),
|
||||
.values((
|
||||
rdsl::token.eq(&refresh_token),
|
||||
rdsl::uuid.eq(uuid),
|
||||
rdsl::created_at.eq(current_time),
|
||||
rdsl::device_name.eq(&account_information.device_name),
|
||||
rdsl::device_name.eq(&device_name),
|
||||
))
|
||||
.execute(&mut conn)
|
||||
.await?;
|
||||
|
@ -151,7 +148,7 @@ pub async fn res(
|
|||
|
||||
return Ok(HttpResponse::Ok()
|
||||
.cookie(new_refresh_token_cookie(&data.config, refresh_token))
|
||||
.json(Response { access_token }));
|
||||
.json(Response { access_token, device_name }));
|
||||
}
|
||||
|
||||
Ok(HttpResponse::InternalServerError().finish())
|
||||
|
|
|
@ -9,6 +9,7 @@ use objects::MailClient;
|
|||
use simple_logger::SimpleLogger;
|
||||
use std::time::SystemTime;
|
||||
mod config;
|
||||
mod generate_device_name;
|
||||
use config::{Config, ConfigBuilder};
|
||||
use diesel_migrations::{EmbeddedMigrations, MigrationHarness, embed_migrations};
|
||||
|
||||
|
|
1005
src/word_list.rs
Normal file
1005
src/word_list.rs
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue