add secret management functions

This commit is contained in:
seydx
2025-05-20 12:07:46 +02:00
parent 7107508286
commit 0830d8342e
2 changed files with 56 additions and 0 deletions
+9
View File
@@ -13,6 +13,7 @@ var (
Version string
UserAgent string
ConfigPath string
SecretPath string
Info = make(map[string]any)
)
@@ -25,11 +26,14 @@ const usage = `Usage of go2rtc:
func Init() {
var config flagConfig
var secret string
var daemon bool
var version bool
flag.Var(&config, "config", "")
flag.Var(&config, "c", "")
flag.StringVar(&secret, "secret", "go2rtc.secret", "")
flag.StringVar(&secret, "s", "go2rtc.secret", "")
flag.BoolVar(&daemon, "daemon", false, "")
flag.BoolVar(&daemon, "d", false, "")
flag.BoolVar(&version, "version", false, "")
@@ -67,6 +71,7 @@ func Init() {
Info["revision"] = revision
initConfig(config)
initSecret(secret)
initLogger()
platform := fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
@@ -76,6 +81,10 @@ func Init() {
if ConfigPath != "" {
Logger.Info().Str("path", ConfigPath).Msg("config")
}
if SecretPath != "" {
Logger.Info().Str("path", SecretPath).Msg("secrets")
}
}
func readRevisionTime() (revision, vcsTime string) {
+47
View File
@@ -18,6 +18,14 @@ func LoadConfig(v any) {
}
}
func LoadSecret(v any) {
for _, data := range secrets {
if err := yaml.Unmarshal(data, v); err != nil {
Logger.Warn().Err(err).Send()
}
}
}
func PatchConfig(path []string, value any) error {
if ConfigPath == "" {
return errors.New("config file disabled")
@@ -34,6 +42,27 @@ func PatchConfig(path []string, value any) error {
return os.WriteFile(ConfigPath, b, 0644)
}
func PatchSecret(path []string, value any) error {
if SecretPath == "" {
return errors.New("secret file disabled")
}
// empty config is OK
b, _ := os.ReadFile(SecretPath)
b, err := yaml.Patch(b, path, value)
if err != nil {
return err
}
if err := os.WriteFile(SecretPath, b, 0644); err == nil {
secrets = [][]byte{b}
}
return err
}
type flagConfig []string
func (c *flagConfig) String() string {
@@ -46,6 +75,7 @@ func (c *flagConfig) Set(value string) error {
}
var configs [][]byte
var secrets [][]byte
func initConfig(confs flagConfig) {
if confs == nil {
@@ -86,6 +116,23 @@ func initConfig(confs flagConfig) {
}
}
func initSecret(secret string) {
if secret == "" {
secret = "go2rtc.secrets"
}
SecretPath = secret
if SecretPath != "" {
if !filepath.IsAbs(SecretPath) {
if cwd, err := os.Getwd(); err == nil {
SecretPath = filepath.Join(cwd, SecretPath)
}
}
Info["secret_path"] = SecretPath
}
}
func parseConfString(s string) []byte {
i := strings.IndexByte(s, '=')
if i < 0 {