Smail/server/http_server/setup_server.go
木木的木头 f4689d073c v2.2.0
2023-09-08 02:11:00 +08:00

70 lines
1.4 KiB
Go

package http_server
import (
"fmt"
"io/fs"
"net"
"net/http"
"pmail/config"
"pmail/controllers"
"time"
)
var ip string
// 项目初始化引导用的服务,初始化引导结束后即退出
var setupServer *http.Server
func SetupStart() {
mux := http.NewServeMux()
fe, err := fs.Sub(local, "dist")
if err != nil {
panic(err)
}
mux.Handle("/", http.FileServer(http.FS(fe)))
mux.HandleFunc("/api/", contextIterceptor(controllers.Setup))
// 挑战请求类似这样 /.well-known/acme-challenge/QPyMAyaWw9s5JvV1oruyqWHG7OqkHMJEHPoUz2046KM
mux.HandleFunc("/.well-known/", controllers.AcmeChallenge)
HttpPort := 80
if config.Instance != nil && config.Instance.HttpPort > 0 {
HttpPort = config.Instance.HttpPort
}
setupServer = &http.Server{
Addr: fmt.Sprintf(":%d", HttpPort),
Handler: mux,
ReadTimeout: time.Second * 60,
WriteTimeout: time.Second * 60,
}
err = setupServer.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
panic(err)
}
}
func SetupStop() {
err := setupServer.Close()
if err != nil {
panic(err)
}
}
func getLocalIP() string {
ip := "127.0.0.1"
addrs, err := net.InterfaceAddrs()
if err != nil {
return ip
}
for _, a := range addrs {
if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
ip = ipnet.IP.String()
break
}
}
}
return ip
}