ColaCoca's picture
jeju 모델 업로드
8eb2cb0
package server
import (
"fmt"
"path"
"path/filepath"
"strings"
"github.com/jkuri/bore/pkg/fs"
"github.com/jkuri/bore/pkg/logger"
"github.com/jkuri/bore/pkg/rsa"
"github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
// Options are global config for bore server.
type Options struct {
Domain string
PrivateKey string
PublicKey string
SSHAddr string
HTTPAddr string
Logger *logger.Options
}
// NewConfig returns viper config.
func NewConfig(configPath string) (*viper.Viper, error) {
v := viper.New()
dir := getConfigDir()
v.AddConfigPath(dir)
v.SetConfigName("bore-server")
v.SetConfigType("yaml")
v.SetDefault("domain", "bore.digital")
v.SetDefault("privatekey", filepath.Join(dir, "id_rsa"))
v.SetDefault("publickey", filepath.Join(dir, "id_rsa.pub"))
v.SetDefault("sshaddr", "0.0.0.0:2200")
v.SetDefault("httpaddr", "0.0.0.0:2000")
v.SetDefault("log.level", "debug")
v.SetDefault("log.stdout", true)
v.SetDefault("log.filename", filepath.Join(dir, "bore-server.log"))
v.SetDefault("log.max_size", 500)
v.SetDefault("log.max_backups", 3)
v.SetDefault("log.max_age", 3)
v.SetEnvPrefix("bore")
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
v.AutomaticEnv()
if !fs.Exists(dir) {
err := fs.MakeDir(dir)
if err != nil {
return nil, err
}
}
if !strings.HasPrefix(configPath, "/") {
configPath = path.Join(dir, configPath)
}
if fs.Exists(configPath) {
v.SetConfigFile(configPath)
} else {
if err := v.SafeWriteConfigAs(configPath); err != nil {
return nil, err
}
}
return v, nil
}
// NewOptions returns server config.
func NewOptions(v *viper.Viper) (*Options, error) {
opts := &Options{}
if err := v.ReadInConfig(); err != nil {
return nil, err
}
err := v.Unmarshal(opts)
if err != nil {
return nil, err
}
rsa.GenerateRSA(opts.PrivateKey, opts.PublicKey)
return opts, nil
}
func getConfigDir() string {
home, err := homedir.Dir()
if err != nil {
panic(err)
}
return fmt.Sprintf("%s/bore", home)
}