// Copyright 2021 The Casdoor Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package conf import ( "fmt" "os" "runtime" "strconv" "strings" "github.com/beego/beego" ) func init() { // this array contains the beego configuration items that may be modified via env presetConfigItems := []string{"httpport", "appname"} for _, key := range presetConfigItems { if value, ok := os.LookupEnv(key); ok { err := beego.AppConfig.Set(key, value) if err != nil { panic(err) } } } } func GetConfigString(key string) string { if value, ok := os.LookupEnv(key); ok { return value } res := beego.AppConfig.String(key) if res == "" { if key == "staticBaseUrl" { res = "https://cdn.casbin.org" } else if key == "logConfig" { res = fmt.Sprintf("{\"filename\": \"logs/%s.log\", \"maxdays\":99999, \"perm\":\"0770\"}", beego.AppConfig.String("appname")) } } return res } func GetConfigBool(key string) bool { value := GetConfigString(key) if value == "true" { return true } else { return false } } func GetConfigInt64(key string) (int64, error) { value := GetConfigString(key) num, err := strconv.ParseInt(value, 10, 64) return num, err } func GetConfigDataSourceName() string { dataSourceName := GetConfigString("dataSourceName") runningInDocker := os.Getenv("RUNNING_IN_DOCKER") if runningInDocker == "true" { // https://stackoverflow.com/questions/48546124/what-is-linux-equivalent-of-host-docker-internal if runtime.GOOS == "linux" { dataSourceName = strings.ReplaceAll(dataSourceName, "localhost", "172.17.0.1") } else { dataSourceName = strings.ReplaceAll(dataSourceName, "localhost", "host.docker.internal") } } return dataSourceName } func GetLanguage(language string) string { if language == "" || language == "*" { return "en" } if len(language) != 2 || language == "nu" { return "en" } else { return language } } func IsDemoMode() bool { return strings.ToLower(GetConfigString("isDemoMode")) == "true" } func GetConfigBatchSize() int { res, err := strconv.Atoi(GetConfigString("batchSize")) if err != nil { res = 100 } return res } func GetConfigRealDataSourceName(driverName string) string { var dataSourceName string if driverName != "mysql" { dataSourceName = GetConfigDataSourceName() } else { dataSourceName = GetConfigDataSourceName() + GetConfigString("dbName") } return dataSourceName }