kontor-echo: setup project to show homepage
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
Gitea Actions Demo / build-and-test (push) Failing after 11s

This commit is contained in:
Thomas Peetz
2026-11-09 17:02:59 +01:00
parent 074abd3c85
commit debdf3d0b0
63 changed files with 2411 additions and 485 deletions
+114
View File
@@ -0,0 +1,114 @@
package handlers
import (
"kontor-api-echo/internal/config"
"kontor-api-echo/internal/globals"
"kontor-api-echo/internal/helpers"
"kontor-api-echo/internal/models"
"kontor-api-echo/internal/repository"
"kontor-api-echo/internal/service"
"net/http"
"github.com/labstack/echo/v5"
"github.com/uptrace/bun"
)
type AuthHandler struct {
Service *service.AuthService
Secret []byte
}
func NewAuthHandler(db *bun.DB) *AuthHandler {
handler := &AuthHandler{Service: service.NewAuthService(repository.NewProfileRepository(db)), Secret: config.ServerConfig.ApiSecret}
return handler
}
func (handler *AuthHandler) Login(c *echo.Context) error {
var input models.LoginInput
if err := c.Bind(&input); err != nil {
return c.JSON(http.StatusBadRequest, map[string]any{"error": err.Error()})
}
profile_id, err := handler.Service.LoginCheck(input.Email, input.Password)
if err != nil {
return c.JSON(http.StatusBadRequest, map[string]any{"error": "username or password is incorrect."})
}
token, err := helpers.GenerateToken(profile_id)
logger := c.Logger()
if err != nil {
logger.Info("Login", "GenerateToken error", err.Error())
}
return c.JSON(http.StatusOK, map[string]any{"token": token})
}
func (handler *AuthHandler) LoginPage(c *echo.Context) error {
cookie, _ := c.Cookie(globals.UserKey)
user := cookie.Value
logger := c.Logger()
logger.Info("LoginPage", globals.UserKey, user)
data := globals.GetDefaultValues(user, "Please logout first")
if user != "" {
return c.Render(http.StatusBadRequest, "login", data)
}
data["message"] = ""
return c.Render(http.StatusOK, "login", data)
}
func (handler *AuthHandler) LoginPost(c *echo.Context) error {
cookie, _ := c.Cookie(globals.UserKey)
user := cookie.Value
logger := c.Logger()
logger.Info("LoginPost", "user", user)
data := globals.GetDefaultValues(user, "Please logout first")
if user != "" {
return c.Render(http.StatusBadRequest, "login", data)
}
username := c.FormValue("username")
password := c.FormValue("password")
if helpers.EmptyUserPass(username, password) {
data["message"] = "Parameters can't be empty"
c.Render(http.StatusBadRequest, "login", data)
}
profile_id, err := handler.Service.LoginCheck(username, password)
if err != nil {
data["message"] = "Incorrect username or password"
c.Render(http.StatusUnauthorized, "login", data)
}
c.SetCookie(&http.Cookie{
Name: globals.UserKey,
Value: profile_id,
MaxAge: 3600,
Path: "/",
Domain: "",
HttpOnly: true,
})
logger.Info("LoginPost: redirect to index")
return c.Redirect(http.StatusMovedPermanently, "/")
}
func (handler *AuthHandler) LogoutPage(c *echo.Context) error {
cookie, _ := c.Cookie(globals.UserKey)
user := cookie.Value
logger := c.Logger()
logger.Info("LogoutPage", globals.UserKey, user)
if user == "" {
logger.Info("Invalid session token")
return c.Redirect(http.StatusMovedPermanently, "/")
}
c.SetCookie(&http.Cookie{
Name: globals.UserKey,
Value: "",
MaxAge: -1, // Deletes the cookie immediately
Path: "/",
Domain: "",
HttpOnly: true,
})
logger.Info("LogoutPage: redirect to index page")
return c.Redirect(http.StatusMovedPermanently, "/")
}