config.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. ContextPath string
  19. }
  20. type CompleteOauth2Config struct {
  21. *oauth2.Config
  22. Userinfo string
  23. Enable bool
  24. }
  25. var OauthConfig = &CompleteOauth2Config{
  26. Enable: false,
  27. Config: &oauth2.Config{
  28. ClientID: "",
  29. ClientSecret: "",
  30. Endpoint: oauth2.Endpoint{},
  31. RedirectURL: "",
  32. Scopes: []string{},
  33. },
  34. }
  35. var Config = &AppConfig{}
  36. func GetDataDir() string {
  37. return Config.DataDir
  38. }
  39. func init() {
  40. // 需要和前端配置好
  41. baseApi := beego.AppConfig.String("baseApi")
  42. if baseApi == "" {
  43. baseApi = "/ngx"
  44. err := beego.AppConfig.Set("baseApi", baseApi)
  45. if err != nil {
  46. logs.Info("init set baseApi", err)
  47. }
  48. }
  49. baseApi = strings.TrimSuffix(baseApi, "/")
  50. Config.ContextPath = beego.AppConfig.DefaultString("contextpath", "")
  51. Config.ContextPath = strings.TrimSuffix(Config.ContextPath, "/")
  52. Config.BaseApi = baseApi
  53. Config.DataDir = beego.AppConfig.String("datadir")
  54. if exist := utils.IsExist(Config.DataDir); exist == false {
  55. err := os.MkdirAll(Config.DataDir, 0777)
  56. logs.Warn("create data dir fail", err)
  57. if err != nil {
  58. panic(err)
  59. }
  60. }
  61. OauthConfig.ClientID = beego.AppConfig.DefaultString("oauth2_client_id", "")
  62. OauthConfig.ClientSecret = beego.AppConfig.DefaultString("oauth2_client_secret", "")
  63. authorizeEndpoint := beego.AppConfig.DefaultString("oauth2_authorize_endpoint", "")
  64. tokenEndpoint := beego.AppConfig.DefaultString("oauth2_token_endpoint", "")
  65. OauthConfig.Endpoint = oauth2.Endpoint{
  66. AuthURL: authorizeEndpoint,
  67. TokenURL: tokenEndpoint,
  68. AuthStyle: 0,
  69. }
  70. OauthConfig.RedirectURL = beego.AppConfig.DefaultString("oauth2_redirect_uri", "")
  71. OauthConfig.Scopes = beego.AppConfig.DefaultStrings("oauth2_scopes", []string{})
  72. OauthConfig.Userinfo = beego.AppConfig.DefaultString("oauth2_userinfo", "")
  73. OauthConfig.Enable = beego.AppConfig.DefaultBool("oauth2_enable", false)
  74. }
  75. func InitAdmin() {
  76. o := orm.NewOrm()
  77. reset := beego.AppConfig.DefaultBool("reset_admin_password", false)
  78. admin := models.User{Account: "admin"}
  79. err := o.Read(&admin, "Account")
  80. if err != nil && !reset {
  81. return
  82. }
  83. password := beego.AppConfig.DefaultString("admin_password", randPassword(10))
  84. admin.Password = utils.GetSHA256HashCode(password)
  85. admin.Remark = "admin"
  86. admin.Roles = "ADMIN"
  87. if admin.Id > 0 {
  88. _, err = o.Update(&admin)
  89. } else {
  90. _, err = o.Insert(&admin)
  91. }
  92. if err != nil {
  93. logs.Warn("insert or update admin fail", err)
  94. } else {
  95. logs.Warn(fmt.Sprintf("admin password is: %s", password))
  96. }
  97. }
  98. func randPassword(n int) string {
  99. b := make([]byte, n)
  100. _, err := rand.Read(b)
  101. if err != nil {
  102. return "123456"
  103. }
  104. return base64.StdEncoding.EncodeToString(b)
  105. }