Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions internal/adapters/db/user.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package db

type User struct {
ID int
Nickname string
Password string
}
5 changes: 5 additions & 0 deletions internal/adapters/rest/middleware/authmiddleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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
}
}
4 changes: 2 additions & 2 deletions internal/adapters/rest/middleware/authmiddleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
},
Expand Down
18 changes: 14 additions & 4 deletions internal/core/users/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
}
51 changes: 51 additions & 0 deletions internal/core/users/users_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

}
Loading