This commit is contained in:
WJQSERVER 2024-10-08 05:28:56 +08:00
parent f5d7d0994e
commit dc8f4a28e9
9 changed files with 112 additions and 13 deletions

View file

@ -1,5 +1,14 @@
# 更新日志 # 更新日志
24w11a
---
- PRE-RELEASE: 此版本是v1.4.0的预发布版本,请勿在生产环境中使用
- **ANNOUNCE**: 自此版本起,DEV版本号格式进行修改,小版本号不再仅限于a/b,而是采用字母表顺序进行排列,此修改将带来一个重要改变,正式版前的预发布版本的数字版本号将会统一,以便于版本管理与发布管理
- CHANGE: 优化代码结构,提升性能
- ADD: 新增auth子模块whitelist.go,支持白名单功能
- ADD: 新增whitelist.json文件,用于配置白名单
- FIX: 由于新加入未在原开发路线上计划的白名单功能,导致函数命名冲突,在此修复blacklist.go的函数命名问题
v1.3.1 v1.3.1
--- ---
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
@ -8,6 +17,7 @@ v1.3.1
24w10a 24w10a
--- ---
- PRE-RELEASE: 此版本是v1.3.1的预发布版本,请勿在生产环境中使用
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
- CHANGE: 剃刀计划,减少多余日志输出 - CHANGE: 剃刀计划,减少多余日志输出
- CHANGE: 调整缓存参数 - CHANGE: 调整缓存参数
@ -24,12 +34,14 @@ v1.3.0
24w09b 24w09b
--- ---
- PRE-RELEASE: 此版本是v1.3.0的预发布版本,请勿在生产环境中使用
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
- CHANGE: 修正配置,提升稳定性 - CHANGE: 修正配置,提升稳定性
- WARNING: 此版本配置文件重构,此版本不再向前兼容,请注意备份文件并重新部署 - WARNING: 此版本配置文件重构,此版本不再向前兼容,请注意备份文件并重新部署
24w09a 24w09a
--- ---
- PRE-RELEASE: 此版本是v1.3.0的预发布版本,请勿在生产环境中使用
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
- CHANGE: 优化黑名单功能,提升稳定性 - CHANGE: 优化黑名单功能,提升稳定性
- CHANGE&ADD: 新增auth子模块blacklist.go - CHANGE&ADD: 新增auth子模块blacklist.go
@ -38,6 +50,7 @@ v1.3.0
24w08b 24w08b
--- ---
- PRE-RELEASE: 此版本是v1.3.0的预发布版本,请勿在生产环境中使用
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
- ADD & CHANGE: 新增仓库黑名单功能,改进Auth模块 - ADD & CHANGE: 新增仓库黑名单功能,改进Auth模块
- ADD: 新增blacklist.yaml文件,用于配置仓库黑名单 - ADD: 新增blacklist.yaml文件,用于配置仓库黑名单
@ -54,6 +67,7 @@ v1.2.0
24w08a 24w08a
--- ---
- PRE-RELEASE: 此版本是v1.2.0的预发布版本,请勿在生产环境中使用
- CHANGE: 同步更新logger模块与golang-temp项目定义的开发规范保持一致 - CHANGE: 同步更新logger模块与golang-temp项目定义的开发规范保持一致
- ADD: 新增日志翻转功能 - ADD: 新增日志翻转功能
@ -65,12 +79,14 @@ v1.1.1
24w07b 24w07b
--- ---
- PRE-RELEASE: 此版本是v1.1.1的预发布版本,请勿在生产环境中使用
- CHANGE: 修改部分代码与golang-temp项目定义的开发规范保持一致 - CHANGE: 修改部分代码与golang-temp项目定义的开发规范保持一致
- CHANGE: 更新Go版本至v1.23.2 - CHANGE: 更新Go版本至v1.23.2
- CHANGE: 跟随Caddy更新,修改Caddyfile配置 - CHANGE: 跟随Caddy更新,修改Caddyfile配置
24w07a 24w07a
--- ---
- PRE-RELEASE: 此版本是v1.1.1的预发布版本,请勿在生产环境中使用
- CHANGE: 修改部分代码与golang-temp项目定义的开发规范保持一致 - CHANGE: 修改部分代码与golang-temp项目定义的开发规范保持一致
- CHANGE: 更新Go版本至v1.23.2 - CHANGE: 更新Go版本至v1.23.2
@ -85,6 +101,7 @@ v1.1.0
24w06b 24w06b
--- ---
- PRE-RELEASE: 此版本是v1.1.0的预发布版本,请勿在生产环境中使用
- CHANGE: 优化代码结构,对main函数进行模块化,提升可读性 - CHANGE: 优化代码结构,对main函数进行模块化,提升可读性
- CHANGE: Docker代理功能移至DEV版本内,保证稳定性 - CHANGE: Docker代理功能移至DEV版本内,保证稳定性
- ADD&CHANGE: 增加Auth(用户鉴权)模块,并改进其的错误处理与日志记录 - ADD&CHANGE: 增加Auth(用户鉴权)模块,并改进其的错误处理与日志记录
@ -94,6 +111,7 @@ v1.1.0
v1.0.0 v1.0.0
--- ---
- **ANNOUNCE**: 项目正式发布, 并迁移至[WJQSERVER-STUDIO/ghproxy](https://github.com/WJQSERVER-STUDIO/ghproxy)由Apache License Version 2.0转为WJQserver Studio License 请注意相关条例变更
- CHANGE: 项目正式发布, 并迁移至[WJQSERVER-STUDIO/ghproxy](https://github.com/WJQSERVER-STUDIO/ghproxy) - CHANGE: 项目正式发布, 并迁移至[WJQSERVER-STUDIO/ghproxy](https://github.com/WJQSERVER-STUDIO/ghproxy)
- CHANGE: 再次重构代码,优化性能,提升稳定性 - CHANGE: 再次重构代码,优化性能,提升稳定性
- CHANGE: 使用golang-temp项目作为底层构建,标准化日志与配置模块 - CHANGE: 使用golang-temp项目作为底层构建,标准化日志与配置模块
@ -101,6 +119,7 @@ v1.0.0
24w06a 24w06a
--- ---
- PRE-RELEASE: 此版本是v1.0.0的预发布版本,请勿在生产环境中使用
- CHANGE: 与v1.0.0版本同步 - CHANGE: 与v1.0.0版本同步
v0.2.0 v0.2.0
@ -112,21 +131,25 @@ v0.2.0
24w05b 24w05b
--- ---
- PRE-RELEASE: 此版本是v0.2.0的预发布版本,请勿在生产环境中使用
- CHANGE: 重命名proxychrome函数 - CHANGE: 重命名proxychrome函数
- ADD: 增加多处日志记录,便于审计与排障 - ADD: 增加多处日志记录,便于审计与排障
24w05a 24w05a
--- ---
- PRE-RELEASE: 此版本是v0.2.0的预发布版本,请勿在生产环境中使用
- FIX 修正上一版本的req请求未继承请求方式的问题 - FIX 修正上一版本的req请求未继承请求方式的问题
- CHANGE: 优化代码结构,进一步模块化,同时提升性能 - CHANGE: 优化代码结构,进一步模块化,同时提升性能
24w04b 24w04b
--- ---
- PRE-RELEASE: 此版本是v0.2.0的预发布版本,请勿在生产环境中使用
- CHANGE: 更换Docker基础镜像为daily版本 - CHANGE: 更换Docker基础镜像为daily版本
- ADD 新增使用req库实现代理请求,使用chrome TLS指纹发起请求 - ADD 新增使用req库实现代理请求,使用chrome TLS指纹发起请求
24w04a 24w04a
--- ---
- PRE-RELEASE: 此版本是v0.2.0的预发布版本,请勿在生产环境中使用
- CHANGE: 调整程序结构,使用init函数初始化配置,并优化代码结构 - CHANGE: 调整程序结构,使用init函数初始化配置,并优化代码结构
v0.1.7 v0.1.7
@ -135,6 +158,7 @@ v0.1.7
24w03b 24w03b
--- ---
- PRE-RELEASE: 此版本是v0.1.7的预发布版本,请勿在生产环境中使用
- CHANGE: 合入上游(wjqserver/caddy:latest)安全更新, 增强镜像安全性 - CHANGE: 合入上游(wjqserver/caddy:latest)安全更新, 增强镜像安全性
v0.1.6 v0.1.6
@ -144,6 +168,7 @@ v0.1.6
24w03a 24w03a
--- ---
- PRE-RELEASE: 此版本是v0.1.6的预发布版本,请勿在生产环境中使用
- CHANGE: 改进Docker代理相关Caddy配置 - CHANGE: 改进Docker代理相关Caddy配置
- ADD: 新增跨域配置选项 - ADD: 新增跨域配置选项
@ -154,16 +179,17 @@ v0.1.5
24w02b 24w02b
--- ---
- PRE-RELEASE: 此版本是v0.1.5的预发布版本,请勿在生产环境中使用
- ADD: 新增Docker代理 (未并入正式版) - ADD: 新增Docker代理 (未并入正式版)
24w02a 24w02a
--- ---
- PRE-RELEASE: 此版本是v0.1.5的预发布版本,请勿在生产环境中使用
- CHANGE: 更新Go版本至v1.23.1 - CHANGE: 更新Go版本至v1.23.1
- CHANGE: 优化代码行为 - CHANGE: 优化代码行为
v0.1.4 v0.1.4
--- ---
正式版24w01b内容更新
- ADD: 新增外部文件配置功能 - ADD: 新增外部文件配置功能
- ADD: 新增日志功能 - ADD: 新增日志功能
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
@ -171,7 +197,7 @@ v0.1.4
24w01b 24w01b
--- ---
标志着项目正式进入自主开发阶段 - PRE-RELEASE: 此版本是v0.1.4的预发布版本,请勿在生产环境中使用
- ADD: 新增外部文件配置功能 - ADD: 新增外部文件配置功能
- ADD: 新增日志功能 - ADD: 新增日志功能
- CHANGE: 优化代码结构,提升性能 - CHANGE: 优化代码结构,提升性能
@ -179,12 +205,13 @@ v0.1.4
v0.1.3 v0.1.3
--- ---
开始自行维护项目,脱离上游更新 - **ANNOUNCE**: 开始自行维护项目,脱离上游更新
- CHANGE: 改进已有实现,增强程序稳定性 - CHANGE: 改进已有实现,增强程序稳定性
24w01a 24w01a
--- ---
首个DEV版本 - PRE-RELEASE: 此版本是v0.1.3的预发布版本,请勿在生产环境中使用
- **ANNOUNCE**: 首个DEV版本发布
- CHANGE: 同步更新 - CHANGE: 同步更新
v0.1.2 v0.1.2

View file

@ -1 +1 @@
24w10a 24w11a

View file

@ -6,19 +6,19 @@ import (
"os" "os"
) )
type Config struct { type BlacklistConfig struct {
Blacklist []string `json:"blacklist"` Blacklist []string `json:"blacklist"`
} }
var ( var (
cfg *config.Config cfg *config.Config
blacklistfile = "/data/ghproxy/config/blacklist.json" blacklistfile = "/data/ghproxy/config/blacklist.json"
blacklist *Config blacklist *BlacklistConfig
) )
func LoadBlacklist(cfg *config.Config) { func LoadBlacklist(cfg *config.Config) {
blacklistfile = cfg.Blacklist.BlacklistFile blacklistfile = cfg.Blacklist.BlacklistFile
blacklist = &Config{} blacklist = &BlacklistConfig{}
data, err := os.ReadFile(blacklistfile) data, err := os.ReadFile(blacklistfile)
if err != nil { if err != nil {
@ -32,10 +32,10 @@ func LoadBlacklist(cfg *config.Config) {
} }
func CheckBlacklist(fullrepo string) bool { func CheckBlacklist(fullrepo string) bool {
return forRangeCheck(blacklist.Blacklist, fullrepo) return forRangeCheckBlacklist(blacklist.Blacklist, fullrepo)
} }
func forRangeCheck(blist []string, fullrepo string) bool { func forRangeCheckBlacklist(blist []string, fullrepo string) bool {
for _, blocked := range blist { for _, blocked := range blist {
if blocked == fullrepo { if blocked == fullrepo {
return true return true

44
auth/whitelist.go Normal file
View file

@ -0,0 +1,44 @@
package auth
import (
"encoding/json"
"ghproxy/config"
"os"
)
type WhitelistConfig struct {
Whitelist []string `json:"whitelist"`
}
var (
whitelistfile = "/data/ghproxy/config/whitelist.json"
whitelist *WhitelistConfig
)
func LoadWhitelist(cfg *config.Config) {
whitelistfile = cfg.Whitelist.WhitelistFile
whitelist = &WhitelistConfig{}
data, err := os.ReadFile(whitelistfile)
if err != nil {
logw("Failed to read whitelist file: %v", err)
}
err = json.Unmarshal(data, whitelist)
if err != nil {
logw("Failed to unmarshal whitelist JSON: %v", err)
}
}
func CheckWhitelist(fullrepo string) bool {
return forRangeCheckWhitelist(whitelist.Whitelist, fullrepo)
}
func forRangeCheckWhitelist(blist []string, fullrepo string) bool {
for _, blocked := range blist {
if blocked == fullrepo {
return true
}
}
return false
}

View file

@ -31,6 +31,11 @@ type Config struct {
Enabled bool `yaml:"enabled"` Enabled bool `yaml:"enabled"`
BlacklistFile string `yaml:"blacklistfile"` BlacklistFile string `yaml:"blacklistfile"`
} `yaml:"blacklist"` } `yaml:"blacklist"`
Whitelist struct {
Enabled bool `yaml:"enabled"`
WhitelistFile string `yaml:"whitelistfile"`
} `yaml:"whitelist"`
} }
// LoadConfig 从 YAML 配置文件加载配置 // LoadConfig 从 YAML 配置文件加载配置

View file

@ -20,5 +20,10 @@ auth:
# Blacklist Configuration # Blacklist Configuration
blacklist: blacklist:
enabled: true enabled: false
blacklistfile: "/data/ghproxy/config/blacklist.json" blacklistfile: "/data/ghproxy/config/blacklist.json"
# Whitelist Configuration
whitelist:
enabled: false
whitelistfile: "/data/ghproxy/config/whitelist.json"

8
config/whitelist.json Normal file
View file

@ -0,0 +1,8 @@
{
"whitelist": [
"test/test1",
"example/repo2",
"another/repo3"
]
}

View file

@ -53,14 +53,15 @@ func setupLogger() {
logw("Init Completed") logw("Init Completed")
} }
func LoadBlacklist(cfg *config.Config) { func Loadlist(cfg *config.Config) {
auth.LoadBlacklist(cfg) auth.LoadBlacklist(cfg)
auth.LoadWhitelist(cfg)
} }
func init() { func init() {
loadConfig() loadConfig()
setupLogger() setupLogger()
LoadBlacklist(cfg) Loadlist(cfg)
// 设置 Gin 模式 // 设置 Gin 模式
gin.SetMode(gin.ReleaseMode) gin.SetMode(gin.ReleaseMode)

View file

@ -55,6 +55,15 @@ func NoRouteHandler(cfg *config.Config) gin.HandlerFunc {
logw("Blacklist Check > Username: %s, Repo: %s", username, repo) logw("Blacklist Check > Username: %s, Repo: %s", username, repo)
fullrepo := fmt.Sprintf("%s/%s", username, repo) fullrepo := fmt.Sprintf("%s/%s", username, repo)
// 白名单检查
whitelistpass := auth.CheckWhitelist(fullrepo)
if !whitelistpass {
errMsg := fmt.Sprintf("Whitelist Blocked repo: %s", fullrepo)
c.JSON(http.StatusForbidden, gin.H{"error": errMsg})
logw(errMsg)
return
}
// 黑名单检查 // 黑名单检查
blacklistpass := auth.CheckBlacklist(fullrepo) blacklistpass := auth.CheckBlacklist(fullrepo)
if blacklistpass { if blacklistpass {