auth api work

This commit is contained in:
Maxime Duchene-Savard 2025-03-30 23:43:03 -04:00
parent 5a23f5ecfe
commit d295c13e78
5 changed files with 31 additions and 9 deletions

View File

@ -12,3 +12,17 @@ func MockAuthMiddleware(user db.User) gin.HandlerFunc {
c.Set("session", session) c.Set("session", session)
} }
} }
func InitUser(username string, password string) (*db.User, error) {
user := users.GetUser(username)
if user == nil {
user, _ = users.CreateUser(username)
}
passHash, _ := users.HashPassword(password)
user.PasswordHash = &passHash
res := db.Connection.Save(&user)
if res.Error != nil {
return nil, res.Error
}
return user, nil
}

View File

@ -55,6 +55,6 @@ func getMe(c *gin.Context) {
} }
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"loggedIn": true, "loggedIn": true,
"user": session.(db.UserSession).User, "user": session.(*db.UserSession).User,
}) })
} }

View File

@ -15,6 +15,8 @@ import (
) )
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
// Set up test database file
os.Setenv("CLORTHO_DB_FILE", "test_clortho.db")
// Global setup // Global setup
fmt.Println("Setting up resources...") fmt.Println("Setting up resources...")
@ -50,21 +52,18 @@ func TestInitAuthEndpoints_authLogin(t *testing.T) {
} }
func TestInitAuthEndpoints_getMe(t *testing.T) { func TestInitAuthEndpoints_getMe(t *testing.T) {
_, err := users.InitAdminUser() user, err := InitUser("admin", "password")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
admin := users.GetUser("admin")
r := gin.Default() r := gin.Default()
SetupRouter(r, MockAuthMiddleware(*admin)) SetupRouter(r, MockAuthMiddleware(*user))
w := httptest.NewRecorder() w := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "/private/auth/me", nil) req, _ := http.NewRequest("GET", "/private/auth/me", nil)
r.ServeHTTP(w, req) r.ServeHTTP(w, req)
user := admin
strUser, _ := json.Marshal(user) strUser, _ := json.Marshal(user)
assert.Equal(t, 200, w.Code) assert.Equal(t, 200, w.Code)
assert.JSONEq(t, fmt.Sprintf(`{"valid": true, "user": %s}`, strUser), w.Body.String()) assert.JSONEq(t, fmt.Sprintf(`{"loggedIn": true, "user": %s}`, strUser), w.Body.String())
} }

View File

@ -14,7 +14,7 @@ func main() {
log.Fatal("Could not initialize connection to the DB", err) log.Fatal("Could not initialize connection to the DB", err)
} }
adminPass, err := users.InitAdminUser() adminPass, err := users.InitAdminUser(nil)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} else { } else {

View File

@ -46,6 +46,15 @@ func GetUser(username string) *db.User {
} }
} }
func CreateUser(username string) (*db.User, error) {
user := db.User{Username: username}
result := db.Connection.Create(&user)
if result.Error != nil {
return nil, result.Error
}
return &user, nil
}
func GetUsers() []db.User { func GetUsers() []db.User {
var users []db.User var users []db.User
db.Connection.Find(&users) db.Connection.Find(&users)
@ -136,7 +145,7 @@ func GenerateJwt(sessionId uint) (string, error) {
} }
func NewSession(user db.User) *db.UserSession { func NewSession(user db.User) *db.UserSession {
session := db.UserSession{UserID: user.ID} session := db.UserSession{User: user}
db.Connection.Create(&session) db.Connection.Create(&session)
return &session return &session
} }