diff options
| author | Mistivia <i@mistivia.com> | 2025-11-02 15:29:28 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-11-02 15:29:28 +0800 |
| commit | 9f42c2d5f911cb4e215d7873221e642ce7df4d61 (patch) | |
| tree | 6dac90a889a7402a9556d3d1bcc5cb53cdb9f123 /deprecated-webircgateway/pkg/webircgateway/letsencrypt.go | |
| parent | fb2d9de539b660a261af19b1cbcceb7ee7980cb1 (diff) | |
deprecate webircdateway and ngircd
Diffstat (limited to 'deprecated-webircgateway/pkg/webircgateway/letsencrypt.go')
| -rw-r--r-- | deprecated-webircgateway/pkg/webircgateway/letsencrypt.go | 41 |
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 +} |
