change router struct

This commit is contained in:
2025-06-17 10:49:53 +08:00
parent a8bc73ae99
commit 6c3b4ec367
42 changed files with 1268 additions and 1308 deletions

View File

@@ -0,0 +1,97 @@
package auth
import (
"io"
"log"
"net/http"
"management/internal/erpserver/model/form"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/auth"
"management/internal/pkg/binding"
"management/internal/pkg/mid"
"management/internal/pkg/render"
"management/internal/pkg/session"
"github.com/drhin/logger"
)
type App struct {
log *logger.Logger
sm session.Manager
render render.Renderer
captchaService v1.CaptchaService
userService v1.UserService
}
func NewApp(
log *logger.Logger,
sm session.Manager,
render render.Renderer,
captchaService v1.CaptchaService,
userService v1.UserService,
) *App {
return &App{
log: log,
sm: sm,
render: render,
captchaService: captchaService,
userService: userService,
}
}
func (a *App) login(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
switch r.Method {
case http.MethodGet:
u := mid.GetUser(ctx)
if u.ID > 0 {
if err := a.sm.RenewToken(ctx); err == nil {
http.Redirect(w, r, "/home.html", http.StatusFound)
return
}
}
_ = a.sm.Destroy(ctx)
component := auth.Login(ctx)
a.render.Render(ctx, w, component)
case http.MethodPost:
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
a.log.Error(err.Error(), err)
}
}(r.Body)
var req form.Login
if err := binding.Form.Bind(r, &req); err != nil {
e := binding.ValidatorErrors(err)
a.render.JSONErr(w, e)
return
}
if !a.captchaService.Verify(req.CaptchaID, req.Captcha, true) {
a.render.JSONErr(w, "验证码错误")
return
}
req = req.SetAttributes(r)
err := a.userService.Login(ctx, &req)
if err != nil {
log.Println(err)
a.render.JSONErr(w, err.Error())
return
}
a.render.JSONOk(w, "login successfully")
default:
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
}
}
func (a *App) logout(w http.ResponseWriter, r *http.Request) {
err := a.sm.Destroy(r.Context())
if err != nil {
a.log.Error(err.Error(), err)
}
http.Redirect(w, r, "/", http.StatusFound)
}

View File

@@ -0,0 +1,29 @@
package auth
import (
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/mid"
"management/internal/pkg/render"
"management/internal/pkg/session"
"github.com/drhin/logger"
"github.com/go-chi/chi/v5"
)
type Config struct {
Log *logger.Logger
Sm session.Manager
Render render.Renderer
CaptchaService v1.CaptchaService
UserService v1.UserService
MenuService v1.MenuService
}
func Routes(r chi.Router, cfg Config) {
app := NewApp(cfg.Log, cfg.Sm, cfg.Render, cfg.CaptchaService, cfg.UserService)
r.Get("/", app.login)
r.Post("/login", app.login)
r.With(mid.Authorize(cfg.Sm, cfg.MenuService)).Get("/logout", app.logout)
}