167 lines
4.5 KiB
Go
167 lines
4.5 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gitlab.guxuan.icu/jinshan_community/pkg/encoding/json"
|
|
"gitlab.guxuan.icu/jinshan_community/pkg/logging"
|
|
)
|
|
|
|
type Config struct {
|
|
Logger logging.LoggerConfig
|
|
General General
|
|
Storage Storage
|
|
Middleware Middleware
|
|
Util Util
|
|
Dictionary Dictionary
|
|
FileConfig FileConfig
|
|
}
|
|
type FileConfig struct {
|
|
UploadDir string
|
|
StaticPrefix string
|
|
}
|
|
|
|
type General struct {
|
|
AppName string `default:"haibei"`
|
|
Version string `default:"v1.0.0"`
|
|
Debug bool
|
|
PprofAddr string
|
|
DisableSwagger bool
|
|
DisablePrintConfig bool
|
|
DefaultLoginPwd string `default:"6351623c8cef86fefabfa7da046fc619"` // MD5(abc-123)
|
|
WorkDir string // From command arguments
|
|
MenuFile string // From schema.Menus (JSON/YAML)
|
|
DenyOperateMenu bool
|
|
HTTP struct {
|
|
Addr string `default:":8040"`
|
|
ShutdownTimeout int `default:"10"` // seconds
|
|
ReadTimeout int `default:"60"` // seconds
|
|
WriteTimeout int `default:"60"` // seconds
|
|
IdleTimeout int `default:"10"` // seconds
|
|
CertFile string
|
|
KeyFile string
|
|
}
|
|
Root struct {
|
|
ID string `default:"root"`
|
|
Username string `default:"admin"`
|
|
Password string
|
|
Name string `default:"Admin"`
|
|
}
|
|
}
|
|
|
|
type Storage struct {
|
|
Cache struct {
|
|
Type string `default:"memory"` // memory/badger/redis
|
|
Delimiter string `default:":"` // delimiter for key
|
|
Memory struct {
|
|
CleanupInterval int `default:"60"` // seconds
|
|
}
|
|
Badger struct {
|
|
Path string `default:"data/cache"`
|
|
}
|
|
Redis struct {
|
|
Addr string
|
|
Username string
|
|
Password string
|
|
DB int
|
|
}
|
|
}
|
|
DB struct {
|
|
Debug bool
|
|
Type string `default:"sqlite3"` // sqlite3/mysql/postgres
|
|
DSN string `default:"data/haibei.db"` // database source name
|
|
MaxLifetime int `default:"86400"` // seconds
|
|
MaxIdleTime int `default:"3600"` // seconds
|
|
MaxOpenConns int `default:"100"` // connections
|
|
MaxIdleConns int `default:"50"` // connections
|
|
TablePrefix string `default:""`
|
|
AutoMigrate bool
|
|
PrepareStmt bool
|
|
Resolver []struct {
|
|
DBType string // sqlite3/mysql/postgres
|
|
Sources []string // DSN
|
|
Replicas []string // DSN
|
|
Tables []string
|
|
}
|
|
}
|
|
}
|
|
|
|
type Util struct {
|
|
Captcha struct {
|
|
Length int `default:"4"`
|
|
Width int `default:"400"`
|
|
Height int `default:"160"`
|
|
CacheType string `default:"memory"` // memory/redis
|
|
Redis struct {
|
|
Addr string
|
|
Username string
|
|
Password string
|
|
DB int
|
|
KeyPrefix string `default:"captcha:"`
|
|
}
|
|
}
|
|
Prometheus struct {
|
|
Enable bool
|
|
Port int `default:"9100"`
|
|
BasicUsername string `default:"admin"`
|
|
BasicPassword string `default:"admin"`
|
|
LogApis []string
|
|
LogMethods []string
|
|
DefaultCollect bool
|
|
}
|
|
}
|
|
|
|
type Dictionary struct {
|
|
UserCacheExp int `default:"4"` // hours
|
|
}
|
|
|
|
func (c *Config) IsDebug() bool {
|
|
return c.General.Debug
|
|
}
|
|
|
|
func (c *Config) String() string {
|
|
b, err := json.MarshalIndent(c, "", " ")
|
|
if err != nil {
|
|
panic("Failed to marshal config: " + err.Error())
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func (c *Config) PreLoad() {
|
|
if addr := c.Storage.Cache.Redis.Addr; addr != "" {
|
|
username := c.Storage.Cache.Redis.Username
|
|
password := c.Storage.Cache.Redis.Password
|
|
if c.Util.Captcha.CacheType == "redis" &&
|
|
c.Util.Captcha.Redis.Addr == "" {
|
|
c.Util.Captcha.Redis.Addr = addr
|
|
c.Util.Captcha.Redis.Username = username
|
|
c.Util.Captcha.Redis.Password = password
|
|
}
|
|
if c.Middleware.RateLimiter.Store.Type == "redis" &&
|
|
c.Middleware.RateLimiter.Store.Redis.Addr == "" {
|
|
c.Middleware.RateLimiter.Store.Redis.Addr = addr
|
|
c.Middleware.RateLimiter.Store.Redis.Username = username
|
|
c.Middleware.RateLimiter.Store.Redis.Password = password
|
|
}
|
|
if c.Middleware.Auth.Store.Type == "redis" &&
|
|
c.Middleware.Auth.Store.Redis.Addr == "" {
|
|
c.Middleware.Auth.Store.Redis.Addr = addr
|
|
c.Middleware.Auth.Store.Redis.Username = username
|
|
c.Middleware.Auth.Store.Redis.Password = password
|
|
}
|
|
}
|
|
}
|
|
|
|
func (c *Config) Print() {
|
|
if c.General.DisablePrintConfig {
|
|
return
|
|
}
|
|
fmt.Println("// ----------------------- Load configurations start ------------------------")
|
|
fmt.Println(c.String())
|
|
fmt.Println("// ----------------------- Load configurations end --------------------------")
|
|
}
|
|
|
|
func (c *Config) FormatTableName(name string) string {
|
|
return c.Storage.DB.TablePrefix + name
|
|
}
|