重构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
|
package handle
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"acme-mana/src/conf"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetCert(context *gin.Context) {
|
var CertHandlerInstance = &CertHandler{}
|
||||||
log.Println("get cert")
|
|
||||||
|
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")
|
log.Fatalln("refresh cert")
|
||||||
}
|
}
|
||||||
|
|
||||||
func domainList(context *gin.Context) {
|
func (h *CertHandler) DomainList(context *gin.Context) {
|
||||||
log.Fatalln("domain list")
|
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() {
|
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.engine = gin.Default()
|
||||||
s.register()
|
s.register()
|
||||||
s.status = false
|
s.status = false
|
||||||
|
|
||||||
config := conf.Config()
|
|
||||||
var serverConf = config.Server
|
|
||||||
s.server = &http.Server{
|
s.server = &http.Server{
|
||||||
Addr: serverConf.Host + ":" + strconv.Itoa(serverConf.Port),
|
Addr: host + ":" + strconv.Itoa(port),
|
||||||
Handler: s.engine,
|
Handler: s.engine,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *HttpServer) Start() {
|
func (s *HttpServer) Start() {
|
||||||
|
if s.status {
|
||||||
|
return
|
||||||
|
}
|
||||||
go func() {
|
go func() {
|
||||||
if err := s.server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
if err := s.server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
||||||
log.Printf("listen: %s\n\n", err)
|
log.Printf("listen: %s\n\n", err)
|
||||||
|
@ -58,7 +66,14 @@ func Status() bool {
|
||||||
|
|
||||||
func (s *HttpServer) register() {
|
func (s *HttpServer) register() {
|
||||||
service := s.engine
|
service := s.engine
|
||||||
service.GET("/api/v1/refresh", handle.RefreshCert)
|
service.Use(gin.Logger())
|
||||||
service.GET("/api/v1/cert", handle.GetCert)
|
service.Use(handle.GlobalErrorHandler())
|
||||||
service.GET("/api/v1/domain/list", handle.GetCert)
|
|
||||||
|
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