63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package middleware
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/unrolled/secure"
|
||
)
|
||
|
||
// TLSConfig TLS配置
|
||
type TLSConfig struct {
|
||
// SSLHost SSL主机地址(例如:localhost:443)
|
||
SSLHost string
|
||
// SSLRedirect 是否重定向到HTTPS
|
||
SSLRedirect bool
|
||
}
|
||
|
||
// 默认TLS配置
|
||
var defaultTLSConfig = TLSConfig{
|
||
SSLHost: "localhost:443",
|
||
SSLRedirect: true,
|
||
}
|
||
|
||
// SetTLSConfig 设置TLS配置
|
||
func SetTLSConfig(cfg TLSConfig) {
|
||
defaultTLSConfig = cfg
|
||
}
|
||
|
||
// LoadTls TLS加载中间件(与 kra 保持一致)
|
||
// 用https把这个中间件在router里面use一下就好
|
||
func LoadTls() gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
middleware := secure.New(secure.Options{
|
||
SSLRedirect: defaultTLSConfig.SSLRedirect,
|
||
SSLHost: defaultTLSConfig.SSLHost,
|
||
})
|
||
err := middleware.Process(c.Writer, c.Request)
|
||
if err != nil {
|
||
// 如果出现错误,请不要继续
|
||
fmt.Println(err)
|
||
return
|
||
}
|
||
// 继续往下处理
|
||
c.Next()
|
||
}
|
||
}
|
||
|
||
// LoadTlsWithConfig 使用自定义配置的TLS加载中间件
|
||
func LoadTlsWithConfig(cfg TLSConfig) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
middleware := secure.New(secure.Options{
|
||
SSLRedirect: cfg.SSLRedirect,
|
||
SSLHost: cfg.SSLHost,
|
||
})
|
||
err := middleware.Process(c.Writer, c.Request)
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
return
|
||
}
|
||
c.Next()
|
||
}
|
||
}
|