@@ -16,5 +16,6 @@ struct Body {
pub async fn route(
body: web::Json<Body>
) -> Result<HttpResponse, HttpError> {
+
Ok(HttpResponse::Ok().body("Test"))
}
@@ -0,0 +1,18 @@
+use argon2::{
+ Argon2,
+ password_hash::{
+ SaltString,
+ PasswordHasher,
+ rand_core::OsRng
+ }
+};
+use crate::app_error::AppError;
+pub fn hash_password(pass: &String) -> Result<String, AppError> {
+ let salt = SaltString::generate(&mut OsRng);
+ let argon2 = Argon2::default();
+ match argon2.hash_password(pass.as_bytes(), &salt) {
+ Ok(h) => Ok(h.to_string()),
+ Err(e) => Err(AppError::InternalError(e.to_string()))
+}
@@ -0,0 +1,5 @@
+pub mod valid_password;
+pub mod hash_password;
+pub use valid_password::valid_password;
+pub use hash_password::hash_password;
@@ -0,0 +1,13 @@
+pub fn valid_password(pass: &String, confirm_pass: &String) -> Result<(), AppError> {
+ if *pass != *confirm_pass {
+ return Err(AppError::invalid_input("Passwords do not match"));
+ if pass.chars().count() < 12 {
+ return Err(AppError::invalid_input("Password must contain at least 12 characters"));
+ Ok(())
@@ -8,6 +8,7 @@ mod http_error;
mod routes;
mod controllers;
mod models;
+mod logic;
#[actix_web::main]
async fn main() -> std::io::Result<()> {