重构HttpServer
This commit is contained in:
parent
e6d412c114
commit
4f9086650e
13
src/server/handle/auth.go
Normal file
13
src/server/handle/auth.go
Normal file
|
@ -0,0 +1,13 @@
|
|||
package handle
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func AuthMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
|
||||
// 进行身份认证
|
||||
c.Next()
|
||||
}
|
||||
}
|
|
@ -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
17
src/server/handle/conf.go
Normal 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))
|
||||
}
|
34
src/server/handle/error.go
Normal file
34
src/server/handle/error.go
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
|
|
19
src/server/model/app-error.go
Normal file
19
src/server/model/app-error.go
Normal 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,
|
||||
}
|
||||
}
|
27
src/server/model/result.go
Normal file
27
src/server/model/result.go
Normal 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,
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user