mirror of
https://github.com/woodchen-ink/proxy-go.git
synced 2025-07-18 16:41:54 +08:00
feat(config): 添加默认配置文件创建功能
- 实现 createDefaultConfig 方法,在配置文件不存在时自动创建默认配置 - 移除 config.json 中的固定路径配置 - 支持自动创建配置文件目录 - 提供默认的压缩和路由配置
This commit is contained in:
parent
7f4a964163
commit
64423b00e2
@ -23,17 +23,5 @@
|
|||||||
"Enabled": false,
|
"Enabled": false,
|
||||||
"Level": 4
|
"Level": 4
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"FixedPaths": [
|
|
||||||
{
|
|
||||||
"Path": "/cdnjs",
|
|
||||||
"TargetHost": "cdnjs.cloudflare.com",
|
|
||||||
"TargetURL": "https://cdnjs.cloudflare.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Path": "/jsdelivr",
|
|
||||||
"TargetHost": "cdn.jsdelivr.net",
|
|
||||||
"TargetURL": "https://cdn.jsdelivr.net"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
@ -3,6 +3,7 @@ package config
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@ -48,10 +49,55 @@ func Load(path string) (*Config, error) {
|
|||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
instance = &configImpl{}
|
instance = &configImpl{}
|
||||||
err = instance.reload(path)
|
err = instance.reload(path)
|
||||||
|
// 如果文件不存在,创建默认配置并重新加载
|
||||||
|
if err != nil && os.IsNotExist(err) {
|
||||||
|
if createErr := createDefaultConfig(path); createErr == nil {
|
||||||
|
err = instance.reload(path)
|
||||||
|
} else {
|
||||||
|
err = createErr
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
return &instance.Config, err
|
return &instance.Config, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// createDefaultConfig 创建默认配置文件
|
||||||
|
func createDefaultConfig(path string) error {
|
||||||
|
// 创建目录(如果不存在)
|
||||||
|
dir := path[:strings.LastIndex(path, "/")]
|
||||||
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建默认配置
|
||||||
|
defaultConfig := Config{
|
||||||
|
MAP: map[string]PathConfig{
|
||||||
|
"/": {
|
||||||
|
DefaultTarget: "http://localhost:8080",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Compression: CompressionConfig{
|
||||||
|
Gzip: CompressorConfig{
|
||||||
|
Enabled: true,
|
||||||
|
Level: 6,
|
||||||
|
},
|
||||||
|
Brotli: CompressorConfig{
|
||||||
|
Enabled: true,
|
||||||
|
Level: 6,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
data, err := json.MarshalIndent(defaultConfig, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入文件
|
||||||
|
return os.WriteFile(path, data, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
// RegisterUpdateCallback 注册配置更新回调函数
|
// RegisterUpdateCallback 注册配置更新回调函数
|
||||||
func RegisterUpdateCallback(callback func(*Config)) {
|
func RegisterUpdateCallback(callback func(*Config)) {
|
||||||
callbackMutex.Lock()
|
callbackMutex.Lock()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user