114 lines
2.6 KiB
Go
114 lines
2.6 KiB
Go
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
|
|
// Use of this source code is governed by a Apache license
|
|
// that can be found in the LICENSE file.
|
|
|
|
package config
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/koding/multiconfig"
|
|
|
|
"openpitrix.io/openpitrix/pkg/logger"
|
|
)
|
|
|
|
type Config struct {
|
|
Log LogConfig
|
|
Grpc GrpcConfig
|
|
Mysql MysqlConfig
|
|
Etcd EtcdConfig
|
|
IAM IAMConfig
|
|
Attachment AttachmentConfig
|
|
DisableGops bool `default:"false"`
|
|
}
|
|
|
|
type IAMConfig struct {
|
|
SecretKey string `default:"OpenPitrix-lC4LipAXPYsuqw5F"`
|
|
ExpireTime time.Duration `default:"2h"`
|
|
RefreshTokenExpireTime time.Duration `default:"336h"` // default is 2 week
|
|
}
|
|
|
|
type AttachmentConfig struct {
|
|
AccessKey string `default:"openpitrixminioaccesskey"`
|
|
SecretKey string `default:"openpitrixminiosecretkey"`
|
|
Endpoint string `default:"http://openpitrix-minio:9000"`
|
|
BucketName string `default:"openpitrix-attachment"`
|
|
}
|
|
|
|
type LogConfig struct {
|
|
Level string `default:"info"` // debug, info, warn, error, fatal
|
|
}
|
|
|
|
type GrpcConfig struct {
|
|
ShowErrorCause bool `default:"false"` // show grpc error cause to frontend
|
|
}
|
|
|
|
type EtcdConfig struct {
|
|
Endpoints string `default:"openpitrix-etcd:2379"` // Example: "localhost:2379,localhost:22379,localhost:32379"
|
|
}
|
|
|
|
type MysqlConfig struct {
|
|
Host string `default:"openpitrix-db"`
|
|
Port string `default:"3306"`
|
|
User string `default:"root"`
|
|
Password string `default:"password"`
|
|
Database string `default:"openpitrix"`
|
|
Disable bool `default:"false"`
|
|
}
|
|
|
|
func (m *MysqlConfig) GetUrl() string {
|
|
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", m.User, m.Password, m.Host, m.Port, m.Database)
|
|
}
|
|
|
|
func PrintUsage() {
|
|
fmt.Fprintf(os.Stdout, "Usage of %s:\n", os.Args[0])
|
|
flag.PrintDefaults()
|
|
fmt.Fprint(os.Stdout, "\nSupported environment variables:\n")
|
|
e := newLoader("openpitrix")
|
|
e.PrintEnvs(new(Config))
|
|
fmt.Println("")
|
|
}
|
|
|
|
func GetFlagSet() *flag.FlagSet {
|
|
flag.CommandLine.Usage = PrintUsage
|
|
return flag.CommandLine
|
|
}
|
|
|
|
func ParseFlag() {
|
|
GetFlagSet().Parse(os.Args[1:])
|
|
}
|
|
|
|
var conf Config
|
|
|
|
func loadConf() *Config {
|
|
config := new(Config)
|
|
m := &multiconfig.DefaultLoader{}
|
|
m.Loader = multiconfig.MultiLoader(newLoader("openpitrix"))
|
|
m.Validator = multiconfig.MultiValidator(
|
|
&multiconfig.RequiredValidator{},
|
|
)
|
|
err := m.Load(config)
|
|
if err != nil {
|
|
logger.Critical(nil, "Failed to load config: %+v", err)
|
|
panic(err)
|
|
}
|
|
logger.SetLevelByString(config.Log.Level)
|
|
logger.Debug(nil, "GetConf: %+v", config)
|
|
|
|
return config
|
|
}
|
|
|
|
func init() {
|
|
conf = *loadConf()
|
|
}
|
|
|
|
func GetConf() *Config {
|
|
ParseFlag()
|
|
var c = new(Config)
|
|
*c = conf
|
|
return c
|
|
}
|