add secret management functions
This commit is contained in:
@@ -13,6 +13,7 @@ var (
|
|||||||
Version string
|
Version string
|
||||||
UserAgent string
|
UserAgent string
|
||||||
ConfigPath string
|
ConfigPath string
|
||||||
|
SecretPath string
|
||||||
Info = make(map[string]any)
|
Info = make(map[string]any)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -25,11 +26,14 @@ const usage = `Usage of go2rtc:
|
|||||||
|
|
||||||
func Init() {
|
func Init() {
|
||||||
var config flagConfig
|
var config flagConfig
|
||||||
|
var secret string
|
||||||
var daemon bool
|
var daemon bool
|
||||||
var version bool
|
var version bool
|
||||||
|
|
||||||
flag.Var(&config, "config", "")
|
flag.Var(&config, "config", "")
|
||||||
flag.Var(&config, "c", "")
|
flag.Var(&config, "c", "")
|
||||||
|
flag.StringVar(&secret, "secret", "go2rtc.secret", "")
|
||||||
|
flag.StringVar(&secret, "s", "go2rtc.secret", "")
|
||||||
flag.BoolVar(&daemon, "daemon", false, "")
|
flag.BoolVar(&daemon, "daemon", false, "")
|
||||||
flag.BoolVar(&daemon, "d", false, "")
|
flag.BoolVar(&daemon, "d", false, "")
|
||||||
flag.BoolVar(&version, "version", false, "")
|
flag.BoolVar(&version, "version", false, "")
|
||||||
@@ -67,6 +71,7 @@ func Init() {
|
|||||||
Info["revision"] = revision
|
Info["revision"] = revision
|
||||||
|
|
||||||
initConfig(config)
|
initConfig(config)
|
||||||
|
initSecret(secret)
|
||||||
initLogger()
|
initLogger()
|
||||||
|
|
||||||
platform := fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
|
platform := fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
|
||||||
@@ -76,6 +81,10 @@ func Init() {
|
|||||||
if ConfigPath != "" {
|
if ConfigPath != "" {
|
||||||
Logger.Info().Str("path", ConfigPath).Msg("config")
|
Logger.Info().Str("path", ConfigPath).Msg("config")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if SecretPath != "" {
|
||||||
|
Logger.Info().Str("path", SecretPath).Msg("secrets")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func readRevisionTime() (revision, vcsTime string) {
|
func readRevisionTime() (revision, vcsTime string) {
|
||||||
|
|||||||
@@ -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 {
|
func PatchConfig(path []string, value any) error {
|
||||||
if ConfigPath == "" {
|
if ConfigPath == "" {
|
||||||
return errors.New("config file disabled")
|
return errors.New("config file disabled")
|
||||||
@@ -34,6 +42,27 @@ func PatchConfig(path []string, value any) error {
|
|||||||
return os.WriteFile(ConfigPath, b, 0644)
|
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
|
type flagConfig []string
|
||||||
|
|
||||||
func (c *flagConfig) String() string {
|
func (c *flagConfig) String() string {
|
||||||
@@ -46,6 +75,7 @@ func (c *flagConfig) Set(value string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var configs [][]byte
|
var configs [][]byte
|
||||||
|
var secrets [][]byte
|
||||||
|
|
||||||
func initConfig(confs flagConfig) {
|
func initConfig(confs flagConfig) {
|
||||||
if confs == nil {
|
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 {
|
func parseConfString(s string) []byte {
|
||||||
i := strings.IndexByte(s, '=')
|
i := strings.IndexByte(s, '=')
|
||||||
if i < 0 {
|
if i < 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user