summaryrefslogtreecommitdiff
path: root/deprecated-webircgateway/pkg/webircgateway/letsencrypt.go
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-02 15:29:28 +0800
committerMistivia <i@mistivia.com>2025-11-02 15:29:28 +0800
commit9f42c2d5f911cb4e215d7873221e642ce7df4d61 (patch)
tree6dac90a889a7402a9556d3d1bcc5cb53cdb9f123 /deprecated-webircgateway/pkg/webircgateway/letsencrypt.go
parentfb2d9de539b660a261af19b1cbcceb7ee7980cb1 (diff)
deprecate webircdateway and ngircd
Diffstat (limited to 'deprecated-webircgateway/pkg/webircgateway/letsencrypt.go')
-rw-r--r--deprecated-webircgateway/pkg/webircgateway/letsencrypt.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/deprecated-webircgateway/pkg/webircgateway/letsencrypt.go b/deprecated-webircgateway/pkg/webircgateway/letsencrypt.go
new file mode 100644
index 0000000..ffa6afe
--- /dev/null
+++ b/deprecated-webircgateway/pkg/webircgateway/letsencrypt.go
@@ -0,0 +1,41 @@
+package webircgateway
+
+import (
+ "context"
+ "strings"
+ "sync"
+
+ "golang.org/x/crypto/acme/autocert"
+)
+
+type LEManager struct {
+ // ensure only one instance of the manager and handler is running
+ // while allowing multiple listeners to use it
+ Mutex sync.Mutex
+ Manager *autocert.Manager
+ gateway *Gateway
+}
+
+func NewLetsEncryptManager(gateway *Gateway) *LEManager {
+ return &LEManager{gateway: gateway}
+}
+
+func (le *LEManager) Get(certCacheDir string) *autocert.Manager {
+ le.Mutex.Lock()
+ defer le.Mutex.Unlock()
+
+ // Create it if it doesn't already exist
+ if le.Manager == nil {
+ le.Manager = &autocert.Manager{
+ Prompt: autocert.AcceptTOS,
+ Cache: autocert.DirCache(strings.TrimRight(certCacheDir, "/")),
+ HostPolicy: func(ctx context.Context, host string) error {
+ le.gateway.Log(2, "Automatically requesting a HTTPS certificate for %s", host)
+ return nil
+ },
+ }
+ le.gateway.HttpRouter.Handle("/.well-known/", le.Manager.HTTPHandler(nil))
+ }
+
+ return le.Manager
+}