|
|
|
@ -119,34 +119,30 @@ func main() {
|
|
|
|
|
|
|
|
|
|
errChan := make(chan error, 1)
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
redirect := &http.Server{
|
|
|
|
|
Addr: config.HTTPAddress,
|
|
|
|
|
Handler: http.RedirectHandler(config.BaseURL, http.StatusMovedPermanently),
|
|
|
|
|
IdleTimeout: config.Timeouts.Idle,
|
|
|
|
|
ReadHeaderTimeout: config.Timeouts.ReadHeader,
|
|
|
|
|
ReadTimeout: config.Timeouts.Read,
|
|
|
|
|
WriteTimeout: config.Timeouts.Write,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := redirect.ListenAndServe(); err != nil {
|
|
|
|
|
errChan <- err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
close(errChan)
|
|
|
|
|
}()
|
|
|
|
|
infoLog.Printf("TLS config setup, starting TLS server on %s", config.HTTPSAddress)
|
|
|
|
|
|
|
|
|
|
tlsConfig, err := setupTLSConfig(config)
|
|
|
|
|
go setupHTTPRedirect(config, errChan)
|
|
|
|
|
|
|
|
|
|
err = app.startHTTPSServer(config)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errorLog.Fatalf("could not setup TLS configuration: %v", err)
|
|
|
|
|
errorLog.Fatalf("ListenAndServeTLS (HTTPS) failed: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
infoLog.Printf("TLS config setup, starting TLS server on %s", config.HTTPSAddress)
|
|
|
|
|
if err := <-errChan; err != nil {
|
|
|
|
|
errorLog.Fatalf("ListenAndServe (HTTP) failed: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (app *application) startHTTPSServer(config *Config) error {
|
|
|
|
|
tlsConfig, err := setupTLSConfig(config)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return fmt.Errorf("could not setup TLS configuration: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
srv := &http.Server{
|
|
|
|
|
Addr: config.HTTPSAddress,
|
|
|
|
|
TLSConfig: tlsConfig,
|
|
|
|
|
ErrorLog: errorLog,
|
|
|
|
|
ErrorLog: app.errorLog,
|
|
|
|
|
Handler: app.routes(),
|
|
|
|
|
IdleTimeout: config.Timeouts.Idle,
|
|
|
|
|
ReadHeaderTimeout: config.Timeouts.ReadHeader,
|
|
|
|
@ -156,12 +152,27 @@ func main() {
|
|
|
|
|
|
|
|
|
|
err = srv.ListenAndServeTLS(config.ServerCert, config.ServerKey)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errorLog.Fatalf("ListenAndServeTLS (HTTPS) failed: %v", err)
|
|
|
|
|
return fmt.Errorf("")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := <-errChan; err != nil {
|
|
|
|
|
errorLog.Fatalf("ListenAndServe (HTTP) failed: %v", err)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setupHTTPRedirect(config *Config, errChan chan error) {
|
|
|
|
|
redirect := &http.Server{
|
|
|
|
|
Addr: config.HTTPAddress,
|
|
|
|
|
Handler: http.RedirectHandler(config.BaseURL, http.StatusMovedPermanently),
|
|
|
|
|
IdleTimeout: config.Timeouts.Idle,
|
|
|
|
|
ReadHeaderTimeout: config.Timeouts.ReadHeader,
|
|
|
|
|
ReadTimeout: config.Timeouts.Read,
|
|
|
|
|
WriteTimeout: config.Timeouts.Write,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := redirect.ListenAndServe(); err != nil {
|
|
|
|
|
errChan <- err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
close(errChan)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setupTLSConfig(config *Config) (*tls.Config, error) {
|
|
|
|
|