diff --git a/compose.dev.yml b/compose.dev.yml deleted file mode 100644 index 02f46a3..0000000 --- a/compose.dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -version: '3.5' -volumes: - gorb-backend: - gorb-database: -networks: - gorb: -services: - backend: - image: gorb/backend - build: - dockerfile: ./Dockerfile - restart: always - ports: - - 8080:8080 - networks: - - gorb - volumes: - - gorb-backend:/gorb - environment: - #- RUST_LOG=debug - - DATABASE_USERNAME=gorb - - DATABASE_PASSWORD=gorb - - DATABASE=gorb - - DATABASE_HOST=database - - DATABASE_PORT=5432 - database: - image: postgres:16 - restart: always - networks: - - gorb - volumes: - - gorb-database:/var/lib/postgresql/data - environment: - - POSTGRES_USER=gorb - - POSTGRES_PASSWORD=gorb - - POSTGRES_DB=gorb diff --git a/entrypoint.sh b/entrypoint.sh index 63bfa84..07e8618 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -36,6 +36,7 @@ rotate_log() { fi } -rotate_log "/gorb/logs/backend.log" +rotate_log "/gorb/logs/stdout.log" +rotate_log "/gorb/logs/stderr.log" -/usr/bin/gorb-backend --config /gorb/config/config.toml 2>&1 | tee /gorb/logs/backend.log +/usr/bin/gorb-backend --config /gorb/config/config.toml > /gorb/logs/stdout.log 2> /gorb/logs/stderr.log diff --git a/run-dev.sh b/run-dev.sh deleted file mode 100755 index 69067b8..0000000 --- a/run-dev.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -podman-compose --file compose.dev.yml up --build - -echo "SHUTTING DOWN CONTAINERS" -podman container stop backend_backend_1 backend_database_1 - -echo "DELETING CONTAINERS" -podman container rm backend_backend_1 backend_database_1 diff --git a/src/api/v1/auth/login.rs b/src/api/v1/auth/login.rs index bf28ae5..50aff9d 100644 --- a/src/api/v1/auth/login.rs +++ b/src/api/v1/auth/login.rs @@ -4,11 +4,11 @@ use actix_web::{Error, HttpResponse, error, post, web}; use argon2::{PasswordHash, PasswordVerifier}; use futures::StreamExt; use log::error; +use regex::Regex; use serde::{Deserialize, Serialize}; use crate::{ Data, - api::v1::auth::{EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX}, crypto::{generate_access_token, generate_refresh_token}, }; @@ -44,11 +44,19 @@ pub async fn response( let login_information = serde_json::from_slice::(&body)?; - if !PASSWORD_REGEX.is_match(&login_information.password) { + let email_regex = 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(); + + // FIXME: This regex doesnt seem to be working + let username_regex = Regex::new(r"[a-zA-Z0-9.-_]").unwrap(); + + // Password is expected to be hashed using SHA3-384 + let password_regex = Regex::new(r"[0-9a-f]{96}").unwrap(); + + if !password_regex.is_match(&login_information.password) { return Ok(HttpResponse::Forbidden().json(r#"{ "password_hashed": false }"#)); } - if EMAIL_REGEX.is_match(&login_information.username) { + if email_regex.is_match(&login_information.username) { if let Ok(row) = sqlx::query_as("SELECT CAST(uuid as VARCHAR), password FROM users WHERE email = $1") .bind(login_information.username) @@ -67,7 +75,7 @@ pub async fn response( } return Ok(HttpResponse::Unauthorized().finish()); - } else if USERNAME_REGEX.is_match(&login_information.username) { + } else if username_regex.is_match(&login_information.username) { if let Ok(row) = sqlx::query_as("SELECT CAST(uuid as VARCHAR), password FROM users WHERE username = $1") .bind(login_information.username) diff --git a/src/api/v1/auth/mod.rs b/src/api/v1/auth/mod.rs index 469ccc2..dcfeb6b 100644 --- a/src/api/v1/auth/mod.rs +++ b/src/api/v1/auth/mod.rs @@ -1,12 +1,10 @@ use std::{ str::FromStr, - sync::LazyLock, time::{SystemTime, UNIX_EPOCH}, }; use actix_web::{HttpResponse, Scope, web}; use log::error; -use regex::Regex; use sqlx::Postgres; use uuid::Uuid; @@ -15,16 +13,6 @@ mod refresh; mod register; mod revoke; -static EMAIL_REGEX: LazyLock = 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() -}); - -// FIXME: This regex doesnt seem to be working -static USERNAME_REGEX: LazyLock = LazyLock::new(|| Regex::new(r"[a-zA-Z0-9.-_]").unwrap()); - -// Password is expected to be hashed using SHA3-384 -static PASSWORD_REGEX: LazyLock = LazyLock::new(|| Regex::new(r"[0-9a-f]{96}").unwrap()); - pub fn web() -> Scope { web::scope("/auth") .service(register::res) diff --git a/src/api/v1/auth/register.rs b/src/api/v1/auth/register.rs index 5abe127..f6bcfd2 100644 --- a/src/api/v1/auth/register.rs +++ b/src/api/v1/auth/register.rs @@ -7,13 +7,13 @@ use argon2::{ }; use futures::StreamExt; use log::error; +use regex::Regex; use serde::{Deserialize, Serialize}; use uuid::Uuid; use super::login::Response; use crate::{ Data, - api::v1::auth::{EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX}, crypto::{generate_access_token, generate_refresh_token}, }; @@ -73,14 +73,19 @@ pub async fn res(mut payload: web::Payload, data: web::Data) -> Result 32 { @@ -90,7 +95,10 @@ pub async fn res(mut payload: web::Payload, data: web::Data) -> Result; +/// Simple program to greet a person #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args {