Nest credential sections under go2rtc in frigate config
Frigate rejects unknown top-level keys (extra="forbid" on root config), but its RestreamConfig (go2rtc: block) allows extra keys. Move credential sections under go2rtc: with 2/4 space indentation. - writeCredentials emits " xiaomi:" + " \"<key>\": <value>" - upsertSection matches 2-space section header + 4-space key regex - insertNewSection places new nested sections after streams: block - findStreamInsertPoint stops at sibling headers (2-space) inside go2rtc: - Add xiaomi_test.go with 16 scenarios covering new config, addToConfig merging, token refresh, dedup, sort order, malformed URLs, special chars, go2rtc override, mixed protocols, and section order
This commit is contained in:
+11
-9
@@ -14,15 +14,17 @@ func writeStreamLines(b *strings.Builder, info *cameraInfo) {
|
||||
fmt.Fprintf(b, " '%s':\n", info.SubStreamName)
|
||||
fmt.Fprintf(b, " - %s\n", info.SubSource)
|
||||
}
|
||||
|
||||
b.WriteByte('\n')
|
||||
}
|
||||
|
||||
// writeCredentials writes top-level credential sections (xiaomi, tapo, ring, ...)
|
||||
// populated by registered ExtractFunc handlers. Sorted by section, then by key.
|
||||
// writeCredentials writes credential sections (xiaomi, tapo, ring, ...) as
|
||||
// nested keys under go2rtc:, populated by registered ExtractFunc handlers.
|
||||
// Sorted by section, then by key. Frigate only allows known keys at root,
|
||||
// so credentials must live inside go2rtc: (which allows extra keys).
|
||||
// ex.
|
||||
// xiaomi:
|
||||
// "4161148305": V1:9d2w...
|
||||
// go2rtc:
|
||||
// streams: { ... }
|
||||
// xiaomi:
|
||||
// "4161148305": V1:9d2w...
|
||||
func writeCredentials(b *strings.Builder, creds map[string]map[string]string) {
|
||||
if len(creds) == 0 {
|
||||
return
|
||||
@@ -35,7 +37,7 @@ func writeCredentials(b *strings.Builder, creds map[string]map[string]string) {
|
||||
sort.Strings(sections)
|
||||
|
||||
for _, section := range sections {
|
||||
fmt.Fprintf(b, "%s:\n", section)
|
||||
fmt.Fprintf(b, " %s:\n", section)
|
||||
|
||||
keys := make([]string, 0, len(creds[section]))
|
||||
for k := range creds[section] {
|
||||
@@ -44,10 +46,10 @@ func writeCredentials(b *strings.Builder, creds map[string]map[string]string) {
|
||||
sort.Strings(keys)
|
||||
|
||||
for _, k := range keys {
|
||||
fmt.Fprintf(b, " %q: %s\n", k, creds[section][k])
|
||||
fmt.Fprintf(b, " %q: %s\n", k, creds[section][k])
|
||||
}
|
||||
b.WriteByte('\n')
|
||||
}
|
||||
b.WriteByte('\n')
|
||||
}
|
||||
|
||||
func writeCameraBlock(b *strings.Builder, info *cameraInfo, req *Request) {
|
||||
|
||||
Reference in New Issue
Block a user