2** EPITECH PROJECT, 2024
8import uuid4 from "uuid4";
10import bcryptjs from "bcryptjs";
12export namespace Login {
15 export const bcryptSaltRounds = 10;
16 export const bcryptSalt = bcryptjs.genSaltSync(bcryptSaltRounds);
18 export function generate_token() {
19 console.log("generate_token");
23 export async function log_user_in(user_email: string, database: DB) {
24 console.log("log_user_in");
25 const token = generate_token();
26 const user_data = await database.getContentFromTable("users", ["id"], `email = '${user_email}'`);
28 if (!user_data || user_data.length === 0) {
32 const user_id = user_data[0].id;
33 await database.updateTable("users", ["token"], [token], "id = ?", [user_id]);
37 export async function log_local_user_in(user_email: string, unhashed_password: string, database: DB) {
38 console.log("log_local_user_in");
39 const token = generate_token();
40 const user_data = await database.getContentFromTable("users", ["*"], `email = '${user_email}'`);
42 if (!user_data || user_data.length === 0) {
46 const user_id = user_data[0].id;
47 const corresponds = await check_user_password(user_email, unhashed_password, database);
51 await database.updateTable("users", ["token"], [token], "id = ?", [user_id]);
55 export async function log_user_out(token: string, database: DB) {
56 console.log("log_user_out");
57 const user_data = await database.getContentFromTable("users", ["id"], `token = '${token}'`);
59 if (!user_data || user_data.length === 0) {
63 const user_id = user_data[0].id;
64 await database.updateTable("users", ["token"], [null], "id = ?", [user_id]);
68 export async function check_token(token: string, database: DB) {
69 console.log("check_token");
70 const user_data = await database.getContentFromTable("users", ["id"], `token = '${token}'`);
72 if (!user_data || user_data.length === 0) {
79 export async function check_user_password(user_email: string, unhashed_password: string, database: DB) {
80 console.log("check_user_password");
81 const user_data = await database.getContentFromTable("users", ["password"], `email = '${user_email}'`);
83 if (!user_data || user_data.length === 0) {
87 return bcryptjs.compareSync(unhashed_password, user_data[0].password);
90 export async function hash_password(password: string) {
91 console.log("hash_password");
92 return bcryptjs.hashSync(password, bcryptSalt);
95 export async function register_user(username: string, user_email: string, password: string, database: DB) {
96 console.log("register_user");
97 const user_data = await database.getContentFromTable("users", ["id"], `email = '${user_email}'`);
99 if (user_data && user_data.length > 0) {
103 const hashed_password = await hash_password(password);
104 // console.log("hashed_password", hashed_password);
105 await database.writeToTable("users", ["email", "password", "name"], [[user_email, hashed_password, username]]);
109 export async function update_user_information(token: string, new_name: string, new_unhashed_password: string, database: DB) {
110 console.log("update_user_information");
111 // console.log('update_user_information', token, new_name, new_unhashed_password);
112 const user_data = await database.getContentFromTable("users", ["id"], `token = '${token}'`);
114 // console.log("user_data", user_data);
116 if (!user_data || user_data.length === 0) {
117 console.log("user data is empty");
121 const hashed_password = await hash_password(new_unhashed_password);
123 const user_id = Number(user_data[0].id);
124 // console.log("user_id", user_id);
125 // console.log("hashed_password", hashed_password);
126 await database.updateTable("users", ["name", "password"], [new_name, hashed_password], "id = ?", [user_id]);
127 console.log("updated user information");