mirror of
https://github.com/thomiceli/opengist.git
synced 2025-07-08 09:01:20 +02:00
110 lines
2.6 KiB
Go
110 lines
2.6 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/thomiceli/opengist/internal/validator"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/thomiceli/opengist/internal/config"
|
|
"github.com/thomiceli/opengist/internal/i18n"
|
|
)
|
|
|
|
type Server struct {
|
|
echo *echo.Echo
|
|
|
|
dev bool
|
|
sessionsPath string
|
|
ignoreCsrf bool
|
|
}
|
|
|
|
func NewServer(isDev bool, sessionsPath string, ignoreCsrf bool) *Server {
|
|
e := echo.New()
|
|
e.HideBanner = true
|
|
e.HidePort = true
|
|
e.Validator = validator.NewValidator()
|
|
|
|
s := &Server{echo: e, dev: isDev, sessionsPath: sessionsPath, ignoreCsrf: ignoreCsrf}
|
|
|
|
s.useCustomContext()
|
|
|
|
if err := i18n.Locales.LoadAll(); err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to load locales")
|
|
}
|
|
|
|
s.registerMiddlewares()
|
|
s.setFuncMap()
|
|
s.echo.HTTPErrorHandler = s.errorHandler
|
|
|
|
if !s.dev {
|
|
s.parseManifestEntries()
|
|
}
|
|
|
|
s.registerRoutes()
|
|
|
|
return s
|
|
}
|
|
|
|
func (s *Server) Start() {
|
|
addr := config.C.HttpHost + ":" + config.C.HttpPort
|
|
|
|
log.Info().Msg("Starting HTTP server on http://" + addr)
|
|
if err := s.echo.Start(addr); err != nil && err != http.ErrServerClosed {
|
|
log.Fatal().Err(err).Msg("Failed to start HTTP server")
|
|
}
|
|
}
|
|
|
|
func (s *Server) StartUnixSocket() {
|
|
socketPath := "/tmp/opengist.sock"
|
|
if err := os.Remove(socketPath); err != nil && !os.IsNotExist(err) {
|
|
log.Warn().Err(err).Str("socket", socketPath).Msg("Failed to remove existing socket file")
|
|
}
|
|
|
|
listener, err := net.Listen("unix", socketPath)
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to start Unix socket server")
|
|
}
|
|
s.echo.Listener = listener
|
|
|
|
log.Info().Msgf("Starting Unix socket server on " + socketPath)
|
|
server := new(http.Server)
|
|
if err := s.echo.StartServer(server); err != nil && err != http.ErrServerClosed {
|
|
log.Fatal().Err(err).Msg("Failed to start Unix socket server")
|
|
}
|
|
}
|
|
|
|
func (s *Server) Stop() {
|
|
if err := s.echo.Close(); err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to stop HTTP server")
|
|
}
|
|
}
|
|
|
|
func (s *Server) StopUnixSocket() {
|
|
log.Info().Msg("Stopping Unix socket server...")
|
|
|
|
var socketPath string
|
|
if s.echo.Listener != nil {
|
|
if unixListener, ok := s.echo.Listener.(*net.UnixListener); ok {
|
|
socketPath = unixListener.Addr().String()
|
|
}
|
|
}
|
|
|
|
if err := s.echo.Close(); err != nil {
|
|
log.Error().Err(err).Msg("Failed to stop Unix socket server")
|
|
}
|
|
|
|
if socketPath != "" {
|
|
if err := os.Remove(socketPath); err != nil && !os.IsNotExist(err) {
|
|
log.Error().Err(err).Str("socket", socketPath).Msg("Failed to remove socket file")
|
|
} else {
|
|
log.Info().Str("socket", socketPath).Msg("Socket file removed")
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
s.echo.ServeHTTP(w, r)
|
|
}
|