@@ -16,6 +16,8 @@ import (
16
16
17
17
"github.com/datarhei/core/v16/app"
18
18
"github.com/datarhei/core/v16/config"
19
+ configstore "github.com/datarhei/core/v16/config/store"
20
+ configvars "github.com/datarhei/core/v16/config/vars"
19
21
"github.com/datarhei/core/v16/ffmpeg"
20
22
"github.com/datarhei/core/v16/http"
21
23
"github.com/datarhei/core/v16/http/cache"
@@ -96,7 +98,7 @@ type api struct {
96
98
97
99
config struct {
98
100
path string
99
- store config .Store
101
+ store configstore .Store
100
102
config * config.Config
101
103
}
102
104
@@ -145,7 +147,7 @@ func (a *api) Reload() error {
145
147
146
148
logger := log .New ("Core" ).WithOutput (log .NewConsoleWriter (a .log .writer , log .Lwarn , true ))
147
149
148
- store , err := config . NewJSONStore (a .config .path , func () {
150
+ store , err := configstore . NewJSON (a .config .path , func () {
149
151
a .errorChan <- ErrConfigReload
150
152
})
151
153
if err != nil {
@@ -157,7 +159,7 @@ func (a *api) Reload() error {
157
159
cfg .Merge ()
158
160
159
161
if len (cfg .Host .Name ) == 0 && cfg .Host .Auto {
160
- cfg .SetPublicIPs ( )
162
+ cfg .Host . Name = net . GetPublicIPs ( 5 * time . Second )
161
163
}
162
164
163
165
cfg .Validate (false )
@@ -226,7 +228,7 @@ func (a *api) Reload() error {
226
228
logger .Info ().WithFields (logfields ).Log ("" )
227
229
228
230
configlogger := logger .WithComponent ("Config" )
229
- cfg .Messages (func (level string , v config .Variable , message string ) {
231
+ cfg .Messages (func (level string , v configvars .Variable , message string ) {
230
232
configlogger = configlogger .WithFields (log.Fields {
231
233
"variable" : v .Name ,
232
234
"value" : v .Value ,
@@ -362,11 +364,6 @@ func (a *api) start() error {
362
364
a .sessions = sessions
363
365
}
364
366
365
- store := store .NewJSONStore (store.JSONConfig {
366
- Dir : cfg .DB .Dir ,
367
- Logger : a .log .logger .core .WithComponent ("ProcessStore" ),
368
- })
369
-
370
367
diskfs , err := fs .NewDiskFilesystem (fs.DiskConfig {
371
368
Dir : cfg .Storage .Disk .Dir ,
372
369
Size : cfg .Storage .Disk .Size * 1024 * 1024 ,
@@ -481,6 +478,12 @@ func (a *api) start() error {
481
478
a .replacer .RegisterTemplate ("srt" , template )
482
479
}
483
480
481
+ store := store .NewJSONStore (store.JSONConfig {
482
+ Filepath : cfg .DB .Dir + "/db.json" ,
483
+ FFVersion : a .ffmpeg .Skills ().FFmpeg .Version ,
484
+ Logger : a .log .logger .core .WithComponent ("ProcessStore" ),
485
+ })
486
+
484
487
restream , err := restream .New (restream.Config {
485
488
ID : cfg .ID ,
486
489
Name : cfg .Name ,
@@ -649,98 +652,88 @@ func (a *api) start() error {
649
652
650
653
var autocertManager * certmagic.Config
651
654
652
- if cfg .TLS .Enable && cfg .TLS .Auto {
653
- if len (cfg .Host .Name ) == 0 {
654
- return fmt .Errorf ("at least one host must be provided in host.name or RS_HOST_NAME" )
655
- }
655
+ if cfg .TLS .Enable {
656
+ if cfg .TLS .Auto {
657
+ if len (cfg .Host .Name ) == 0 {
658
+ return fmt .Errorf ("at least one host must be provided in host.name or RS_HOST_NAME" )
659
+ }
656
660
657
- certmagic .DefaultACME .Agreed = true
658
- certmagic .DefaultACME .Email = cfg .TLS .Email
659
- certmagic .DefaultACME .CA = certmagic .LetsEncryptProductionCA
660
- certmagic .DefaultACME .DisableHTTPChallenge = false
661
- certmagic .DefaultACME .DisableTLSALPNChallenge = true
662
- certmagic .DefaultACME .Logger = nil
661
+ certmagic .DefaultACME .Agreed = true
662
+ certmagic .DefaultACME .Email = cfg .TLS .Email
663
+ certmagic .DefaultACME .CA = certmagic .LetsEncryptProductionCA
664
+ certmagic .DefaultACME .DisableHTTPChallenge = false
665
+ certmagic .DefaultACME .DisableTLSALPNChallenge = true
666
+ certmagic .DefaultACME .Logger = nil
663
667
664
- certmagic .Default .Storage = & certmagic.FileStorage {
665
- Path : cfg .DB .Dir + "/cert" ,
666
- }
667
- certmagic .Default .DefaultServerName = cfg .Host .Name [0 ]
668
- certmagic .Default .Logger = nil
669
- certmagic .Default .OnEvent = func (event string , data interface {}) {
670
- message := ""
671
-
672
- switch data := data .(type ) {
673
- case string :
674
- message = data
675
- case fmt.Stringer :
676
- message = data .String ()
668
+ certmagic .Default .Storage = & certmagic.FileStorage {
669
+ Path : cfg .DB .Dir + "/cert" ,
677
670
}
671
+ certmagic .Default .DefaultServerName = cfg .Host .Name [0 ]
672
+ certmagic .Default .Logger = nil
678
673
679
- if len (message ) != 0 {
680
- a .log .logger .core .WithComponent ("certmagic" ).Info ().WithField ("event" , event ).Log (message )
681
- }
682
- }
674
+ magic := certmagic .NewDefault ()
675
+ acme := certmagic .NewACMEIssuer (magic , certmagic .DefaultACME )
683
676
684
- magic := certmagic .NewDefault ()
685
- acme := certmagic .NewACMEIssuer (magic , certmagic .DefaultACME )
677
+ magic .Issuers = []certmagic.Issuer {acme }
686
678
687
- magic . Issuers = []certmagic. Issuer { acme }
679
+ autocertManager = magic
688
680
689
- autocertManager = magic
681
+ // Start temporary http server on configured port
682
+ tempserver := & gohttp.Server {
683
+ Addr : cfg .Address ,
684
+ Handler : acme .HTTPChallengeHandler (gohttp .HandlerFunc (func (w gohttp.ResponseWriter , r * gohttp.Request ) {
685
+ w .WriteHeader (gohttp .StatusNotFound )
686
+ })),
687
+ ReadTimeout : 10 * time .Second ,
688
+ WriteTimeout : 10 * time .Second ,
689
+ MaxHeaderBytes : 1 << 20 ,
690
+ }
690
691
691
- // Start temporary http server on configured port
692
- tempserver := & gohttp.Server {
693
- Addr : cfg .Address ,
694
- Handler : acme .HTTPChallengeHandler (gohttp .HandlerFunc (func (w gohttp.ResponseWriter , r * gohttp.Request ) {
695
- w .WriteHeader (gohttp .StatusNotFound )
696
- })),
697
- ReadTimeout : 10 * time .Second ,
698
- WriteTimeout : 10 * time .Second ,
699
- MaxHeaderBytes : 1 << 20 ,
700
- }
692
+ wg := sync.WaitGroup {}
693
+ wg .Add (1 )
701
694
702
- wg := sync.WaitGroup {}
703
- wg .Add (1 )
695
+ go func () {
696
+ tempserver .ListenAndServe ()
697
+ wg .Done ()
698
+ }()
704
699
705
- go func () {
706
- tempserver .ListenAndServe ()
707
- wg .Done ()
708
- }()
700
+ var certerror bool
709
701
710
- var certerror bool
702
+ // For each domain, get the certificate
703
+ for _ , host := range cfg .Host .Name {
704
+ logger := a .log .logger .core .WithComponent ("Let's Encrypt" ).WithField ("host" , host )
705
+ logger .Info ().Log ("Acquiring certificate ..." )
711
706
712
- // For each domain, get the certificate
713
- for _ , host := range cfg .Host .Name {
714
- logger := a .log .logger .core .WithComponent ("Let's Encrypt" ).WithField ("host" , host )
715
- logger .Info ().Log ("Acquiring certificate ..." )
707
+ ctx , cancel := context .WithDeadline (context .Background (), time .Now ().Add (5 * time .Minute ))
716
708
717
- ctx , cancel := context . WithDeadline ( context . Background (), time . Now (). Add ( 5 * time . Minute ) )
709
+ err := autocertManager . ManageSync ( ctx , [] string { host } )
718
710
719
- err := autocertManager . ManageSync ( ctx , [] string { host } )
711
+ cancel ( )
720
712
721
- cancel ()
713
+ if err != nil {
714
+ logger .Error ().WithField ("error" , err ).Log ("Failed to acquire certificate" )
715
+ certerror = true
716
+ break
717
+ }
722
718
723
- if err != nil {
724
- logger .Error ().WithField ("error" , err ).Log ("Failed to acquire certificate" )
725
- certerror = true
726
- break
719
+ logger .Info ().Log ("Successfully acquired certificate" )
727
720
}
728
721
729
- logger .Info ().Log ("Successfully acquired certificate" )
730
- }
731
-
732
- // Shut down the temporary http server
733
- tempserver .Close ()
722
+ // Shut down the temporary http server
723
+ tempserver .Close ()
734
724
735
- wg .Wait ()
725
+ wg .Wait ()
736
726
737
- if certerror {
738
- a .log .logger .core .Warn ().Log ("Continuing with disabled TLS" )
739
- autocertManager = nil
740
- cfg .TLS .Enable = false
727
+ if certerror {
728
+ a .log .logger .core .Warn ().Log ("Continuing with disabled TLS" )
729
+ autocertManager = nil
730
+ cfg .TLS .Enable = false
731
+ } else {
732
+ cfg .TLS .CertFile = ""
733
+ cfg .TLS .KeyFile = ""
734
+ }
741
735
} else {
742
- cfg .TLS .CertFile = ""
743
- cfg .TLS .KeyFile = ""
736
+ a .log .logger .core .Info ().Log ("Enabling TLS with cert and key files" )
744
737
}
745
738
}
746
739
@@ -756,14 +749,15 @@ func (a *api) start() error {
756
749
Collector : a .sessions .Collector ("rtmp" ),
757
750
}
758
751
759
- if autocertManager != nil && cfg .RTMP .EnableTLS {
760
- config .TLSConfig = & tls.Config {
761
- GetCertificate : autocertManager .GetCertificate ,
762
- }
763
-
752
+ if cfg .RTMP .EnableTLS {
764
753
config .Logger = config .Logger .WithComponent ("RTMP/S" )
765
754
766
755
a .log .logger .rtmps = a .log .logger .core .WithComponent ("RTMPS" ).WithField ("address" , cfg .RTMP .AddressTLS )
756
+ if autocertManager != nil {
757
+ config .TLSConfig = & tls.Config {
758
+ GetCertificate : autocertManager .GetCertificate ,
759
+ }
760
+ }
767
761
}
768
762
769
763
rtmpserver , err := rtmp .New (config )
0 commit comments