mirror of
https://github.com/safing/portbase
synced 2025-09-01 10:09:50 +00:00
72 lines
2 KiB
Go
72 lines
2 KiB
Go
// Package config ... (linter fix)
|
|
//nolint:dupl
|
|
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// Expertise Level constants
|
|
const (
|
|
ExpertiseLevelUser uint8 = 0
|
|
ExpertiseLevelExpert uint8 = 1
|
|
ExpertiseLevelDeveloper uint8 = 2
|
|
|
|
ExpertiseLevelNameUser = "user"
|
|
ExpertiseLevelNameExpert = "expert"
|
|
ExpertiseLevelNameDeveloper = "developer"
|
|
|
|
expertiseLevelKey = "core/expertiseLevel"
|
|
)
|
|
|
|
var (
|
|
expertiseLevel *int32
|
|
)
|
|
|
|
func init() {
|
|
var expertiseLevelVal int32
|
|
expertiseLevel = &expertiseLevelVal
|
|
|
|
registerExpertiseLevelOption()
|
|
}
|
|
|
|
func registerExpertiseLevelOption() {
|
|
err := Register(&Option{
|
|
Name: "Expertise Level",
|
|
Key: expertiseLevelKey,
|
|
Description: "The Expertise Level controls the perceived complexity. Higher settings will show you more complex settings and information. This might also affect various other things relying on this setting. Modified settings in higher expertise levels stay in effect when switching back. (Unlike the Release Level)",
|
|
|
|
OptType: OptTypeString,
|
|
ExpertiseLevel: ExpertiseLevelUser,
|
|
ReleaseLevel: ExpertiseLevelUser,
|
|
|
|
RequiresRestart: false,
|
|
DefaultValue: ExpertiseLevelNameUser,
|
|
|
|
ExternalOptType: "string list",
|
|
ValidationRegex: fmt.Sprintf("^(%s|%s|%s)$", ExpertiseLevelNameUser, ExpertiseLevelNameExpert, ExpertiseLevelNameDeveloper),
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func updateExpertiseLevel() {
|
|
new := findStringValue(expertiseLevelKey, "")
|
|
switch new {
|
|
case ExpertiseLevelNameUser:
|
|
atomic.StoreInt32(expertiseLevel, int32(ExpertiseLevelUser))
|
|
case ExpertiseLevelNameExpert:
|
|
atomic.StoreInt32(expertiseLevel, int32(ExpertiseLevelExpert))
|
|
case ExpertiseLevelNameDeveloper:
|
|
atomic.StoreInt32(expertiseLevel, int32(ExpertiseLevelDeveloper))
|
|
default:
|
|
atomic.StoreInt32(expertiseLevel, int32(ExpertiseLevelUser))
|
|
}
|
|
}
|
|
|
|
// GetExpertiseLevel returns the current active expertise level.
|
|
func GetExpertiseLevel() uint8 {
|
|
return uint8(atomic.LoadInt32(expertiseLevel))
|
|
}
|