重构HttpServer

This commit is contained in:
ZhuoQinghui 2024-12-27 14:53:35 +08:00
parent e6d412c114
commit 4f9086650e
7 changed files with 142 additions and 10 deletions

13
src/server/handle/auth.go Normal file
View File

@ -0,0 +1,13 @@
package handle
import (
"github.com/gin-gonic/gin"
)
func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// 进行身份认证
c.Next()
}
}

View File

@ -1,18 +1,25 @@
package handle
import (
"acme-mana/src/conf"
"github.com/gin-gonic/gin"
"log"
)
func GetCert(context *gin.Context) {
log.Println("get cert")
var CertHandlerInstance = &CertHandler{}
type CertHandler struct {
}
func RefreshCert(context *gin.Context) {
func (h *CertHandler) Get(c *gin.Context) {
log.Println("get cert")
c.JSON(200, conf.Config())
}
func (h *CertHandler) Refresh(context *gin.Context) {
log.Fatalln("refresh cert")
}
func domainList(context *gin.Context) {
func (h *CertHandler) DomainList(context *gin.Context) {
log.Fatalln("domain list")
}

17
src/server/handle/conf.go Normal file
View File

@ -0,0 +1,17 @@
package handle
import (
"acme-mana/src/conf"
"acme-mana/src/server/model"
"github.com/gin-gonic/gin"
)
var ConfHandlerInstance = &ConfHandler{}
type ConfHandler struct {
}
func (h *ConfHandler) Get(c *gin.Context) {
config := conf.Config()
c.JSON(200, model.SuccessD(config))
}

View File

@ -0,0 +1,34 @@
package handle
import (
"acme-mana/src/server/model"
"github.com/gin-gonic/gin"
"net/http"
)
// GlobalErrorHandler 是一个全局错误处理器中间件
func GlobalErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
// 继续执行后续中间件和处理函数
c.Next()
// 获取上下文中的错误
if err, ok := c.Get("error"); ok {
switch typedErr := err.(type) {
case *model.AppError:
c.JSON(200, &model.Result{
Code: typedErr.Code,
Message: typedErr.Message,
Data: nil,
})
default:
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Internal Server Error",
"success": false,
})
}
c.Abort()
return
}
}
}

View File

@ -19,19 +19,27 @@ type HttpServer struct {
}
func (s *HttpServer) InitServer() {
config := conf.Config()
var serverConf = config.Server
s.initServer(serverConf.Host, serverConf.Port)
}
// initServer 初始化
func (s *HttpServer) initServer(host string, port int) {
s.engine = gin.Default()
s.register()
s.status = false
config := conf.Config()
var serverConf = config.Server
s.server = &http.Server{
Addr: serverConf.Host + ":" + strconv.Itoa(serverConf.Port),
Addr: host + ":" + strconv.Itoa(port),
Handler: s.engine,
}
}
func (s *HttpServer) Start() {
if s.status {
return
}
go func() {
if err := s.server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
log.Printf("listen: %s\n\n", err)
@ -58,7 +66,14 @@ func Status() bool {
func (s *HttpServer) register() {
service := s.engine
service.GET("/api/v1/refresh", handle.RefreshCert)
service.GET("/api/v1/cert", handle.GetCert)
service.GET("/api/v1/domain/list", handle.GetCert)
service.Use(gin.Logger())
service.Use(handle.GlobalErrorHandler())
certHandler := handle.CertHandlerInstance
certGroup := service.Group("/api/v1/cert", handle.AuthMiddleware())
certGroup.GET("/", certHandler.Get)
confHandler := handle.ConfHandlerInstance
confGroup := service.Group("/api/v1", handle.AuthMiddleware())
confGroup.GET("/conf", confHandler.Get)
}

View File

@ -0,0 +1,19 @@
package model
type AppError struct {
Code int `json:"code"`
Message string `json:"message"`
}
// Error 实现 error 接口
func (e *AppError) Error() string {
return e.Message
}
// NewAppError 创建一个新的 AppError
func NewAppError(code int, message string) *AppError {
return &AppError{
Code: code,
Message: message,
}
}

View File

@ -0,0 +1,27 @@
package model
type Result struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data"`
}
func (r Result) SetData(data any) Result {
r.Data = data
return r
}
func Success() *Result {
return &Result{
Code: 200,
Message: "success",
}
}
func SuccessD(data any) *Result {
return &Result{
Code: 200,
Message: "success",
Data: data,
}
}