From c5940a935531c64b1f283118fdf9a78104f9f327 Mon Sep 17 00:00:00 2001
From: Hamed Nemati <hitech.innovative@gmail.com>
Date: Mon, 24 Jun 2024 17:33:11 +0200
Subject: [PATCH] Fix: Use production endpoint for non dev environments

---
 main.go | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/main.go b/main.go
index 6015e1d..1f65619 100644
--- a/main.go
+++ b/main.go
@@ -2,6 +2,7 @@ package main
 
 import (
 	"bytes"
+	"context"
 	"crypto/tls"
 	"embed"
 	"encoding/gob"
@@ -103,20 +104,34 @@ func setupServer(mux http.Handler) (*http.Server, error) {
 		MaxHeaderBytes:    1 << 12,
 	}
 
-	if !dev && cert == "" && certKey == "" {
+	if cert == "" && certKey == "" {
 		domains := strings.Split(domain, ",")
-		tlsConfig, err := certmagic.TLS(domains)
-		if err != nil {
-			slog.Error("certmagic.TLS", err)
-			os.Exit(1)
+
+		ca := certmagic.LetsEncryptStagingCA
+
+		if !dev {
+			ca = certmagic.LetsEncryptProductionCA
 		}
 
 		magic := certmagic.NewDefault()
 		issuer := certmagic.NewACMEIssuer(magic, certmagic.ACMEIssuer{
-			CA:     certmagic.LetsEncryptStagingCA,
+			CA:     ca,
 			Email:  email,
 			Agreed: true,
 		})
+		magic.Issuers = []certmagic.Issuer{issuer}
+
+		ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+		defer cancel()
+
+		err := magic.ManageSync(ctx, domains)
+		if err != nil {
+			return nil, fmt.Errorf("magic.ManageSync: %w", err)
+		}
+
+		tlsConfig := magic.TLSConfig()
+
+		tlsConfig.NextProtos = append([]string{"h2", "http/1.1"}, tlsConfig.NextProtos...)
 
 		srv.Handler = issuer.HTTPChallengeHandler(mux)
 		srv.TLSConfig = tlsConfig