package dbdata import ( "time" "github.com/bjdgyc/anylink/base" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" "xorm.io/xorm" ) var ( xdb *xorm.Engine ) func GetXdb() *xorm.Engine { return xdb } func initDb() { var err error xdb, err = xorm.NewEngine(base.Cfg.DbType, base.Cfg.DbSource) // 初始化xorm时区 xdb.DatabaseTZ = time.Local xdb.TZLocation = time.Local if err != nil { base.Fatal(err) } if base.Cfg.ShowSQL { xdb.ShowSQL(true) } // 初始化数据库 err = xdb.Sync2(&User{}, &Setting{}, &Group{}, &IpMap{}, &AccessAudit{}, &Policy{}, &StatsNetwork{}, &StatsCpu{}, &StatsMem{}, &StatsOnline{}, &UserActLog{}) if err != nil { base.Fatal(err) } // fmt.Println("s1=============", err) } func initData() { var ( err error ) // 判断是否初次使用 install := &SettingInstall{} err = SettingGet(install) if err == nil && install.Installed { // 已经安装过 return } // 发生错误 if err != ErrNotFound { base.Fatal(err) } err = addInitData() if err != nil { base.Fatal(err) } } func addInitData() error { var ( err error ) sess := xdb.NewSession() defer sess.Close() err = sess.Begin() if err != nil { return err } // SettingSmtp smtp := &SettingSmtp{ Host: "127.0.0.1", Port: 25, From: "vpn@xx.com", Encryption: "None", } err = SettingSessAdd(sess, smtp) if err != nil { return err } // SettingAuditLog auditLog := SettingGetAuditLogDefault() err = SettingSessAdd(sess, auditLog) if err != nil { return err } // SettingDnsProvider provider := &SettingLetsEncrypt{ Domain: "vpn.xxx.com", Legomail: "legomail", Name: "aliyun", Renew: false, DNSProvider: DNSProvider{ AliYun: struct { APIKey string `json:"apiKey"` SecretKey string `json:"secretKey"` }{APIKey: "", SecretKey: ""}, TXCloud: struct { SecretID string `json:"secretId"` SecretKey string `json:"secretKey"` }{SecretID: "", SecretKey: ""}, CfCloud: struct { AuthEmail string `json:"authEmail"` AuthKey string `json:"authKey"` }{AuthEmail: "", AuthKey: ""}}, } err = SettingSessAdd(sess, provider) if err != nil { return err } // LegoUser legouser := &LegoUserData{} err = SettingSessAdd(sess, legouser) if err != nil { return err } // SettingOther other := &SettingOther{ LinkAddr: "vpn.xx.com", Banner: "您已接入公司网络,请按照公司规定使用。\n请勿进行非工作下载及视频行为!", Homeindex: "AnyLink 是一个企业级远程办公 sslvpn 的软件,可以支持多人同时在线使用。", AccountMail: accountMail, } err = SettingSessAdd(sess, other) if err != nil { return err } // Install install := &SettingInstall{Installed: true} err = SettingSessAdd(sess, install) if err != nil { return err } err = sess.Commit() if err != nil { return err } g1 := Group{ Name: "ops", AllowLan: true, ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteInclude: []ValData{{Val: All}}, Status: 1, } err = SetGroup(&g1) if err != nil { return err } return nil } func CheckErrNotFound(err error) bool { return err == ErrNotFound } const accountMail = `

您好:

  您的{{.Issuer}}账号已经审核开通。

登陆地址: {{.LinkAddr}}
用户组: {{.Group}}
用户名: {{.Username}}
用户PIN码: {{.PinCode}}
用户动态码(请妥善保存):

使用说明:

软件下载地址: https://{{.LinkAddr}}/files/info.txt

`