From 76070ac8822e9d9d9523f72d04f63215352e9301 Mon Sep 17 00:00:00 2001 From: Tom POUDEROUX Date: Sun, 11 May 2025 23:46:42 +0200 Subject: [PATCH] Add user login token --- src/api/api.go | 2 +- src/database/database.go | 146 +++++++++++++++++++++------------------ 2 files changed, 80 insertions(+), 68 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index 8a6b22e..daacee4 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -78,7 +78,7 @@ func apiAuthLogin(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { var password string = r.FormValue("password") fmt.Fprintf(w, "Login : User : %s, Password : %s\n\n", username, password) - var result database.DatabaseResult = database.ExecuteStoredRoutine("CheckUser", username, password) + var result database.DatabaseResult = database.ExecuteStoredRoutine("AuthUser", username, password) database.DecodeDatabaseResult(&result) fmt.Println(result) diff --git a/src/database/database.go b/src/database/database.go index 8786a0e..d9e62b5 100644 --- a/src/database/database.go +++ b/src/database/database.go @@ -126,37 +126,31 @@ var databaseStructure databaseDefinition = databaseDefinition{ { Name: "id", Type: "int(11)", - IsNullable: false, AutoIncrement: true, Primary: true, }, { - Name: "name", - Type: "varchar(256)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "name", + Type: "varchar(256)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", }, { - Name: "password", - Type: "varchar(256)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_bin", + Name: "password", + Type: "varchar(256)", + Charset: "utf8mb4", + Collation: "utf8mb4_bin", }, { - Name: "password_salt", - Type: "varchar(256)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_bin", + Name: "password_salt", + Type: "varchar(256)", + Charset: "utf8mb4", + Collation: "utf8mb4_bin", }, { - Name: "permission_level", - Type: "enum('ADMIN', 'MODERATOR', 'USER')", - Default: "'USER'", - IsNullable: false, - Charset: nil, + Name: "permission_level", + Type: "enum('ADMIN', 'MODERATOR', 'USER')", + Default: "'USER'", }, { Name: "email", @@ -174,16 +168,14 @@ var databaseStructure databaseDefinition = databaseDefinition{ { Name: "id", Type: "int(11)", - IsNullable: false, AutoIncrement: true, Primary: true, }, { - Name: "name", - Type: "varchar(64)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "name", + Type: "varchar(64)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", }, }, }, @@ -193,16 +185,14 @@ var databaseStructure databaseDefinition = databaseDefinition{ { Name: "id", Type: "int(11)", - IsNullable: false, AutoIncrement: true, Primary: true, }, { - Name: "name", - Type: "varchar(64)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "name", + Type: "varchar(64)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", }, }, }, @@ -212,16 +202,14 @@ var databaseStructure databaseDefinition = databaseDefinition{ { Name: "id", Type: "int(11)", - IsNullable: false, AutoIncrement: true, Primary: true, }, { - Name: "name", - Type: "varchar(256)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "name", + Type: "varchar(256)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", }, { Name: "content", @@ -240,22 +228,33 @@ var databaseStructure databaseDefinition = databaseDefinition{ Collation: "utf8mb4_bin", }, { - Name: "folder_id", - Type: "int(11)", - IsNullable: false, + Name: "folder_id", + Type: "int(11)", }, { - Name: "date", - Type: "datetime", - IsNullable: false, - Default: "current_timestamp()", + Name: "date", + Type: "datetime", + Default: "current_timestamp()", }, { - Name: "title", - Type: "varchar(256)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "title", + Type: "varchar(256)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", + }, + }, + }, + { + Name: "loginToken", + Columns: []columsDefinition{ + { + Name: "id", + Type: "VARCHAR(256)", + Primary: true, + }, + { + Name: "user_id", + Type: "int(11)", }, }, }, @@ -263,23 +262,20 @@ var databaseStructure databaseDefinition = databaseDefinition{ Name: "tags_websites", Columns: []columsDefinition{ { - Name: "tag_id", - Type: "int(11)", - IsNullable: false, - Primary: true, + Name: "tag_id", + Type: "int(11)", + Primary: true, }, { - Name: "website_id", - Type: "int(11)", - IsNullable: false, - Primary: true, + Name: "website_id", + Type: "int(11)", + Primary: true, }, { - Name: "value", - Type: "varchar(64)", - IsNullable: false, - Charset: "utf8mb4", - Collation: "utf8mb4_unicode_ci", + Name: "value", + Type: "varchar(64)", + Charset: "utf8mb4", + Collation: "utf8mb4_unicode_ci", }, }, }, @@ -369,6 +365,15 @@ var databaseStructure databaseDefinition = databaseDefinition{ UpdateRule: "CASCADE", DeleteRule: "CASCADE", }, + { + Name: "FK_loginToken__user_id", + Table: "loginToken", + ColumnName: "user_id", + PointingToTable: "user", + PointingToColumn: "id", + UpdateRule: "CASCADE", + DeleteRule: "CASCADE", + }, }, StoredProcedures: []storedProcedureDefinition{ { @@ -411,7 +416,7 @@ SELECT LAST_INSERT_ID() INTO f_user_id; RETURN f_user_id;`, }, { - Name: "CheckUser", + Name: "AuthUser", Parameters: []storedRoutineParameterDefinition{ { Name: "f_user_name", @@ -427,13 +432,14 @@ RETURN f_user_id;`, }, }, Return: storedRoutineParameterDefinition{ - Type: "INT(11)", + Type: "VARCHAR(256)", }, Command: ` DECLARE f_user_id INT(11) DEFAULT NULL; DECLARE f_salt VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; DECLARE f_password VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; DECLARE f_user VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +DECLARE f_token VARCHAR(256) DEFAULT ""; SET f_user = LOWER(f_user_name); @@ -442,7 +448,13 @@ SELECT SHA2(CONCAT(f_user, f_user_password, f_salt), 512) INTO f_password; SELECT id INTO f_user_id FROM user WHERE name = f_user AND password = f_password LIMIT 1; -RETURN f_user_id;`, +IF f_user_id IS NOT NULL THEN + SELECT SHA2(UUID(), 512) INTO f_token; + INSERT INTO loginToken(id, user_id) VALUES(f_token, f_user_id); + RETURN f_token; +ELSE + RETURN ""; +END IF;`, }, }, }