提交
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -21,5 +21,9 @@ Thumbs.db
|
|||||||
data/storage/*
|
data/storage/*
|
||||||
!data/storage/.gitkeep
|
!data/storage/.gitkeep
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
server/logs/
|
||||||
|
server/license.json
|
||||||
|
|
||||||
# Config (keep example)
|
# Config (keep example)
|
||||||
config/
|
config/
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
# =============================================
|
|
||||||
# 文件管理系统配置
|
# 文件管理系统配置
|
||||||
# =============================================
|
|
||||||
|
|
||||||
server:
|
server:
|
||||||
port: 8075
|
port: 8075
|
||||||
@@ -8,7 +6,7 @@ server:
|
|||||||
public_url: "http://127.0.0.1:5173"
|
public_url: "http://127.0.0.1:5173"
|
||||||
|
|
||||||
database:
|
database:
|
||||||
type: mysql # mysql / sqlserver / postgres
|
type: mysql
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
port: 3306
|
port: 3306
|
||||||
username: root
|
username: root
|
||||||
@@ -22,10 +20,9 @@ jwt:
|
|||||||
storage:
|
storage:
|
||||||
default_policy_id: 1
|
default_policy_id: 1
|
||||||
local_base_path: D:/Seeyon/A8/localfile
|
local_base_path: D:/Seeyon/A8/localfile
|
||||||
cdn_host: "http://127.0.0.1:3090"
|
cdn_host: ""
|
||||||
cdn_path_prefix: "/public"
|
cdn_path_prefix: ""
|
||||||
|
|
||||||
# 备份工具路径(留空则自动搜索)
|
|
||||||
backup:
|
backup:
|
||||||
mysqldump_path: ""
|
mysqldump_path: ""
|
||||||
mysql_path: ""
|
mysql_path: ""
|
||||||
@@ -33,7 +30,7 @@ backup:
|
|||||||
psql_path: ""
|
psql_path: ""
|
||||||
sqlcmd_path: ""
|
sqlcmd_path: ""
|
||||||
|
|
||||||
# 授权配置
|
|
||||||
license:
|
license:
|
||||||
file_path: "" # 授权文件路径, 留空则默认 ./license.json
|
file_path: ""
|
||||||
verify_url: "" # 远程验证接口(可选), 如 http://verify.example.com/api/license/verify
|
verify_url: ""
|
||||||
|
network: internal
|
||||||
|
|||||||
@@ -24,8 +24,9 @@ type Config struct {
|
|||||||
|
|
||||||
// LicenseConfig 授权配置
|
// LicenseConfig 授权配置
|
||||||
type LicenseConfig struct {
|
type LicenseConfig struct {
|
||||||
VerifyURL string `mapstructure:"verify_url"` // 远程验证接口地址(可选)
|
VerifyURL string `mapstructure:"verify_url"` // 远程验证接口地址(外网必填)
|
||||||
FilePath string `mapstructure:"file_path"` // 授权文件路径, 默认 ./license.json
|
FilePath string `mapstructure:"file_path"` // 授权文件路径, 默认 ./license.json
|
||||||
|
Network string `mapstructure:"network"` // 网络类型: internal=内网(仅本地校验) / external=外网(需远程验证)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BackupConfig 备份工具配置
|
// BackupConfig 备份工具配置
|
||||||
|
|||||||
@@ -3,7 +3,11 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
"seeyon-filesystem/api"
|
"seeyon-filesystem/api"
|
||||||
"seeyon-filesystem/config"
|
"seeyon-filesystem/config"
|
||||||
@@ -14,8 +18,16 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 将日志输出接入环形缓冲区(同时保留控制台输出)
|
// 日志输出: 控制台 + 内存缓冲区 + 按日期分割的文件
|
||||||
log.SetOutput(utils.LogBuf)
|
logDir := "logs"
|
||||||
|
os.MkdirAll(logDir, 0755)
|
||||||
|
logPath := filepath.Join(logDir, fmt.Sprintf("server_%s.log", time.Now().Format("20060102")))
|
||||||
|
logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
|
||||||
|
if err == nil {
|
||||||
|
log.SetOutput(io.MultiWriter(os.Stderr, logFile, utils.LogBuf))
|
||||||
|
} else {
|
||||||
|
log.SetOutput(io.MultiWriter(os.Stderr, utils.LogBuf))
|
||||||
|
}
|
||||||
|
|
||||||
cfg, err := config.Load()
|
cfg, err := config.Load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -339,34 +351,47 @@ func checkLicense(cfg config.LicenseConfig) error {
|
|||||||
licensePath = "license.json"
|
licensePath = "license.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := utils.ReadAndVerifyLicense(licensePath, cfg.VerifyURL, "seeyon-filesystem", "1.0")
|
// 读取授权文件
|
||||||
|
license, err := utils.ReadLicenseFile(licensePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 设置当前授权信息
|
||||||
|
utils.SetCurrentLicense(license)
|
||||||
|
|
||||||
|
// 根据网络类型选择验证方式
|
||||||
|
network := cfg.Network
|
||||||
|
if network == "" {
|
||||||
|
network = "internal"
|
||||||
|
}
|
||||||
|
|
||||||
|
if network == "external" && cfg.VerifyURL != "" {
|
||||||
|
// 外网: 调远程接口验证
|
||||||
|
resp, err := utils.ReadAndVerifyLicense(licensePath, cfg.VerifyURL, "seeyon-filesystem", "1.0")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if !resp.Valid {
|
if !resp.Valid {
|
||||||
return fmt.Errorf("%s", resp.Message)
|
return fmt.Errorf("%s", resp.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置当前授权信息
|
|
||||||
licPath := cfg.FilePath
|
|
||||||
if licPath == "" {
|
|
||||||
licPath = "license.json"
|
|
||||||
}
|
|
||||||
if licData, licErr := utils.ReadLicenseFile(licPath); licErr == nil {
|
|
||||||
utils.SetCurrentLicense(licData)
|
|
||||||
}
|
|
||||||
|
|
||||||
lic := utils.GetCurrentLicense()
|
|
||||||
features := ""
|
|
||||||
if lic != nil {
|
|
||||||
features = lic.Features
|
|
||||||
}
|
|
||||||
|
|
||||||
if resp.ExpireDays == -1 {
|
if resp.ExpireDays == -1 {
|
||||||
log.Printf("[授权] 企业版 - 永久授权, 用户上限: %d, 功能: %s", resp.MaxUsers, features)
|
log.Printf("[授权] 企业版(外网) - 永久授权, 用户上限: %d, 功能: %s", resp.MaxUsers, license.Features)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[授权] 企业版 - 有效期剩余 %d 天, 用户上限: %d, 功能: %s", resp.ExpireDays, resp.MaxUsers, features)
|
log.Printf("[授权] 企业版(外网) - 有效期剩余 %d 天, 用户上限: %d, 功能: %s", resp.ExpireDays, resp.MaxUsers, license.Features)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// 内网: 仅本地校验(解密 + 签名 + 机器码比对)
|
||||||
|
if err := utils.VerifyLicense(license); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
days := utils.GetLicenseExpireDays(license)
|
||||||
|
if days == -1 {
|
||||||
|
log.Printf("[授权] 企业版(内网) - 永久授权, 用户上限: %d, 功能: %s", license.MaxUsers, license.Features)
|
||||||
|
} else {
|
||||||
|
log.Printf("[授权] 企业版(内网) - 有效期剩余 %d 天, 用户上限: %d, 功能: %s", days, license.MaxUsers, license.Features)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
server/myapp
BIN
server/myapp
Binary file not shown.
Reference in New Issue
Block a user