Dashboard  2
Lot's of data
Loading...
Searching...
No Matches
login.ts
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2024
3** area-rattrapage
4** File description:
5** login.ts
6*/
7
8import uuid4 from "uuid4";
9import DB from "./db";
10import bcryptjs from "bcryptjs";
11
12export namespace Login {
13
14 // bcrypt
15 export const bcryptSaltRounds = 10;
16 export const bcryptSalt = bcryptjs.genSaltSync(bcryptSaltRounds);
17
18 export function generate_token() {
19 console.log("generate_token");
20 return uuid4();
21 };
22
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}'`);
27
28 if (!user_data || user_data.length === 0) {
29 return null;
30 }
31
32 const user_id = user_data[0].id;
33 await database.updateTable("users", ["token"], [token], "id = ?", [user_id]);
34 return token;
35 };
36
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}'`);
41
42 if (!user_data || user_data.length === 0) {
43 return null;
44 }
45
46 const user_id = user_data[0].id;
47 const corresponds = await check_user_password(user_email, unhashed_password, database);
48 if (!corresponds) {
49 return null;
50 }
51 await database.updateTable("users", ["token"], [token], "id = ?", [user_id]);
52 return token;
53 };
54
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}'`);
58
59 if (!user_data || user_data.length === 0) {
60 return false;
61 }
62
63 const user_id = user_data[0].id;
64 await database.updateTable("users", ["token"], [null], "id = ?", [user_id]);
65 return true;
66 };
67
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}'`);
71
72 if (!user_data || user_data.length === 0) {
73 return false;
74 }
75
76 return true;
77 };
78
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}'`);
82
83 if (!user_data || user_data.length === 0) {
84 return false;
85 }
86
87 return bcryptjs.compareSync(unhashed_password, user_data[0].password);
88 };
89
90 export async function hash_password(password: string) {
91 console.log("hash_password");
92 return bcryptjs.hashSync(password, bcryptSalt);
93 };
94
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}'`);
98
99 if (user_data && user_data.length > 0) {
100 return false;
101 }
102
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]]);
106 return true;
107 };
108
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}'`);
113
114 // console.log("user_data", user_data);
115
116 if (!user_data || user_data.length === 0) {
117 console.log("user data is empty");
118 return false;
119 }
120
121 const hashed_password = await hash_password(new_unhashed_password);
122
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");
128 return true;
129 }
130};