mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-01 01:22:34 +02:00

Some checks are pending
Docker Image CI (socket-proxy) / build (push) Waiting to run
* refactor: simplify io code and make utils module independent * fix(docker): agent and socket-proxy docker event flushing with modified reverse proxy handler * refactor: remove unused code * refactor: remove the use of logging module in most code * refactor: streamline domain mismatch check in certState function * tweak: use ecdsa p-256 for autocert * fix(tests): update health check tests for invalid host and add case for port in host * feat(acme): custom acme directory * refactor: code refactor and improved context and error handling * tweak: optimize memory usage under load * fix(oidc): restore old user matching behavior * docs: add ChatGPT assistant to README --------- Co-authored-by: yusing <yusing@6uo.me>
55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package certapi
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
config "github.com/yusing/go-proxy/internal/config/types"
|
|
"github.com/yusing/go-proxy/internal/gperr"
|
|
"github.com/yusing/go-proxy/internal/logging/memlogger"
|
|
"github.com/yusing/go-proxy/internal/net/gphttp/gpwebsocket"
|
|
)
|
|
|
|
func RenewCert(w http.ResponseWriter, r *http.Request) {
|
|
autocert := config.GetInstance().AutoCertProvider()
|
|
if autocert == nil {
|
|
http.Error(w, "autocert is not enabled", http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
conn, err := gpwebsocket.Initiate(w, r)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer conn.Close()
|
|
|
|
logs, cancel := memlogger.Events()
|
|
defer cancel()
|
|
|
|
done := make(chan struct{})
|
|
|
|
go func() {
|
|
defer close(done)
|
|
err = autocert.ObtainCert()
|
|
if err != nil {
|
|
gperr.LogError("failed to obtain cert", err)
|
|
_ = gpwebsocket.WriteText(conn, err.Error())
|
|
} else {
|
|
log.Info().Msg("cert obtained successfully")
|
|
}
|
|
}()
|
|
for {
|
|
select {
|
|
case l := <-logs:
|
|
if err != nil {
|
|
return
|
|
}
|
|
if err := gpwebsocket.WriteText(conn, string(l)); err != nil {
|
|
return
|
|
}
|
|
case <-done:
|
|
return
|
|
}
|
|
}
|
|
}
|