更新底层架构

This commit is contained in:
2026-03-18 21:51:17 +08:00
parent b69c6ccbca
commit 68bea98b81
71 changed files with 5220 additions and 7619 deletions

View File

@@ -1,186 +1,232 @@
package database
import (
"networkDev/models"
"networkDev/utils"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
// ============================================================================
// 公共函数
// ============================================================================
// SeedDefaultSettings 初始化默认系统设置
// - 检查各项设置是否已存在,如不存在则创建默认值
// - 包含站点基本信息、SEO设置等常用配置项
func SeedDefaultSettings() error {
db, err := GetDB()
if err != nil {
return err
}
// 定义默认设置项
defaultSettings := []models.Settings{
{
Name: "site_title",
Value: "凌动技术",
Description: "网站标题,显示在浏览器标题栏和页面顶部",
},
{
Name: "site_keywords",
Value: "验证,网络,管理系统,网络验证,卡密管理,账户管理",
Description: "网站关键词用于SEO优化多个关键词用逗号分隔",
},
{
Name: "site_description",
Value: "专业的网络验证管理系统,提供便捷的在线网络验证服务和设备管理功能",
Description: "网站描述用于SEO优化和社交媒体分享",
},
{
Name: "site_logo",
Value: "/favicon.ico",
Description: "网站Logo图片路径",
},
{
Name: "contact_email",
Value: "admin@example.com",
Description: "联系邮箱,用于客服和业务咨询",
},
{
Name: "max_upload_size",
Value: "10485760",
Description: "文件上传最大尺寸字节默认10MB",
},
{
Name: "default_user_role",
Value: "1",
Description: "新用户默认角色0=管理员1=普通用户",
},
{
Name: "session_timeout",
Value: "3600",
Description: "会话超时时间默认1小时",
},
{
Name: "maintenance_mode",
Value: "0",
Description: "维护模式0=关闭维护模式1=开启维护模式",
},
// ===== 管理员账号相关默认项 =====
{
Name: "admin_username",
Value: "admin",
Description: "管理员用户名",
},
{
Name: "admin_password",
Value: "",
Description: "管理员密码哈希值",
},
{
Name: "admin_password_salt",
Value: "",
Description: "管理员密码加密盐值",
},
// ===== 页脚与备案相关默认项 =====
{
Name: "footer_text",
Value: "Copyright © 2025 凌动技术. All Rights Reserved.",
Description: "页脚展示的版权或说明信息",
},
{
Name: "icp_record",
Value: "京ICP备12345678号",
Description: "ICP备案号留空则不显示",
},
{
Name: "icp_record_link",
Value: "https://beian.miit.gov.cn",
Description: "工信部ICP备案查询链接留空则不显示",
},
{
Name: "psb_record",
Value: "京公网安备 11000002000001号",
Description: "公安备案号,留空则不显示",
},
{
Name: "psb_record_link",
Value: "https://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11000002000001",
Description: "公安备案查询链接,留空则不显示",
},
}
// 逐个检查并创建不存在的设置项
for _, setting := range defaultSettings {
var count int64
if err := db.Model(&models.Settings{}).Where("name = ?", setting.Name).Count(&count).Error; err != nil {
return err
}
if count == 0 {
if err := db.Create(&setting).Error; err != nil {
logrus.WithError(err).WithField("name", setting.Name).Error("创建默认设置失败")
return err
}
logrus.WithField("name", setting.Name).WithField("value", setting.Value).Debug("创建默认设置项")
}
}
// 初始化默认管理员账号(如果密码为空)
if err := initDefaultAdmin(db); err != nil {
return err
}
logrus.Info("默认系统设置初始化完成")
return nil
}
// ============================================================================
// 私有函数
// ============================================================================
// initDefaultAdmin 初始化默认管理员账号
// 如果admin_password为空则生成默认密码admin123的哈希值
func initDefaultAdmin(db *gorm.DB) error {
var passwordSetting models.Settings
if err := db.Where("name = ?", "admin_password").First(&passwordSetting).Error; err != nil {
logrus.WithError(err).Error("获取管理员密码设置失败")
return err
}
// 如果密码已设置,跳过初始化
if passwordSetting.Value != "" {
logrus.Debug("管理员密码已设置,跳过默认密码初始化")
return nil
}
// 生成密码盐值
salt, err := utils.GenerateRandomSalt()
if err != nil {
logrus.WithError(err).Error("生成密码盐值失败")
return err
}
// 使用盐值生成密码哈希默认密码admin123
hash, err := utils.HashPasswordWithSalt("admin123", salt)
if err != nil {
logrus.WithError(err).Error("生成密码哈希失败")
return err
}
// 更新密码和盐值
if err := db.Model(&models.Settings{}).Where("name = ?", "admin_password").Update("value", hash).Error; err != nil {
logrus.WithError(err).Error("更新管理员密码失败")
return err
}
if err := db.Model(&models.Settings{}).Where("name = ?", "admin_password_salt").Update("value", salt).Error; err != nil {
logrus.WithError(err).Error("更新管理员密码盐值失败")
return err
}
logrus.Info("默认管理员账号初始化完成,用户名: admin, 密码: admin123")
return nil
}
package database
import (
"NetworkAuth/config"
"NetworkAuth/models"
"NetworkAuth/utils"
"github.com/sirupsen/logrus"
)
// ============================================================================
// 公共函数
// ============================================================================
// SeedDefaultSettings 初始化默认系统设置
// - 检查各项设置是否已存在,如不存在则创建默认值
// - 包含站点基本信息、SEO设置等常用配置项
func SeedDefaultSettings() error {
db, err := GetDB()
if err != nil {
return err
}
// 生成安全的随机密钥
jwtSecret, err := config.GenerateSecureJWTSecret()
if err != nil {
return err
}
encryptionKey, err := config.GenerateSecureEncryptionKey()
if err != nil {
return err
}
// 生成默认管理员密码admin123的盐值和哈希
// 这样可以确保admin_password和admin_password_salt在初始化时就有值
adminSalt, err := utils.GenerateRandomSalt()
if err != nil {
return err
}
adminPasswordHash, err := utils.HashPasswordWithSalt("admin123", adminSalt)
if err != nil {
return err
}
// 检查是否已有 admin_password如果有说明是旧版本升级应该把 is_installed 默认设为 1
var adminPwdCount int64
db.Model(&models.Settings{}).Where("name = ?", "admin_password").Count(&adminPwdCount)
isInstalledDefault := "0"
if adminPwdCount > 0 {
isInstalledDefault = "1"
}
// 定义默认设置项
defaultSettings := []models.Settings{
// ===== 系统安装状态 =====
{
Name: "is_installed",
Value: isInstalledDefault,
Description: "系统是否已初始化安装0=未安装1=已安装",
},
// ===== 管理员账号相关默认项 =====
{
Name: "admin_username",
Value: "admin",
Description: "管理员用户名",
},
{
Name: "admin_password",
Value: adminPasswordHash,
Description: "管理员密码哈希值",
},
{
Name: "admin_password_salt",
Value: adminSalt,
Description: "管理员密码加密盐值",
},
// ===== 系统和安全相关默认项 =====
{
Name: "maintenance_mode",
Value: "0",
Description: "维护模式0=关闭维护模式1=开启维护模式",
},
{
Name: "encryption_key",
Value: encryptionKey,
Description: "数据加密密钥",
},
{
Name: "jwt_secret",
Value: jwtSecret,
Description: "JWT签名密钥",
},
{
Name: "jwt_refresh",
Value: "6",
Description: "JWT令牌刷新阈值小时",
},
{
Name: "jwt_expire",
Value: "24",
Description: "JWT令牌有效期小时",
},
{
Name: "session_timeout",
Value: "3600",
Description: "会话超时时间默认1小时",
},
{
Name: "max_upload_size",
Value: "10485760",
Description: "文件上传最大尺寸字节默认10MB",
},
{
Name: "default_user_role",
Value: "1",
Description: "新用户默认角色0=管理员1=普通用户",
},
// ===== 日志清理策略默认项 =====
{
Name: "login_log_cleanup_days",
Value: "30",
Description: "登录日志保留天数0表示不按天清理",
},
{
Name: "login_log_cleanup_limit",
Value: "10000",
Description: "登录日志保留条数0表示不按数量清理",
},
{
Name: "operation_log_cleanup_days",
Value: "30",
Description: "操作日志保留天数0表示不按天清理",
},
{
Name: "operation_log_cleanup_limit",
Value: "10000",
Description: "操作日志保留条数0表示不按数量清理",
},
// ===== Cookie相关默认项 =====
{
Name: "cookie_secure",
Value: "true",
Description: "Cookie Secure属性是否只在HTTPS下发送",
},
{
Name: "cookie_same_site",
Value: "Lax",
Description: "Cookie SameSite属性Strict/Lax/None",
},
{
Name: "cookie_domain",
Value: "",
Description: "Cookie域名",
},
{
Name: "cookie_max_age",
Value: "86400",
Description: "Cookie最大存活时间",
},
// ===== 站点基本信息默认项 =====
{
Name: "site_title",
Value: "NetworkAuth",
Description: "网站标题,显示在浏览器标题栏和页面顶部",
},
{
Name: "site_keywords",
Value: "NetworkAuth,鉴权,API管理,GoLang",
Description: "网站关键词用于SEO优化多个关键词用逗号分隔",
},
{
Name: "site_description",
Value: "NetworkAuth 网络授权服务,专注于应用鉴权与接口管理",
Description: "网站描述用于SEO优化和社交媒体分享",
},
{
Name: "site_logo",
Value: "/static/logo.png",
Description: "网站Logo图片路径",
},
{
Name: "contact_email",
Value: "admin@example.com",
Description: "联系邮箱,用于客服和业务咨询",
},
// ===== 页脚与备案相关默认项 =====
{
Name: "footer_text",
Value: "Copyright © 2026 NetworkAuth. All Rights Reserved.",
Description: "页脚展示的版权或说明信息",
},
{
Name: "icp_record",
Value: "",
Description: "ICP备案号留空则不显示",
},
{
Name: "icp_record_link",
Value: "https://beian.miit.gov.cn",
Description: "工信部ICP备案查询链接留空则不显示",
},
{
Name: "psb_record",
Value: "",
Description: "公安备案号,留空则不显示",
},
{
Name: "psb_record_link",
Value: "",
Description: "公安备案查询链接,留空则不显示",
},
}
// 逐个检查并创建不存在的设置项
for _, setting := range defaultSettings {
var count int64
if err := db.Model(&models.Settings{}).Where("name = ?", setting.Name).Count(&count).Error; err != nil {
return err
}
if count == 0 {
if err := db.Create(&setting).Error; err != nil {
logrus.WithError(err).WithField("name", setting.Name).Error("创建默认设置失败")
return err
}
logrus.WithField("name", setting.Name).WithField("value", setting.Value).Debug("创建默认设置项")
}
}
logrus.Info("默认系统设置初始化完成")
return nil
}