feat: add Docker deployment and Microsoft OAuth support
This commit is contained in:
@@ -1,45 +1,76 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"mengpost-backend/config"
|
||||
"mengpost-backend/handlers"
|
||||
"mengpost-backend/middleware"
|
||||
)
|
||||
|
||||
// New 构建所有路由.
|
||||
func New(cfg *config.Config) *gin.Engine {
|
||||
r := gin.Default()
|
||||
|
||||
r.Use(cors.New(cors.Config{
|
||||
AllowOrigins: []string{"*"},
|
||||
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||||
AllowHeaders: []string{"Origin", "Content-Type", "Authorization", "X-Auth-Token"},
|
||||
ExposeHeaders: []string{"Content-Length"},
|
||||
AllowCredentials: false,
|
||||
MaxAge: 12 * time.Hour,
|
||||
}))
|
||||
|
||||
r.GET("/api/health", func(c *gin.Context) { c.JSON(200, gin.H{"ok": true}) })
|
||||
r.POST("/api/auth/verify", handlers.VerifyToken(cfg))
|
||||
|
||||
auth := r.Group("/api")
|
||||
auth.Use(middleware.TokenAuth(cfg.Token))
|
||||
{
|
||||
auth.GET("/accounts", handlers.ListAccounts)
|
||||
auth.POST("/accounts", handlers.CreateAccount)
|
||||
auth.PUT("/accounts/:id", handlers.UpdateAccount)
|
||||
auth.DELETE("/accounts/:id", handlers.DeleteAccount)
|
||||
|
||||
auth.GET("/accounts/:id/mailboxes", handlers.ListMailboxes)
|
||||
auth.GET("/accounts/:id/messages", handlers.ListMessages)
|
||||
auth.GET("/accounts/:id/messages/:uid", handlers.GetMessage)
|
||||
auth.POST("/accounts/:id/send", handlers.SendMessage)
|
||||
auth.GET("/accounts/:id/sent", handlers.ListSentLogs)
|
||||
}
|
||||
return r
|
||||
}
|
||||
package router
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"mengpost-backend/config"
|
||||
"mengpost-backend/handlers"
|
||||
"mengpost-backend/middleware"
|
||||
)
|
||||
|
||||
func corsConfig(cfg *config.Config) cors.Config {
|
||||
c := cors.Config{
|
||||
AllowMethods: []string{
|
||||
"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS",
|
||||
},
|
||||
AllowHeaders: []string{
|
||||
"Origin", "Content-Length", "Content-Type", "Accept",
|
||||
"Authorization", "X-Auth-Token", "X-Requested-With",
|
||||
},
|
||||
ExposeHeaders: []string{"Content-Length"},
|
||||
AllowCredentials: false,
|
||||
MaxAge: 12 * time.Hour,
|
||||
}
|
||||
raw := strings.TrimSpace(cfg.CORSAllowOrigins)
|
||||
if raw == "" || raw == "*" {
|
||||
// 生产/跨域穿透:允许任意 Origin(与 AllowCredentials=false 搭配,适合前后端分域名)
|
||||
c.AllowOriginFunc = func(origin string) bool { return true }
|
||||
return c
|
||||
}
|
||||
parts := strings.Split(raw, ",")
|
||||
for _, p := range parts {
|
||||
p = strings.TrimSpace(p)
|
||||
if p != "" {
|
||||
c.AllowOrigins = append(c.AllowOrigins, p)
|
||||
}
|
||||
}
|
||||
if len(c.AllowOrigins) == 0 {
|
||||
c.AllowOriginFunc = func(origin string) bool { return true }
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
// New 构建所有路由.
|
||||
func New(cfg *config.Config) *gin.Engine {
|
||||
r := gin.Default()
|
||||
|
||||
r.Use(cors.New(corsConfig(cfg)))
|
||||
|
||||
r.GET("/api/health", func(c *gin.Context) { c.JSON(200, gin.H{"ok": true}) })
|
||||
r.POST("/api/auth/verify", handlers.VerifyToken(cfg))
|
||||
r.GET("/api/oauth/microsoft/enabled", handlers.MicrosoftOAuthEnabled(cfg))
|
||||
r.GET("/api/oauth/microsoft/callback", handlers.MicrosoftOAuthCallback(cfg))
|
||||
|
||||
auth := r.Group("/api")
|
||||
auth.Use(middleware.TokenAuth(cfg.Token))
|
||||
{
|
||||
auth.GET("/oauth/microsoft/start", handlers.MicrosoftOAuthStart(cfg))
|
||||
auth.POST("/oauth/microsoft/finish", handlers.MicrosoftOAuthFinish())
|
||||
|
||||
auth.GET("/accounts", handlers.ListAccounts)
|
||||
auth.POST("/accounts", handlers.CreateAccount)
|
||||
auth.PUT("/accounts/:id", handlers.UpdateAccount)
|
||||
auth.DELETE("/accounts/:id", handlers.DeleteAccount)
|
||||
|
||||
auth.GET("/accounts/:id/mailboxes", handlers.ListMailboxes)
|
||||
auth.GET("/accounts/:id/messages", handlers.ListMessages)
|
||||
auth.GET("/accounts/:id/messages/:uid", handlers.GetMessage)
|
||||
auth.POST("/accounts/:id/send", handlers.SendMessage)
|
||||
auth.GET("/accounts/:id/sent", handlers.ListSentLogs)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user