config.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package config
  2. import (
  3. "crypto/rand"
  4. "encoding/base64"
  5. "fmt"
  6. "github.com/astaxie/beego"
  7. "github.com/astaxie/beego/logs"
  8. "github.com/astaxie/beego/orm"
  9. "golang.org/x/oauth2"
  10. "os"
  11. "server/models"
  12. "server/utils"
  13. "strings"
  14. )
  15. type AppConfig struct {
  16. BaseApi string
  17. DataDir string
  18. DBDir string
  19. ContextPath string
  20. NginxPath string
  21. NginxDir string
  22. ThirdSession bool
  23. ThirdSessionName string
  24. ThirdSessionCheckUrl string
  25. }
  26. type CompleteOauth2Config struct {
  27. *oauth2.Config
  28. Userinfo string
  29. Enable bool
  30. }
  31. var OauthConfig = &CompleteOauth2Config{
  32. Enable: false,
  33. Config: &oauth2.Config{
  34. ClientID: "",
  35. ClientSecret: "",
  36. Endpoint: oauth2.Endpoint{},
  37. RedirectURL: "",
  38. Scopes: []string{},
  39. },
  40. }
  41. var Config = &AppConfig{}
  42. func GetDataDir() string {
  43. return Config.DataDir
  44. }
  45. func init() {
  46. beego.BConfig.CopyRequestBody = true
  47. // 需要和前端配置好
  48. baseApi := beego.AppConfig.DefaultString("baseApi", "/nginx-ui/api")
  49. baseApi = strings.TrimSuffix(baseApi, "/")
  50. Config.ContextPath = beego.AppConfig.DefaultString("contextpath", "/nginx-ui")
  51. Config.ContextPath = strings.TrimSuffix(Config.ContextPath, "/")
  52. Config.BaseApi = baseApi
  53. Config.DataDir = beego.AppConfig.DefaultString("datadir", "./data")
  54. Config.DBDir = beego.AppConfig.DefaultString("dbdir", "./data/db")
  55. if exist := utils.IsExist(Config.DataDir); exist == false {
  56. err := os.MkdirAll(Config.DataDir, 0777)
  57. logs.Warn("create data dir fail", err)
  58. if err != nil {
  59. panic(err)
  60. }
  61. }
  62. Config.NginxPath = beego.AppConfig.DefaultString("nginxPath", "/usr/sbin/nginx")
  63. Config.NginxDir = beego.AppConfig.DefaultString("nginxDir", "/etc/nginx")
  64. Config.ThirdSession = beego.AppConfig.DefaultBool("thirdsessionenable", false)
  65. Config.ThirdSessionName = beego.AppConfig.DefaultString("thirdsessionname", "")
  66. Config.ThirdSessionCheckUrl = beego.AppConfig.DefaultString("thirdsessioncheckurl", "")
  67. if Config.ThirdSession && (len(Config.ThirdSessionName) == 0 || len(Config.ThirdSessionCheckUrl) == 0) {
  68. logs.Warn("please config thirdsessionname and thirdsessioncheckurl, third session will skip!")
  69. Config.ThirdSession = false
  70. }
  71. OauthConfig.ClientID = beego.AppConfig.DefaultString("oauth2_client_id", "")
  72. OauthConfig.ClientSecret = beego.AppConfig.DefaultString("oauth2_client_secret", "")
  73. authorizeEndpoint := beego.AppConfig.DefaultString("oauth2_authorize_endpoint", "")
  74. tokenEndpoint := beego.AppConfig.DefaultString("oauth2_token_endpoint", "")
  75. OauthConfig.Endpoint = oauth2.Endpoint{
  76. AuthURL: authorizeEndpoint,
  77. TokenURL: tokenEndpoint,
  78. AuthStyle: 0,
  79. }
  80. OauthConfig.RedirectURL = beego.AppConfig.DefaultString("oauth2_redirect_uri", "")
  81. OauthConfig.Scopes = beego.AppConfig.DefaultStrings("oauth2_scopes", []string{})
  82. OauthConfig.Userinfo = beego.AppConfig.DefaultString("oauth2_userinfo", "")
  83. OauthConfig.Enable = beego.AppConfig.DefaultBool("oauth2_enable", false)
  84. }
  85. func InitAdmin() {
  86. o := orm.NewOrm()
  87. reset := beego.AppConfig.DefaultBool("reset_admin_password", false)
  88. admin := models.User{Account: "admin"}
  89. err := o.Read(&admin, "Account")
  90. if err != nil && !reset {
  91. return
  92. }
  93. password := beego.AppConfig.DefaultString("admin_password", randPassword(10))
  94. admin.Password = utils.GetSHA256HashCode(password)
  95. admin.Remark = "admin"
  96. admin.Roles = "ADMIN"
  97. if admin.Id > 0 {
  98. _, err = o.Update(&admin)
  99. } else {
  100. _, err = o.Insert(&admin)
  101. }
  102. if err != nil {
  103. logs.Warn("insert or update admin fail", err)
  104. } else {
  105. logs.Warn(fmt.Sprintf("admin password is: %s", password))
  106. }
  107. }
  108. func randPassword(n int) string {
  109. b := make([]byte, n)
  110. _, err := rand.Read(b)
  111. if err != nil {
  112. return "123456"
  113. }
  114. return base64.StdEncoding.EncodeToString(b)
  115. }