db.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package dbdata
  2. import (
  3. "time"
  4. "github.com/bjdgyc/anylink/base"
  5. _ "github.com/go-sql-driver/mysql"
  6. _ "github.com/lib/pq"
  7. _ "github.com/mattn/go-sqlite3"
  8. "xorm.io/xorm"
  9. )
  10. var (
  11. xdb *xorm.Engine
  12. )
  13. func GetXdb() *xorm.Engine {
  14. return xdb
  15. }
  16. func initDb() {
  17. var err error
  18. xdb, err = xorm.NewEngine(base.Cfg.DbType, base.Cfg.DbSource)
  19. // 初始化xorm时区
  20. xdb.DatabaseTZ = time.Local
  21. xdb.TZLocation = time.Local
  22. if err != nil {
  23. base.Fatal(err)
  24. }
  25. if base.Cfg.ShowSQL {
  26. xdb.ShowSQL(true)
  27. }
  28. // 初始化数据库
  29. err = xdb.Sync2(&User{}, &Setting{}, &Group{}, &IpMap{}, &AccessAudit{}, &Policy{}, &StatsNetwork{}, &StatsCpu{}, &StatsMem{}, &StatsOnline{}, &UserActLog{})
  30. if err != nil {
  31. base.Fatal(err)
  32. }
  33. // fmt.Println("s1=============", err)
  34. }
  35. func initData() {
  36. var (
  37. err error
  38. )
  39. // 判断是否初次使用
  40. install := &SettingInstall{}
  41. err = SettingGet(install)
  42. if err == nil && install.Installed {
  43. // 已经安装过
  44. return
  45. }
  46. // 发生错误
  47. if err != ErrNotFound {
  48. base.Fatal(err)
  49. }
  50. err = addInitData()
  51. if err != nil {
  52. base.Fatal(err)
  53. }
  54. }
  55. func addInitData() error {
  56. var (
  57. err error
  58. )
  59. sess := xdb.NewSession()
  60. defer sess.Close()
  61. err = sess.Begin()
  62. if err != nil {
  63. return err
  64. }
  65. // SettingSmtp
  66. smtp := &SettingSmtp{
  67. Host: "127.0.0.1",
  68. Port: 25,
  69. From: "[email protected]",
  70. Encryption: "None",
  71. }
  72. err = SettingSessAdd(sess, smtp)
  73. if err != nil {
  74. return err
  75. }
  76. // SettingAuditLog
  77. auditLog := SettingGetAuditLogDefault()
  78. err = SettingSessAdd(sess, auditLog)
  79. if err != nil {
  80. return err
  81. }
  82. // SettingDnsProvider
  83. provider := &SettingLetsEncrypt{
  84. Domain: "vpn.xxx.com",
  85. Legomail: "legomail",
  86. Name: "aliyun",
  87. Renew: false,
  88. DNSProvider: DNSProvider{
  89. AliYun: struct {
  90. APIKey string `json:"apiKey"`
  91. SecretKey string `json:"secretKey"`
  92. }{APIKey: "", SecretKey: ""},
  93. TXCloud: struct {
  94. SecretID string `json:"secretId"`
  95. SecretKey string `json:"secretKey"`
  96. }{SecretID: "", SecretKey: ""},
  97. CfCloud: struct {
  98. AuthToken string `json:"authToken"`
  99. }{AuthToken: ""}},
  100. }
  101. err = SettingSessAdd(sess, provider)
  102. if err != nil {
  103. return err
  104. }
  105. // LegoUser
  106. legouser := &LegoUserData{}
  107. err = SettingSessAdd(sess, legouser)
  108. if err != nil {
  109. return err
  110. }
  111. // SettingOther
  112. other := &SettingOther{
  113. LinkAddr: "vpn.xx.com",
  114. Banner: "您已接入公司网络,请按照公司规定使用。\n请勿进行非工作下载及视频行为!",
  115. Homeindex: "AnyLink 是一个企业级远程办公 sslvpn 的软件,可以支持多人同时在线使用。",
  116. AccountMail: accountMail,
  117. }
  118. err = SettingSessAdd(sess, other)
  119. if err != nil {
  120. return err
  121. }
  122. // Install
  123. install := &SettingInstall{Installed: true}
  124. err = SettingSessAdd(sess, install)
  125. if err != nil {
  126. return err
  127. }
  128. err = sess.Commit()
  129. if err != nil {
  130. return err
  131. }
  132. g1 := Group{
  133. Name: "ops",
  134. AllowLan: true,
  135. ClientDns: []ValData{{Val: "114.114.114.114"}},
  136. RouteInclude: []ValData{{Val: All}},
  137. Status: 1,
  138. }
  139. err = SetGroup(&g1)
  140. if err != nil {
  141. return err
  142. }
  143. return nil
  144. }
  145. func CheckErrNotFound(err error) bool {
  146. return err == ErrNotFound
  147. }
  148. const accountMail = `<p>您好:</p>
  149. <p>&nbsp;&nbsp;您的{{.Issuer}}账号已经审核开通。</p>
  150. <p>
  151. 登陆地址: <b>{{.LinkAddr}}</b> <br/>
  152. 用户组: <b>{{.Group}}</b> <br/>
  153. 用户名: <b>{{.Username}}</b> <br/>
  154. 用户PIN码: <b>{{.PinCode}}</b> <br/>
  155. <!--
  156. 用户动态码(3天后失效):<br/>
  157. <img src="{{.OtpImg}}"/>
  158. -->
  159. 用户动态码(请妥善保存):<br/>
  160. <img src="{{.OtpImgBase64}}"/>
  161. </p>
  162. <div>
  163. 使用说明:
  164. <ul>
  165. <li>请使用OTP软件扫描动态码二维码</li>
  166. <li>然后使用anyconnect客户端进行登陆</li>
  167. <li>登陆密码为 【PIN码+动态码】</li>
  168. </ul>
  169. </div>
  170. <p>
  171. 软件下载地址: https://{{.LinkAddr}}/files/info.txt
  172. </p>`