mirror of
https://github.com/khairul169/garage-webui.git
synced 2025-10-14 14:59:32 +07:00
101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
package router
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"khairul169/garage-webui/schema"
|
|
"khairul169/garage-webui/utils"
|
|
"net/http"
|
|
)
|
|
|
|
type Auth struct{}
|
|
|
|
func (c *Auth) Login(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Println("Login attempt started")
|
|
var body schema.LoginRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
|
|
fmt.Printf("Failed to decode request body: %v\n", err)
|
|
utils.ResponseError(w, err)
|
|
return
|
|
}
|
|
fmt.Printf("Login request for user: %s\n", body.Username)
|
|
|
|
// Authenticate user
|
|
user, err := utils.DB.AuthenticateUser(body.Username, body.Password)
|
|
if err != nil {
|
|
fmt.Printf("Authentication failed: %v\n", err)
|
|
utils.ResponseErrorStatus(w, err, 401)
|
|
return
|
|
}
|
|
fmt.Println("User authenticated successfully")
|
|
|
|
// Create session
|
|
session, err := utils.DB.CreateSession(user.ID)
|
|
if err != nil {
|
|
fmt.Printf("Failed to create session: %v\n", err)
|
|
utils.ResponseError(w, err)
|
|
return
|
|
}
|
|
fmt.Println("Session created successfully")
|
|
|
|
// Set session in cookie/session store
|
|
utils.Session.Set(r, "user_id", user.ID)
|
|
utils.Session.Set(r, "session_id", session.ID)
|
|
utils.Session.Set(r, "authenticated", true)
|
|
fmt.Println("Session data set")
|
|
|
|
response := schema.LoginResponse{
|
|
User: *user,
|
|
Token: session.Token,
|
|
ExpiresAt: session.ExpiresAt,
|
|
}
|
|
|
|
fmt.Println("Sending login response")
|
|
utils.ResponseSuccess(w, response)
|
|
}
|
|
|
|
func (c *Auth) Logout(w http.ResponseWriter, r *http.Request) {
|
|
// Get session ID from session store
|
|
sessionID := utils.Session.Get(r, "session_id")
|
|
if sessionID != nil {
|
|
// Delete session from database
|
|
utils.DB.DeleteSession(sessionID.(string))
|
|
}
|
|
|
|
utils.Session.Clear(r)
|
|
utils.ResponseSuccess(w, map[string]bool{"success": true})
|
|
}
|
|
|
|
func (c *Auth) GetStatus(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Println("GetStatus: Checking authentication status")
|
|
enabled := true // Authentication is always enabled now
|
|
authenticated := false
|
|
var user *schema.User
|
|
|
|
authSession := utils.Session.Get(r, "authenticated")
|
|
userID := utils.Session.Get(r, "user_id")
|
|
|
|
fmt.Printf("GetStatus: authSession=%v, userID=%v\n", authSession, userID)
|
|
|
|
if authSession != nil && authSession.(bool) && userID != nil {
|
|
authenticated = true
|
|
fmt.Println("GetStatus: User is authenticated")
|
|
// Get user details
|
|
if u, err := utils.DB.GetUser(userID.(string)); err == nil {
|
|
user = u
|
|
fmt.Printf("GetStatus: User found: %s\n", user.Username)
|
|
} else {
|
|
fmt.Printf("GetStatus: Failed to get user: %v\n", err)
|
|
}
|
|
} else {
|
|
fmt.Println("GetStatus: User is not authenticated")
|
|
}
|
|
|
|
response := schema.AuthStatusResponse{
|
|
Enabled: enabled,
|
|
Authenticated: authenticated,
|
|
User: user,
|
|
}
|
|
|
|
utils.ResponseSuccess(w, response)
|
|
} |