From bbcf0ab1b1a4b106b8c9a6053580588fa4f51984 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 09:25:29 +0200 Subject: [PATCH 1/7] Fix double slashes in RTMP URL --- app/api/api.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/api/api.go b/app/api/api.go index a60ec3ce..8ba5806d 100644 --- a/app/api/api.go +++ b/app/api/api.go @@ -454,7 +454,12 @@ func (a *api) start() error { host = "localhost" } - template := "rtmp://" + host + ":" + port + cfg.RTMP.App + "/{name}" + template := "rtmp://" + host + ":" + port + if cfg.RTMP.App != "/" { + template += cfg.RTMP.App + } + template += "/{name}" + if len(cfg.RTMP.Token) != 0 { template += "?token=" + cfg.RTMP.Token } From fe2e9d375c4ff00d99968feb3648ff794e1581e0 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 12:12:36 +0200 Subject: [PATCH 2/7] Use LE porduction CA, allow to configure an email address --- app/api/api.go | 4 ++-- config/config.go | 8 ++++++++ config/data.go | 9 ++++++++- config/types.go | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/app/api/api.go b/app/api/api.go index 8ba5806d..647da500 100644 --- a/app/api/api.go +++ b/app/api/api.go @@ -655,8 +655,8 @@ func (a *api) start() error { } certmagic.DefaultACME.Agreed = true - certmagic.DefaultACME.Email = "" - certmagic.DefaultACME.CA = certmagic.LetsEncryptStagingCA + certmagic.DefaultACME.Email = cfg.TLS.Email + certmagic.DefaultACME.CA = certmagic.LetsEncryptProductionCA certmagic.DefaultACME.DisableHTTPChallenge = false certmagic.DefaultACME.DisableTLSALPNChallenge = true certmagic.DefaultACME.Logger = nil diff --git a/config/config.go b/config/config.go index ef1f3e1a..485fa88b 100644 --- a/config/config.go +++ b/config/config.go @@ -176,6 +176,7 @@ func (d *Config) init() { d.val(newAddressValue(&d.TLS.Address, ":8181"), "tls.address", "CORE_TLS_ADDRESS", nil, "HTTPS listening address", false, false) d.val(newBoolValue(&d.TLS.Enable, false), "tls.enable", "CORE_TLS_ENABLE", nil, "Enable HTTPS", false, false) d.val(newBoolValue(&d.TLS.Auto, false), "tls.auto", "CORE_TLS_AUTO", nil, "Enable Let's Encrypt certificate", false, false) + d.val(newEmailValue(&d.TLS.Email, "cert@datarhei.com"), "tls.email", "CORE_TLS_EMAIL", nil, "Email for Let's Encrypt registration", false, false) d.val(newFileValue(&d.TLS.CertFile, ""), "tls.cert_file", "CORE_TLS_CERTFILE", nil, "Path to certificate file in PEM format", false, false) d.val(newFileValue(&d.TLS.KeyFile, ""), "tls.key_file", "CORE_TLS_KEYFILE", nil, "Path to key file in PEM format", false, false) @@ -419,6 +420,13 @@ func (d *Config) Validate(resetLogs bool) { } } + // If TLS and Let's Encrypt certificate is enabled, we require a non-empty email address + if d.TLS.Enable && d.TLS.Auto { + if len(d.TLS.Email) == 0 { + d.log("error", d.findVariable("tls.email"), "an email address must be set in order to get an automatic TLS certificate") + } + } + // If TLS for RTMP is enabled, TLS must be enabled if d.RTMP.EnableTLS { if !d.RTMP.Enable { diff --git a/config/data.go b/config/data.go index 8dd82822..d273368d 100644 --- a/config/data.go +++ b/config/data.go @@ -54,6 +54,7 @@ type Data struct { Address string `json:"address"` Enable bool `json:"enable"` Auto bool `json:"auto"` + Email string `json:"email"` CertFile string `json:"cert_file"` KeyFile string `json:"key_file"` } `json:"tls"` @@ -174,7 +175,6 @@ func NewV3FromV2(d *dataV2) (*Data, error) { data.DB = d.DB data.Host = d.Host data.API = d.API - data.TLS = d.TLS data.RTMP = d.RTMP data.SRT = d.SRT data.FFmpeg = d.FFmpeg @@ -211,6 +211,13 @@ func NewV3FromV2(d *dataV2) (*Data, error) { data.Router.Routes = copyStringMap(d.Router.Routes) // Actual changes + data.TLS.Enable = d.TLS.Enable + data.TLS.Address = d.TLS.Address + data.TLS.Auto = d.TLS.Auto + data.TLS.CertFile = d.TLS.CertFile + data.TLS.KeyFile = d.TLS.KeyFile + data.TLS.Email = "cert@datarhei.com" + data.Storage.MimeTypes = d.Storage.MimeTypes data.Storage.CORS = d.Storage.CORS diff --git a/config/types.go b/config/types.go index 3b5532ec..f5a27e82 100644 --- a/config/types.go +++ b/config/types.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net" + "net/mail" "net/url" "os" "os/exec" @@ -805,3 +806,39 @@ func (s *absolutePathValue) Validate() error { func (s *absolutePathValue) IsEmpty() bool { return len(string(*s)) == 0 } + +// email address + +type emailValue string + +func newEmailValue(p *string, val string) *emailValue { + *p = val + return (*emailValue)(p) +} + +func (s *emailValue) Set(val string) error { + addr, err := mail.ParseAddress(val) + if err != nil { + return err + } + + *s = emailValue(addr.Address) + return nil +} + +func (s *emailValue) String() string { + return string(*s) +} + +func (s *emailValue) Validate() error { + if len(s.String()) == 0 { + return nil + } + + _, err := mail.ParseAddress(s.String()) + return err +} + +func (s *emailValue) IsEmpty() bool { + return len(string(*s)) == 0 +} From 22f1fb2d97f7fe83dfda4f724fd964669d58a2f4 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 12:13:38 +0200 Subject: [PATCH 3/7] Bump version to 16.11.0 --- app/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/version.go b/app/version.go index 0b6b5332..40c3f34b 100644 --- a/app/version.go +++ b/app/version.go @@ -29,7 +29,7 @@ func (v versionInfo) MinorString() string { // Version of the app var Version = versionInfo{ Major: 16, - Minor: 10, + Minor: 11, Patch: 0, } From 33bd7bd3846a99291865da50236e79385829f3dd Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 12:25:01 +0200 Subject: [PATCH 4/7] Set default email address --- config/config.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 485fa88b..9086d876 100644 --- a/config/config.go +++ b/config/config.go @@ -423,7 +423,8 @@ func (d *Config) Validate(resetLogs bool) { // If TLS and Let's Encrypt certificate is enabled, we require a non-empty email address if d.TLS.Enable && d.TLS.Auto { if len(d.TLS.Email) == 0 { - d.log("error", d.findVariable("tls.email"), "an email address must be set in order to get an automatic TLS certificate") + v := d.findVariable("tls.email") + v.value.Set(v.defVal) } } From 56ff5b1c609eeab654f5fb75bf64a27208125690 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 12:43:37 +0200 Subject: [PATCH 5/7] Update changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 339457e7..5ac10ee8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Core +### Core v16.10.0 > v16.11.0 + +- Fix use of Let's Encrypt production CA +- Add email address in TLS config for Let's Encrypt + ### Core v16.9.1 > v16.10.0 - Add HLS session middleware to diskfs From eeec59f8b12625ce8f6709231d60a6499b16aa7b Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 30 Sep 2022 13:58:21 +0200 Subject: [PATCH 6/7] Fix last minor version bump to patch version bump --- CHANGELOG.md | 2 +- app/version.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ac10ee8..cb1ddf0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Core -### Core v16.10.0 > v16.11.0 +### Core v16.10.0 > v16.10.1 - Fix use of Let's Encrypt production CA - Add email address in TLS config for Let's Encrypt diff --git a/app/version.go b/app/version.go index 40c3f34b..41660539 100644 --- a/app/version.go +++ b/app/version.go @@ -29,8 +29,8 @@ func (v versionInfo) MinorString() string { // Version of the app var Version = versionInfo{ Major: 16, - Minor: 11, - Patch: 0, + Minor: 10, + Patch: 1, } // Commit is the git commit the app is build from. It should be filled in during compilation From eb57fb5e7043e3ec1fa7ceaee8eb66997c7751ab Mon Sep 17 00:00:00 2001 From: Jan Stabenow Date: Fri, 30 Sep 2022 15:03:21 +0200 Subject: [PATCH 7/7] Mod updates build env. --- .github_build/Build.alpine.env | 4 ++-- .github_build/Build.ubuntu.env | 4 ++-- CHANGELOG.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github_build/Build.alpine.env b/.github_build/Build.alpine.env index 37ab09e3..a0bd0a5c 100644 --- a/.github_build/Build.alpine.env +++ b/.github_build/Build.alpine.env @@ -1,5 +1,5 @@ # CORE ALPINE BASE IMAGE OS_NAME=alpine OS_VERSION=3.15 -GOLANG_IMAGE=golang:1.18.4-alpine3.15 -CORE_VERSION=16.9.1 +GOLANG_IMAGE=golang:1.18.6-alpine3.15 +CORE_VERSION=16.10.1 diff --git a/.github_build/Build.ubuntu.env b/.github_build/Build.ubuntu.env index 17f5133e..d2b205a9 100644 --- a/.github_build/Build.ubuntu.env +++ b/.github_build/Build.ubuntu.env @@ -1,5 +1,5 @@ # CORE UBUNTU BASE IMAGE OS_NAME=ubuntu OS_VERSION=20.04 -GOLANG_IMAGE=golang:1.18.4-alpine3.15 -CORE_VERSION=16.9.1 +GOLANG_IMAGE=golang:1.18.6-alpine3.15 +CORE_VERSION=16.10.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index cb1ddf0a..50869919 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,8 @@ ### Core v16.10.0 > v16.10.1 -- Fix use of Let's Encrypt production CA - Add email address in TLS config for Let's Encrypt +- Fix use of Let's Encrypt production CA ### Core v16.9.1 > v16.10.0