Merge branch 'main' into wip/username-regex
This commit is contained in:
commit
8a1467c26a
11 changed files with 176 additions and 200 deletions
|
@ -7,6 +7,7 @@ use std::{
|
|||
use actix_web::{HttpResponse, Scope, web};
|
||||
use log::error;
|
||||
use regex::Regex;
|
||||
use serde::Serialize;
|
||||
use sqlx::Postgres;
|
||||
use uuid::Uuid;
|
||||
|
||||
|
@ -15,6 +16,11 @@ mod refresh;
|
|||
mod register;
|
||||
mod revoke;
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Response {
|
||||
access_token: String,
|
||||
}
|
||||
|
||||
static EMAIL_REGEX: LazyLock<Regex> = LazyLock::new(|| {
|
||||
Regex::new(r"[-A-Za-z0-9!#$%&'*+/=?^_`{|}~]+(?:\.[-A-Za-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[A-Za-z0-9](?:[-A-Za-z0-9]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[-A-Za-z0-9]*[A-Za-z0-9])?").unwrap()
|
||||
});
|
||||
|
@ -33,33 +39,36 @@ pub fn web() -> Scope {
|
|||
}
|
||||
|
||||
pub async fn check_access_token(
|
||||
access_token: String,
|
||||
access_token: &str,
|
||||
pool: &sqlx::Pool<Postgres>,
|
||||
) -> Result<Uuid, HttpResponse> {
|
||||
let row = sqlx::query_as(
|
||||
"SELECT CAST(uuid as VARCHAR), created FROM access_tokens WHERE token = $1",
|
||||
)
|
||||
.bind(&access_token)
|
||||
.fetch_one(pool)
|
||||
.await;
|
||||
let row =
|
||||
sqlx::query_as("SELECT CAST(uuid as VARCHAR), created_at FROM access_tokens WHERE token = $1")
|
||||
.bind(&access_token)
|
||||
.fetch_one(pool)
|
||||
.await;
|
||||
|
||||
if let Err(error) = row {
|
||||
if error.to_string() == "no rows returned by a query that expected to return at least one row" {
|
||||
return Err(HttpResponse::Unauthorized().finish())
|
||||
if error.to_string()
|
||||
== "no rows returned by a query that expected to return at least one row"
|
||||
{
|
||||
return Err(HttpResponse::Unauthorized().finish());
|
||||
}
|
||||
|
||||
error!("{}", error);
|
||||
return Err(HttpResponse::InternalServerError().json(r#"{ "error": "Unhandled exception occured, contact the server administrator" }"#))
|
||||
return Err(HttpResponse::InternalServerError().json(
|
||||
r#"{ "error": "Unhandled exception occured, contact the server administrator" }"#,
|
||||
));
|
||||
}
|
||||
|
||||
let (uuid, created): (String, i64) = row.unwrap();
|
||||
let (uuid, created_at): (String, i64) = row.unwrap();
|
||||
|
||||
let current_time = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_secs() as i64;
|
||||
|
||||
let lifetime = current_time - created;
|
||||
let lifetime = current_time - created_at;
|
||||
|
||||
if lifetime > 3600 {
|
||||
return Err(HttpResponse::Unauthorized().finish());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue