Feat: get initial conf data from environment variables

pull/1475/head
AH-dark 3 years ago
parent 846438e3af
commit cc303e74dd
No known key found for this signature in database
GPG Key ID: 73D3D212EB75AB80

@ -1,52 +1,60 @@
package conf package conf
import "github.com/cloudreve/Cloudreve/v3/pkg/util"
// RedisConfig Redis服务器配置 // RedisConfig Redis服务器配置
var RedisConfig = &redis{ var RedisConfig = &redis{
Network: "tcp", Network: util.EnvStr("REDIS_NETWORK", "tcp"),
Server: "", Server: util.EnvStr("REDIS_SERVER", ""),
Password: "", Password: util.EnvStr("REDIS_PASSWORD", ""),
DB: "0", DB: util.EnvStr("REDIS_DB", "0"),
} }
// DatabaseConfig 数据库配置 // DatabaseConfig 数据库配置
var DatabaseConfig = &database{ var DatabaseConfig = &database{
Type: "UNSET", Type: util.EnvStr("DATABASE_TYPE", "UNSET"),
Charset: "utf8", User: util.EnvStr("DATABASE_USER", "root"),
DBFile: "cloudreve.db", Password: util.EnvStr("DATABASE_PASSWORD", ""),
Port: 3306, Host: util.EnvStr("DATABASE_HOST", "localhost"),
Name: util.EnvStr("DATABASE_NAME", "cloudreve"),
TablePrefix: util.EnvStr("DATABASE_TABLE_PREFIX", ""),
DBFile: util.EnvStr("DATABASE_DBFILE", "data.db"),
Port: util.EnvInt("DATABASE_PORT", 3306),
Charset: util.EnvStr("DATABASE_CHARSET", "utf8"),
} }
// SystemConfig 系统公用配置 // SystemConfig 系统公用配置
var SystemConfig = &system{ var SystemConfig = &system{
Debug: false, Debug: util.EnvStr("DEBUG", "false") == "true",
Mode: "master", Mode: util.EnvStr("MODE", "master"),
Listen: ":5212", Listen: util.EnvStr("LISTEN", ":5212"),
} }
// CORSConfig 跨域配置 // CORSConfig 跨域配置
var CORSConfig = &cors{ var CORSConfig = &cors{
AllowOrigins: []string{"UNSET"}, AllowOrigins: util.EnvArr("CORS_ALLOW_ORIGINS", []string{"UNSET"}),
AllowMethods: []string{"PUT", "POST", "GET", "OPTIONS"}, AllowMethods: util.EnvArr("CORS_ALLOW_METHODS", []string{"PUT", "POST", "GET", "OPTIONS"}),
AllowHeaders: []string{"Cookie", "X-Cr-Policy", "Authorization", "Content-Length", "Content-Type", "X-Cr-Path", "X-Cr-FileName"}, AllowHeaders: util.EnvArr("CORS_ALLOW_HEADERS", []string{"Cookie", "X-Cr-Policy", "Authorization", "Content-Length", "Content-Type", "X-Cr-Path", "X-Cr-FileName"}),
AllowCredentials: false, AllowCredentials: util.EnvStr("CORS_ALLOW_CREDENTIALS", "false") == "true",
ExposeHeaders: nil, ExposeHeaders: util.EnvArr("CORS_EXPOSE_HEADERS", nil),
} }
// SlaveConfig 从机配置 // SlaveConfig 从机配置
var SlaveConfig = &slave{ var SlaveConfig = &slave{
CallbackTimeout: 20, Secret: util.EnvStr("SLAVE_SECRET", ""),
SignatureTTL: 60, CallbackTimeout: util.EnvInt("SLAVE_CALLBACK_TIMEOUT", 10),
SignatureTTL: util.EnvInt("SLAVE_SIGNATURE_TTL", 10),
} }
var SSLConfig = &ssl{ var SSLConfig = &ssl{
Listen: ":443", Listen: util.EnvStr("SSL_LISTEN", ":443"),
CertPath: "", CertPath: util.EnvStr("SSL_CERT_PATH", ""),
KeyPath: "", KeyPath: util.EnvStr("SSL_KEY_PATH", ""),
} }
var UnixConfig = &unix{ var UnixConfig = &unix{
Listen: "", Listen: util.EnvStr("UNIX_LISTEN", ""),
ProxyHeader: "X-Forwarded-For", ProxyHeader: util.EnvStr("UNIX_PROXY_HEADER", "X-Forwarded-For"),
} }
var OptionOverwrite = map[string]interface{}{} var OptionOverwrite = map[string]interface{}{}

@ -0,0 +1,40 @@
package util
import (
"os"
"strconv"
"strings"
)
// EnvStr returns the value of the environment variable named by the key.
func EnvStr(key, defaultValue string) string {
if value, exist := os.LookupEnv(key); exist {
return value
}
return defaultValue
}
// EnvInt returns the value of the environment variable named by the key.
func EnvInt(key string, defaultValue int) int {
if value, exist := os.LookupEnv(key); exist {
number, err := strconv.Atoi(value)
if err != nil {
// I think that we should log this error
return defaultValue
}
return number
}
return defaultValue
}
// EnvArr returns the value of the environment variable named by the key.
func EnvArr(key string, defaultValue []string) []string {
if value, exist := os.LookupEnv(key); exist {
return strings.Split(value, ",")
}
return defaultValue
}

@ -0,0 +1,63 @@
package util
import (
"github.com/stretchr/testify/assert"
"os"
"testing"
)
func TestEnvStr(t *testing.T) {
asserts := assert.New(t)
{
asserts.Equal("default", EnvStr("not_exist", "default"))
}
{
err := os.Setenv("exist", "value")
asserts.NoError(err)
asserts.Equal("value", EnvStr("exist", "default"))
err = os.Unsetenv("exist")
asserts.NoError(err)
asserts.Equal("default", EnvStr("exist", "default"))
}
}
func TestEnvInt(t *testing.T) {
asserts := assert.New(t)
{
asserts.Equal(1, EnvInt("not_exist", 1))
}
{
err := os.Setenv("exist", "2")
asserts.NoError(err)
asserts.Equal(2, EnvInt("exist", 1))
err = os.Unsetenv("exist")
asserts.NoError(err)
asserts.Equal(1, EnvInt("exist", 1))
}
{
err := os.Setenv("exist", "not_number")
asserts.NoError(err)
asserts.Equal(1, EnvInt("exist", 1))
}
}
func TestEnvArr(t *testing.T) {
asserts := assert.New(t)
{
asserts.Equal([]string{"default"}, EnvArr("not_exist", []string{"default"}))
}
{
err := os.Setenv("exist", "value1,value2")
asserts.NoError(err)
asserts.Equal([]string{"value1", "value2"}, EnvArr("exist", []string{"default"}))
err = os.Unsetenv("exist")
asserts.NoError(err)
asserts.Equal([]string{"default"}, EnvArr("exist", []string{"default"}))
}
}
Loading…
Cancel
Save