mirror of
https://github.com/isboyjc/GoProxy.git
synced 2026-05-11 10:00:27 +08:00
feat: support WEBUI_PASSWORD env var with default password
Set default WebUI password to "proxygo" and allow customization via WEBUI_PASSWORD environment variable, eliminating the need to manually compute SHA256 hashes and modify source code.
This commit is contained in:
22
README.md
22
README.md
@@ -176,18 +176,22 @@ docker compose up -d --build
|
|||||||
|
|
||||||
### 登录密码说明
|
### 登录密码说明
|
||||||
|
|
||||||
当前版本在代码里只保存了 WebUI 密码的 SHA256 哈希值,默认明文密码没有在仓库中说明,也不能通过 `config.json` 或 WebUI 修改。
|
默认密码为 `proxygo`,程序启动时会在日志中提示。
|
||||||
|
|
||||||
如果你要自定义密码,当前可行方式是:
|
可通过环境变量 `WEBUI_PASSWORD` 自定义密码:
|
||||||
|
|
||||||
1. 生成密码的 SHA256
|
|
||||||
2. 修改 `config/config.go` 中的 `WebUIPasswordHash`
|
|
||||||
3. 重新构建并启动程序
|
|
||||||
|
|
||||||
例如生成 SHA256:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
printf 'your-password' | shasum -a 256
|
# 本地运行
|
||||||
|
WEBUI_PASSWORD=your-password go run .
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
docker run -e WEBUI_PASSWORD=your-password ...
|
||||||
|
```
|
||||||
|
|
||||||
|
也可以在 `docker-compose.yml` 的 `environment` 中添加:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- WEBUI_PASSWORD=your-password
|
||||||
```
|
```
|
||||||
|
|
||||||
## API 概览
|
## API 概览
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const DefaultPassword = "proxygo"
|
||||||
|
|
||||||
func dataDir() string {
|
func dataDir() string {
|
||||||
if d := os.Getenv("DATA_DIR"); d != "" {
|
if d := os.Getenv("DATA_DIR"); d != "" {
|
||||||
os.MkdirAll(d, 0755)
|
os.MkdirAll(d, 0755)
|
||||||
@@ -63,10 +67,19 @@ var (
|
|||||||
cfgMu sync.RWMutex
|
cfgMu sync.RWMutex
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func passwordHash(plain string) string {
|
||||||
|
return fmt.Sprintf("%x", sha256.Sum256([]byte(plain)))
|
||||||
|
}
|
||||||
|
|
||||||
func DefaultConfig() *Config {
|
func DefaultConfig() *Config {
|
||||||
|
// 优先从环境变量 WEBUI_PASSWORD 读取密码,未设置时使用默认密码
|
||||||
|
password := os.Getenv("WEBUI_PASSWORD")
|
||||||
|
if password == "" {
|
||||||
|
password = DefaultPassword
|
||||||
|
}
|
||||||
return &Config{
|
return &Config{
|
||||||
WebUIPort: ":7778",
|
WebUIPort: ":7778",
|
||||||
WebUIPasswordHash: "64c2de42ff93286f5c7108867ffe3167a24f4c1abee648dea7bc7fa1d11e2b21",
|
WebUIPasswordHash: passwordHash(password),
|
||||||
ProxyPort: ":7777",
|
ProxyPort: ":7777",
|
||||||
DBPath: dataDir() + "proxy.db",
|
DBPath: dataDir() + "proxy.db",
|
||||||
ValidateConcurrency: 300,
|
ValidateConcurrency: 300,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=Asia/Shanghai
|
- TZ=Asia/Shanghai
|
||||||
- DATA_DIR=/app/data
|
- DATA_DIR=/app/data
|
||||||
|
# - WEBUI_PASSWORD=your-password # 自定义 WebUI 登录密码,默认: proxygo
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "wget", "-qO-", "http://localhost:7778/"]
|
test: ["CMD", "wget", "-qO-", "http://localhost:7778/"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
|
|||||||
8
main.go
8
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@@ -26,6 +27,13 @@ func main() {
|
|||||||
// 加载配置(优先读取 config.json)
|
// 加载配置(优先读取 config.json)
|
||||||
cfg := config.Load()
|
cfg := config.Load()
|
||||||
|
|
||||||
|
// 提示密码信息
|
||||||
|
if os.Getenv("WEBUI_PASSWORD") == "" {
|
||||||
|
log.Printf("[main] WebUI 使用默认密码: %s(可通过环境变量 WEBUI_PASSWORD 自定义)", config.DefaultPassword)
|
||||||
|
} else {
|
||||||
|
log.Println("[main] WebUI 密码已通过环境变量 WEBUI_PASSWORD 设置")
|
||||||
|
}
|
||||||
|
|
||||||
// 初始化存储
|
// 初始化存储
|
||||||
store, err := storage.New(cfg.DBPath)
|
store, err := storage.New(cfg.DBPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user