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 {
|
2023-08-08 17:35:40 +08:00
|
|
|
|
AuthToken string `json:"authToken"`
|
|
|
|
|
}{AuthToken: ""}},
|
2023-04-26 22:17:10 +08:00
|
|
|
|
}
|
|
|
|
|
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> 您的{{.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>`
|