PMail/server/http_server/setup_server.go
Jinnrry 054336fe9e
v2.6.1 (#169)
1、新增垃圾邮件过滤插件
2、使用使用github.com/dlclark/regexp2替换go原生的正则包
3、修复空数据导致的邮件插入失败
2024-07-20 10:39:17 +08:00

76 lines
1.7 KiB
Go

package http_server
import (
"flag"
"fmt"
"github.com/Jinnrry/pmail/config"
"github.com/Jinnrry/pmail/controllers"
"github.com/Jinnrry/pmail/utils/ip"
log "github.com/sirupsen/logrus"
"github.com/spf13/cast"
"io/fs"
"net/http"
"os"
"strings"
"time"
)
// 项目初始化引导用的服务,初始化引导结束后即退出
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
flag.IntVar(&HttpPort, "p", 80, "初始化阶段Http服务端口")
flag.Parse()
if HttpPort == 80 {
envs := os.Environ()
for _, env := range envs {
if strings.HasPrefix(env, "setup_port=") {
HttpPort = cast.ToInt(strings.TrimSpace(strings.ReplaceAll(env, "setup_port=", "")))
}
}
}
if HttpPort <= 0 || HttpPort > 65535 {
HttpPort = 80
}
config.Instance.SetSetupPort(HttpPort)
log.Infof("HttpServer Start On Port :%d", HttpPort)
if HttpPort == 80 {
log.Infof("Please click http://%s to continue.\n", ip.GetIp())
} else {
log.Infof("Please click http://%s:%d to continue.", ip.GetIp(), 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()
log.Infof("Setup End!")
if err != nil {
panic(err)
}
}