diff --git a/internal/adapters/db/user.go b/internal/adapters/db/user.go index f91540a..7340204 100644 --- a/internal/adapters/db/user.go +++ b/internal/adapters/db/user.go @@ -1,6 +1,7 @@ package db type User struct { + ID int Nickname string Password string } diff --git a/internal/adapters/rest/middleware/authmiddleware.go b/internal/adapters/rest/middleware/authmiddleware.go index cf74b26..6d013d5 100644 --- a/internal/adapters/rest/middleware/authmiddleware.go +++ b/internal/adapters/rest/middleware/authmiddleware.go @@ -2,6 +2,7 @@ package middleware import ( "github.com/gin-gonic/gin" + "github.com/pangolin-do-golang/thumb-processor-api/internal/core/users" "net/http" ) @@ -21,6 +22,10 @@ func AuthMiddleware(allowedUsersFunc func() gin.Accounts) gin.HandlerFunc { return } + loggedUser := users.GetUserByNickname(username) + + c.Set("logged_user_id", loggedUser.ID) + c.Next() // Continue to the handler } } diff --git a/internal/adapters/rest/middleware/authmiddleware_test.go b/internal/adapters/rest/middleware/authmiddleware_test.go index c0d0dd5..ebe9bdb 100644 --- a/internal/adapters/rest/middleware/authmiddleware_test.go +++ b/internal/adapters/rest/middleware/authmiddleware_test.go @@ -22,9 +22,9 @@ func TestAuthMiddleware(t *testing.T) { }{ { name: "Valid Credentials", - username: "testuser", + username: "test", password: "testpassword", - allowedUsersFunc: func() gin.Accounts { return gin.Accounts{"testuser": "testpassword"} }, + allowedUsersFunc: func() gin.Accounts { return gin.Accounts{"test": "testpassword"} }, expectedStatus: http.StatusOK, // Or 200 if you're checking for a successful continuation expectedMessage: "", // No message expected on success }, diff --git a/internal/core/users/users.go b/internal/core/users/users.go index 760f7d2..1e1cfa1 100644 --- a/internal/core/users/users.go +++ b/internal/core/users/users.go @@ -3,12 +3,13 @@ package users import ( "github.com/gin-gonic/gin" "github.com/pangolin-do-golang/thumb-processor-api/internal/adapters/db" + "math/rand" ) var users = []db.User{ - {Nickname: "user", Password: "user"}, - {Nickname: "test", Password: "test"}, - {Nickname: "prod", Password: "prod"}, + {ID: 1, Nickname: "user", Password: "user"}, + {ID: 2, Nickname: "test", Password: "test"}, + {ID: 3, Nickname: "prod", Password: "prod"}, } func GetAllowedUsers() gin.Accounts { @@ -20,5 +21,14 @@ func GetAllowedUsers() gin.Accounts { } func CreateUser(nickname, password string) { - users = append(users, db.User{Nickname: nickname, Password: password}) + users = append(users, db.User{ID: rand.Int(), Nickname: nickname, Password: password}) +} + +func GetUserByNickname(nickname string) *db.User { + for _, user := range users { + if user.Nickname == nickname { + return &user + } + } + return nil } diff --git a/internal/core/users/users_test.go b/internal/core/users/users_test.go index 509519f..914999f 100644 --- a/internal/core/users/users_test.go +++ b/internal/core/users/users_test.go @@ -52,3 +52,54 @@ func TestCreateUser(t *testing.T) { {Nickname: "prod", Password: "prod"}, } } + +func TestGetUserByNickname(t *testing.T) { + // Test case 1: User exists + existingUser := "user" + user := GetUserByNickname(existingUser) + + if user == nil { + t.Errorf("GetUserByNickname(%s) returned nil, expected a user", existingUser) + } else if user.Nickname != existingUser { + t.Errorf("GetUserByNickname(%s) returned user with nickname %s, expected %s", existingUser, user.Nickname, existingUser) + } + + // Test case 2: User does not exist + nonExistingUser := "nonexistent" + user = GetUserByNickname(nonExistingUser) + + if user != nil { + t.Errorf("GetUserByNickname(%s) returned a user, expected nil", nonExistingUser) + } + + // Test case 3: Empty nickname + emptyNickname := "" + user = GetUserByNickname(emptyNickname) + + if user != nil { + t.Errorf("GetUserByNickname(%s) returned a user, expected nil", emptyNickname) + } + + // Test case 4: Check if the returned user is a copy, not a reference to the original slice + originalUsers := users // Keep a copy of the original users slice + + testNickname := "test_copy" + testPassword := "password_copy" + CreateUser(testNickname, testPassword) // Add a new user + + retrievedUser := GetUserByNickname(testNickname) + if retrievedUser == nil { + t.Errorf("GetUserByNickname(%s) returned nil, expected a user", testNickname) + } + + retrievedUser.Password = "modified_password" // Modify the retrieved user's password + + originalRetrievedUser := GetUserByNickname(testNickname) //Get again the user + + if originalRetrievedUser.Password == "modified_password" { + t.Errorf("GetUserByNickname returned a pointer to the original user in the slice. Should return a copy") + } + + users = originalUsers + +}