setting.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package setting
  2. import (
  3. "flag"
  4. "log"
  5. "os"
  6. "os/exec"
  7. "path/filepath"
  8. "runtime"
  9. "strings"
  10. "time"
  11. "github.com/pkg/errors"
  12. "github.com/go-ini/ini"
  13. "github.com/jacobsa/go-serial/serial"
  14. )
  15. var AppSetting = &App{}
  16. var ServerSetting = &Server{}
  17. var CommSetting = &serial.OpenOptions{}
  18. type App struct {
  19. JwtSecret string
  20. PageSize int
  21. PrefixUrl string
  22. RuntimeRootPath string
  23. FileSavePath string
  24. FileMaxSize int // 普通文件上传的限制大小,单位byte, 最大单位1GB
  25. FileAllowType []string // 允许上传的文件后缀名
  26. ImageSavePath string
  27. ImageMaxSize int
  28. ImageAllowExts []string
  29. ThumbnailSavePath string
  30. ThumbnailMaxWidth int
  31. ThumbnailMaxHeight int
  32. ExportSavePath string
  33. QrCodeSavePath string
  34. FontSavePath string
  35. LogSavePath string
  36. LogSaveName string
  37. LogFileExt string
  38. TimeFormat string
  39. }
  40. type Server struct {
  41. Env string
  42. RunMode string
  43. HttpPort int
  44. ReadTimeout time.Duration
  45. WriteTimeout time.Duration
  46. NoAuth int
  47. Mdns_servicename string
  48. Mdns_serviceport int
  49. HttpsPort int
  50. Https int
  51. CrtPath string
  52. KeyPath string
  53. MailStart string
  54. CronFormula string
  55. WXworkStart string
  56. WXworkAgentid string
  57. WXworkSecret string
  58. WXworkCorpid string
  59. DingTalkToken string
  60. DingTalkEncodingAESKey string
  61. DingTalkAppKey string
  62. DingTalkAppSecret string
  63. DingTalkAgentid string
  64. ServerName string
  65. DisplayName string
  66. Description string
  67. EasName string
  68. EasPassword string
  69. EasUrl string
  70. EasUrlTem string
  71. }
  72. type Database struct {
  73. Type string
  74. User string
  75. Password string
  76. Host string
  77. Name string
  78. ShowXormlog bool
  79. ShowGetSqllog bool
  80. CacheApiSql bool
  81. TablePrefix string
  82. Dsn string
  83. }
  84. type SQlServer struct {
  85. Host string
  86. User string
  87. Password string
  88. Name string
  89. }
  90. type IDaaS struct {
  91. AppId string
  92. ClientId string
  93. ClientSecret string
  94. Url string
  95. IsDaaS int
  96. }
  97. var DatabaseSetting = &Database{}
  98. var SQlServerSetting = &SQlServer{}
  99. var IDaaSSetting = &IDaaS{}
  100. var cfg *ini.File
  101. var CurrentPath string
  102. func init() {
  103. flag.StringVar(&CurrentPath, "iconf", "", "default config path")
  104. }
  105. func GetCurrentPath() (string, error) {
  106. file, err := exec.LookPath(os.Args[0])
  107. if err != nil {
  108. return "", err
  109. }
  110. path, err := filepath.Abs(file)
  111. if err != nil {
  112. return "", err
  113. }
  114. if runtime.GOOS == "windows" {
  115. path = strings.Replace(path, "\\", "/", -1)
  116. }
  117. i := strings.LastIndex(path, "/")
  118. if i < 0 {
  119. return "", errors.New(`Can't find "/" or "\".`)
  120. }
  121. return string(path[0 : i+1]), nil
  122. }
  123. func Setup(dir string) {
  124. var err error
  125. if strings.Trim(dir, " ") == "" {
  126. CurrentPath, err = GetCurrentPath()
  127. } else {
  128. CurrentPath = dir
  129. }
  130. cfg, err = ini.Load(CurrentPath + "conf/app.ini")
  131. if err != nil {
  132. log.Fatalf("setting.Setup, fail to parse 'conf/app.ini' CurrentPath: %s,Err: %v", CurrentPath, err)
  133. panic(err)
  134. }
  135. DatabaseSetting.ShowXormlog = false
  136. DatabaseSetting.ShowGetSqllog = false
  137. DatabaseSetting.CacheApiSql = false
  138. mapTo("app", AppSetting)
  139. mapTo("server", ServerSetting)
  140. mapTo("database", DatabaseSetting)
  141. mapTo("comm", CommSetting)
  142. mapTo("sqlserver", SQlServerSetting)
  143. mapTo("idaas", IDaaSSetting)
  144. AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024
  145. ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
  146. ServerSetting.WriteTimeout = ServerSetting.ReadTimeout * time.Second
  147. ServerSetting.CrtPath = CurrentPath + ServerSetting.CrtPath
  148. ServerSetting.KeyPath = CurrentPath + ServerSetting.KeyPath
  149. }
  150. func mapTo(section string, v interface{}) {
  151. err := cfg.Section(section).MapTo(v)
  152. if err != nil {
  153. log.Fatalf("Cfg.MapTo RedisSetting err: %v", err)
  154. }
  155. }