feat: Adding observers/public/account

This commit is contained in:
Josepablo C
2025-06-05 00:48:19 -06:00
parent 9775df7577
commit 8fd7364558
15 changed files with 1122 additions and 1 deletions

View File

@@ -0,0 +1,95 @@
'user strict';
const { getModel } = require( '../../Models' );
const apiConfig = require( '../../../config/apiConfig.json' );
const { toSha256 } = require( '../../Misc' );
const ObserverClient = getModel('observers.client');
const ObserverWarehouse = getModel('observers.warehouse');
const pwd_secret = apiConfig.authentication.pwdSecret;
function get_model_from_type( user_type ){
let observer_model;
if( user_type == "client" ){
observer_model = ObserverClient;
}else if( user_type == "warehouse" ){
observer_model = ObserverWarehouse;
}else{
observer_model = null;
}
return observer_model;
}
async function create_account( user_type, email, password ){
let safe_password = toSha256( password + pwd_secret );
let user_model = get_model_from_type( user_type );
if( user_model == null ){ return null; }
const user = new user_model({
email,
password : safe_password,
});
await user.save();
return user;
}
async function reset_password( user_type, email, password ){
let safe_password = toSha256( password + pwd_secret );
let user_model = get_model_from_type( user_type );
if( user_model == null ){ return null; }
const user = await user_model.findOne({ email });
if( user ){
user.password = safe_password;
await user.save();
return user;
}else{
return null;
}
}
async function already_exists( user_type, email ){
let user_model = get_model_from_type( user_type );
if( user_model == null ){ return null; }
const user = await user_model.findOne( { email } );
if( !user ){
return false;
}else{
return true;
}
}
async function login( user_type, email , password ){
let user_model = get_model_from_type( user_type );
if( user_model == null ){ return null; }
let safe_password = toSha256( password + pwd_secret );
const user = await user_model.findOne({
email , password : safe_password
},{ password : 0 , session_token : 0 , session_token_exp : 0 });
if( !user ){
return null;
}
return user;
}
async function login_with_session_token( user_type, session_token ){
let user_model = get_model_from_type( user_type );
if( user_model == null ){ return null; }
const user = await user_model.findOne({
session_token,
session_token_exp : { $gte: new Date() }
},{ password : 0 , session_token : 0 , session_token_exp : 0 });
if( !user ){
return null;
}
return user;
}
module.exports = { create_account, already_exists, login, login_with_session_token, reset_password };

View File

@@ -0,0 +1,18 @@
const mongoose = require('mongoose');
const { Schema } = mongoose;
const schema = new Schema({
email: { type: String, unique: true, lowercase: true },
password: { type: String , maxLength : 256 },
session_token : { type : String, maxLength : 256 },
session_token_exp : { type: Date },
createdAt: { type : Date, required : true, default : () => { return Date.now(); } }
});
const warehouse = mongoose.model( "observer_warehouse", schema )
const client = mongoose.model( "observer_client", schema )
module.exports = {
warehouse,
client
};

View File

@@ -22,6 +22,8 @@ const trackings = require('./trackings.model.js');
const users = require('./users.model.js');
const vehicles = require('./vehicles.model.js');
const observers = require('./Observers')
function getModel( name ){
switch( name ){
case 'branches':
@@ -66,6 +68,10 @@ function getModel( name ){
return users;
case 'vehicles':
return vehicles;
case 'observers.client':
return observers.client;
case 'observers.warehouse':
return observers.warehouse;
default:
return null;
}