Skip to content

Commit

Permalink
细节处理 发布 v1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmr-bot committed Apr 29, 2023
1 parent aaef541 commit cd182a7
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 30 deletions.
35 changes: 22 additions & 13 deletions Turbo/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,21 @@ import (
"github.com/ahmr-bot/MECDN/Turbo/pkg/config"
"github.com/ahmr-bot/MECDN/Turbo/pkg/router"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"log"
)

var (
ConfigPath string
)

func init() {
flag.StringVar(&ConfigPath, "c", "", "配置文件路径")
flag.StringVar(&ConfigPath, "c", "config.toml", "配置文件路径")
flag.Parse()
}
func main() {
// 初始化配置
config := config.NewConfig(ConfigPath)
// 创建白名单对象并加载初始白名单
whiteList := middleware.NewWhiteList()
if err := whiteList.LoadFromFile(config.WhiteListURL); err != nil {
panic(err)
}

// 定时更新白名单
go whiteList.UpdatePeriodically(config.WhiteListURL, config.WhiteListUpdateInterval)
Config := config.NewConfig(ConfigPath)

// 设置gin模式
pkg.SetMode()
Expand All @@ -37,16 +31,31 @@ func main() {
engine := gin.Default()

// 添加自定义响应头
engine.Use(middleware.ServerHeaderMiddleware(config.ServerName))
engine.Use(middleware.ServerHeaderMiddleware(Config.PoweredBy))

// 添加白名单验证中间件
engine.Use(middleware.WhiteListMiddleware(whiteList))
if viper.GetBool("whitelist.enabled") == true {
// 创建白名单对象并加载初始白名单
whiteList := middleware.NewWhiteList()
if err := whiteList.LoadFromFile(Config.WhiteListURL); err != nil {
panic(err)
}

// 定时更新白名单
go whiteList.UpdatePeriodically(Config.WhiteListURL, Config.WhiteListUpdateInterval)

log.Printf("白名单验证已启用")
engine.Use(middleware.WhiteListMiddleware(whiteList, Config.ServerName))
} else {
log.Printf("白名单验证已关闭")
}

// 注册路由
router.RegisterRoutes(engine)

// 启动服务器
addr := fmt.Sprintf("%s:%d", config.Host, config.Port)
addr := fmt.Sprintf("%s:%d", Config.Host, Config.Port)
log.Printf("服务器已启动,监听地址:" + Config.Host + ":" + fmt.Sprint(Config.Port))
if err := engine.Run(addr); err != nil {
panic(err)
}
Expand Down
6 changes: 4 additions & 2 deletions Turbo/config.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
[server]
host = "localhost"
port = 8080
name = "Five CDN Turbo V1.0"
name = "广东移动"
powered_by = "Five CDN Turbo V1.0"

[whitelist]
enabled = true
url = "https://mecdn.mcserverx.com/gh/ahmr-bot/MECDN-WhiteList/master/list.txt"
update_interval = "1s"
update_interval = "5m"

# 配置需要代理的域名和对应的路径
[[proxy]]
Expand Down
1 change: 1 addition & 0 deletions Turbo/middleware/header.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import "github.com/gin-gonic/gin"
func ServerHeaderMiddleware(serverName string) gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Server", serverName)
c.Writer.Header().Set("X-Powered-By", "FiveCDN Turbo")
c.Next()
}
}
12 changes: 10 additions & 2 deletions Turbo/middleware/whitelist.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,20 @@ func (wl *WhiteList) UpdatePeriodically(url string, interval time.Duration) {
}
}

func WhiteListMiddleware(whiteList *WhiteList) gin.HandlerFunc {
func WhiteListMiddleware(whiteList *WhiteList, ServerName string) gin.HandlerFunc {
return func(c *gin.Context) {
if whiteList.Contains(c.Request.URL.Path) {
c.Next()
return
}
c.AbortWithStatus(http.StatusForbidden)
// c.AbortWithStatus(http.StatusForbidden)
// 在 403页面 给用户返回 The URL is not in the whitelist
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
"ip": c.ClientIP(),
"message": "The URL you requested is not in the whitelist",
"status": http.StatusForbidden,
"powered_by": ServerName,
})

}
}
26 changes: 13 additions & 13 deletions Turbo/package.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#!/bin/bash

PROJECT=$1
VERSION=$2
PROJECT=Turbo
VERSION=$1
BUILD_DIR=./build
PKG_DIR=${BUILD_DIR}/${PROJECT}-${VERSION}
TAR_FILE=${BUILD_DIR}/${PROJECT}-${VERSION}.tar.gz

# 操作系统和架构列表
OS_ALL="linux windows darwin freebsd"
ARCH_ALL="386 amd64 arm arm64 mips64 mips64le mips mipsle riscv64"
OS_ALL="linux windows"
ARCH_ALL="386 amd64 arm arm64"

# 创建打包目录
mkdir -p ${PKG_DIR}
Expand All @@ -25,15 +25,15 @@ for OS in ${OS_ALL}; do

# 编译可执行文件
echo "Building ${FILENAME}..."
go build -o ${PKG_DIR}/${FILENAME} ./src/main.go
done
done
go build -o ${PKG_DIR}/${FILENAME} ./cmd

# 复制配置文件到打包目录
cp ./config.yml ${PKG_DIR}/
# 复制配置文件到打包目录
cp ./config.toml ${PKG_DIR}/

# 创建 tar 包
tar -czf ${TAR_FILE} -C ${BUILD_DIR} ${PROJECT}-${VERSION}
# 创建 tar 包
tar -czf ${TAR_FILE} -C ${BUILD_DIR} ${PROJECT}-${VERSION}

# 清理打包目录
rm -rf ${PKG_DIR}
# 清理打包目录
rm -rf ${PKG_DIR}
done
done
2 changes: 2 additions & 0 deletions Turbo/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ type Config struct {
Host string
Port int
ServerName string
PoweredBy string
WhiteListURL string
WhiteListUpdateInterval time.Duration
}
Expand All @@ -24,6 +25,7 @@ func NewConfig(configFile string) *Config {
Host: viper.GetString("server.host"),
Port: viper.GetInt("server.port"),
ServerName: viper.GetString("server.name"),
PoweredBy: viper.GetString("server.powered_by"),
WhiteListURL: viper.GetString("whitelist.url"),
WhiteListUpdateInterval: viper.GetDuration("whitelist.update_interval"),
}
Expand Down
3 changes: 3 additions & 0 deletions Turbo/pkg/mode.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ package pkg
import (
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"log"
)

func SetMode() {
// 模式切换
if viper.GetBool("debug.debug") == true {
gin.SetMode(gin.DebugMode)
log.Printf("当前模式:Debug")
} else {
gin.SetMode(gin.ReleaseMode)
log.Printf("当前模式:Release")
}
}

0 comments on commit cd182a7

Please sign in to comment.