wip: migrate to mono-repo. SPN has already been moved to spn/
This commit is contained in:
112
service/core/config.go
Normal file
112
service/core/config.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"flag"
|
||||
|
||||
locale "github.com/Xuanwo/go-locale"
|
||||
"golang.org/x/exp/slices"
|
||||
|
||||
"github.com/safing/portbase/config"
|
||||
"github.com/safing/portbase/log"
|
||||
)
|
||||
|
||||
// Configuration Keys.
|
||||
var (
|
||||
// CfgDevModeKey was previously defined here.
|
||||
CfgDevModeKey = config.CfgDevModeKey
|
||||
|
||||
CfgNetworkServiceKey = "core/networkService"
|
||||
defaultNetworkServiceMode bool
|
||||
|
||||
CfgLocaleKey = "core/locale"
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.BoolVar(
|
||||
&defaultNetworkServiceMode,
|
||||
"network-service",
|
||||
false,
|
||||
"set default network service mode; configuration is stronger",
|
||||
)
|
||||
}
|
||||
|
||||
func registerConfig() error {
|
||||
if err := config.Register(&config.Option{
|
||||
Name: "Network Service",
|
||||
Key: CfgNetworkServiceKey,
|
||||
Description: "Use the Portmaster as a network service, where applicable. You will have to take care of lots of network setup yourself in order to run this properly and securely.",
|
||||
OptType: config.OptTypeBool,
|
||||
ExpertiseLevel: config.ExpertiseLevelExpert,
|
||||
ReleaseLevel: config.ReleaseLevelExperimental,
|
||||
DefaultValue: defaultNetworkServiceMode,
|
||||
Annotations: config.Annotations{
|
||||
config.DisplayOrderAnnotation: 513,
|
||||
config.CategoryAnnotation: "Network Service",
|
||||
},
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := config.Register(&config.Option{
|
||||
Name: "Time and Date Format",
|
||||
Key: CfgLocaleKey,
|
||||
Description: "Configures the time and date format for the user interface. Selection is an example and correct formatting in the UI is a continual work in progress.",
|
||||
OptType: config.OptTypeString,
|
||||
ExpertiseLevel: config.ExpertiseLevelUser,
|
||||
ReleaseLevel: config.ReleaseLevelStable,
|
||||
DefaultValue: getDefaultLocale(),
|
||||
PossibleValues: []config.PossibleValue{
|
||||
{
|
||||
Name: "24h DD-MM-YYYY",
|
||||
Value: enGBLocale,
|
||||
},
|
||||
{
|
||||
Name: "12h MM/DD/YYYY",
|
||||
Value: enUSLocale,
|
||||
},
|
||||
},
|
||||
Annotations: config.Annotations{
|
||||
config.CategoryAnnotation: "User Interface",
|
||||
config.DisplayHintAnnotation: config.DisplayHintOneOf,
|
||||
config.RequiresUIReloadAnnotation: true,
|
||||
},
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDefaultLocale() string {
|
||||
// Get locales from system.
|
||||
detectedLocales, err := locale.DetectAll()
|
||||
if err != nil {
|
||||
log.Warningf("core: failed to detect locale: %s", err)
|
||||
return enGBLocale
|
||||
}
|
||||
|
||||
// log.Debugf("core: detected locales: %s", detectedLocales)
|
||||
|
||||
// Check if there is a locale that corresponds to the en-US locale.
|
||||
for _, detectedLocale := range detectedLocales {
|
||||
if slices.Contains[[]string, string](defaultEnUSLocales, detectedLocale.String()) {
|
||||
return enUSLocale
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise, return the en-GB locale as default.
|
||||
return enGBLocale
|
||||
}
|
||||
|
||||
var (
|
||||
enGBLocale = "en-GB"
|
||||
enUSLocale = "en-US"
|
||||
|
||||
defaultEnUSLocales = []string{
|
||||
"en-AS", // English (American Samoa)
|
||||
"en-GU", // English (Guam)
|
||||
"en-UM", // English (U.S. Minor Outlying Islands)
|
||||
"en-US", // English (United States)
|
||||
"en-VI", // English (U.S. Virgin Islands)
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user