// 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/astaxie/beego" ) func GetConfigString(key string) string { if value, ok := os.LookupEnv(key); ok { return value } return beego.AppConfig.String(key) } func GetConfigBool(key string) (bool, error) { value := GetConfigString(key) if value == "true" { return true, nil } else if value == "false" { return false, nil } return false, fmt.Errorf("value %s cannot be converted into bool", value) } func GetConfigInt64(key string) (int64, error) { value := GetConfigString(key) num, err := strconv.ParseInt(value, 10, 64) return num, err } 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 { beego.AppConfig.Set(key, value) } } } func GetBeegoConfDataSourceName() 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 }