dockerfiles/anylink/server/dbdata/db.go

200 lines
3.9 KiB
Go
Raw Normal View History

2021-06-08 20:45:26 +08:00
package dbdata
import (
2023-04-26 22:17:10 +08:00
"time"
2021-06-08 20:45:26 +08:00
"github.com/bjdgyc/anylink/base"
2021-08-02 20:41:35 +08:00
_ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
"xorm.io/xorm"
2021-06-08 20:45:26 +08:00
)
var (
2021-08-02 20:41:35 +08:00
xdb *xorm.Engine
2021-06-08 20:45:26 +08:00
)
2021-08-02 20:41:35 +08:00
func GetXdb() *xorm.Engine {
return xdb
}
2021-06-08 20:45:26 +08:00
func initDb() {
var err error
2021-08-02 20:41:35 +08:00
xdb, err = xorm.NewEngine(base.Cfg.DbType, base.Cfg.DbSource)
2023-04-26 22:17:10 +08:00
// 初始化xorm时区
xdb.DatabaseTZ = time.Local
xdb.TZLocation = time.Local
2021-06-08 20:45:26 +08:00
if err != nil {
base.Fatal(err)
}
2022-11-10 15:53:48 +08:00
if base.Cfg.ShowSQL {
xdb.ShowSQL(true)
}
2021-06-08 20:45:26 +08:00
// 初始化数据库
2023-04-26 22:17:10 +08:00
err = xdb.Sync2(&User{}, &Setting{}, &Group{}, &IpMap{}, &AccessAudit{}, &Policy{}, &StatsNetwork{}, &StatsCpu{}, &StatsMem{}, &StatsOnline{}, &UserActLog{})
2021-06-08 20:45:26 +08:00
if err != nil {
base.Fatal(err)
}
2021-08-02 20:41:35 +08:00
// fmt.Println("s1=============", err)
2021-06-08 20:45:26 +08:00
}
func initData() {
var (
2021-08-02 20:41:35 +08:00
err error
2021-06-08 20:45:26 +08:00
)
// 判断是否初次使用
2021-08-02 20:41:35 +08:00
install := &SettingInstall{}
err = SettingGet(install)
if err == nil && install.Installed {
2021-06-08 20:45:26 +08:00
// 已经安装过
return
}
2021-08-02 20:41:35 +08:00
// 发生错误
if err != ErrNotFound {
base.Fatal(err)
}
err = addInitData()
if err != nil {
base.Fatal(err)
}
}
func addInitData() error {
var (
err error
)
2021-06-08 20:45:26 +08:00
2021-08-02 20:41:35 +08:00
sess := xdb.NewSession()
defer sess.Close()
err = sess.Begin()
if err != nil {
return err
}
// SettingSmtp
2021-06-08 20:45:26 +08:00
smtp := &SettingSmtp{
2021-08-02 20:41:35 +08:00
Host: "127.0.0.1",
Port: 25,
From: "vpn@xx.com",
Encryption: "None",
}
err = SettingSessAdd(sess, smtp)
if err != nil {
return err
2021-06-08 20:45:26 +08:00
}
2022-11-10 15:53:48 +08:00
// SettingAuditLog
auditLog := SettingGetAuditLogDefault()
err = SettingSessAdd(sess, auditLog)
if err != nil {
return err
}
2023-04-26 22:17:10 +08:00
// 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
}
2021-08-02 20:41:35 +08:00
// SettingOther
2021-06-08 20:45:26 +08:00
other := &SettingOther{
LinkAddr: "vpn.xx.com",
Banner: "您已接入公司网络,请按照公司规定使用。\n请勿进行非工作下载及视频行为",
2022-11-10 15:53:48 +08:00
Homeindex: "AnyLink 是一个企业级远程办公 sslvpn 的软件,可以支持多人同时在线使用。",
2021-06-08 20:45:26 +08:00
AccountMail: accountMail,
}
2021-08-02 20:41:35 +08:00
err = SettingSessAdd(sess, other)
if err != nil {
return err
}
// Install
install := &SettingInstall{Installed: true}
err = SettingSessAdd(sess, install)
if err != nil {
return err
}
2021-06-08 20:45:26 +08:00
2022-02-16 14:23:17 +08:00
err = sess.Commit()
if err != nil {
return err
}
g1 := Group{
Name: "ops",
AllowLan: true,
ClientDns: []ValData{{Val: "114.114.114.114"}},
2022-04-07 16:33:16 +08:00
RouteInclude: []ValData{{Val: All}},
2023-04-26 22:17:10 +08:00
Status: 1,
2022-02-16 14:23:17 +08:00
}
err = SetGroup(&g1)
if err != nil {
return err
}
return nil
2021-06-08 20:45:26 +08:00
}
func CheckErrNotFound(err error) bool {
2021-08-02 20:41:35 +08:00
return err == ErrNotFound
2021-06-08 20:45:26 +08:00
}
const accountMail = `<p>您好:</p>
<p>&nbsp;&nbsp;您的{{.Issuer}}账号已经审核开通</p>
<p>
登陆地址: <b>{{.LinkAddr}}</b> <br/>
用户组: <b>{{.Group}}</b> <br/>
用户名: <b>{{.Username}}</b> <br/>
用户PIN码: <b>{{.PinCode}}</b> <br/>
2023-04-26 22:17:10 +08:00
<!--
2021-06-08 20:45:26 +08:00
用户动态码(3天后失效):<br/>
<img src="{{.OtpImg}}"/>
2023-04-26 22:17:10 +08:00
-->
用户动态码(请妥善保存):<br/>
<img src="{{.OtpImgBase64}}"/>
2021-06-08 20:45:26 +08:00
</p>
<div>
使用说明:
<ul>
<li>请使用OTP软件扫描动态码二维码</li>
<li>然后使用anyconnect客户端进行登陆</li>
<li>登陆密码为 PIN码+动态码</li>
</ul>
</div>
<p>
软件下载地址: https://{{.LinkAddr}}/files/info.txt
</p>`