mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-29 00:55:51 +08:00
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package plg_starter_https
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"github.com/gorilla/mux"
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
"github.com/mickael-kerjean/filestash/server/common/ssl"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func init() {
|
|
Hooks.Register.Starter(func(r *mux.Router) {
|
|
domain := Config.Get("general.host").String()
|
|
port := Config.Get("general.port").Int()
|
|
Log.Info("[https] starting ...%s", domain)
|
|
srv := &http.Server{
|
|
Addr: fmt.Sprintf(":%d", port),
|
|
Handler: r,
|
|
TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler), 0),
|
|
TLSConfig: &DefaultTLSConfig,
|
|
ErrorLog: NewNilLogger(),
|
|
}
|
|
|
|
TLSCert, roots, err := ssl.GenerateSelfSigned()
|
|
if err != nil {
|
|
return
|
|
}
|
|
srv.TLSConfig.Certificates = []tls.Certificate{TLSCert}
|
|
HTTPClient.Transport.(*TransformedTransport).Orig.(*http.Transport).TLSClientConfig = &tls.Config{
|
|
RootCAs: roots,
|
|
}
|
|
HTTP.Transport.(*TransformedTransport).Orig.(*http.Transport).TLSClientConfig = &tls.Config{
|
|
RootCAs: roots,
|
|
}
|
|
|
|
go ensureAppHasBooted(fmt.Sprintf("https://127.0.0.1:%d/about", port), fmt.Sprintf("[https] listening on :%d", port))
|
|
if err := srv.ListenAndServeTLS("", ""); err != nil {
|
|
Log.Error("[https]: listen_serve %v", err)
|
|
return
|
|
}
|
|
})
|
|
}
|
|
|
|
func ensureAppHasBooted(address string, message string) {
|
|
i := 0
|
|
for {
|
|
if i > 10 {
|
|
Log.Warning("[http] didn't boot")
|
|
break
|
|
}
|
|
time.Sleep(250 * time.Millisecond)
|
|
res, err := HTTPClient.Get(address)
|
|
if err != nil {
|
|
i += 1
|
|
continue
|
|
}
|
|
res.Body.Close()
|
|
if res.StatusCode != http.StatusOK {
|
|
i += 1
|
|
continue
|
|
}
|
|
Log.Info(message)
|
|
break
|
|
}
|
|
}
|