mirror of
				https://github.com/Theodor-Springmann-Stiftung/lenz-web.git
				synced 2025-10-30 17:55:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package server
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/Theodor-Springmann-Stiftung/lenz-web/templating"
 | |
| 	"github.com/gofiber/fiber/v2"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/cache"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/logger"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/recover"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// INFO: This timeout is stupid.
 | |
| 	// Uploads can take a long time, other routes might not. It's messy.
 | |
| 	REQUEST_TIMEOUT = 120 * time.Second
 | |
| 	SERVER_TIMEOUT  = 120 * time.Second
 | |
| 
 | |
| 	// INFO: Maybe this is too long/short?
 | |
| 	CACHE_TIME = 24 * time.Hour
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	STATIC_FILEPATH = "./views/assets"
 | |
| 	ROUTES_FILEPATH = "./views/routes"
 | |
| 	LAYOUT_FILEPATH = "./views/layouts"
 | |
| )
 | |
| 
 | |
| type Server struct {
 | |
| 	Engine *templating.Engine
 | |
| 	Server *fiber.App
 | |
| 	Cache  fiber.Storage
 | |
| }
 | |
| 
 | |
| func New(engine *templating.Engine, storage fiber.Storage, debug bool) Server {
 | |
| 	server := fiber.New(fiber.Config{
 | |
| 		AppName:           "Lenz",
 | |
| 		CaseSensitive:     false,
 | |
| 		ErrorHandler:      fiber.DefaultErrorHandler,
 | |
| 		WriteTimeout:      REQUEST_TIMEOUT,
 | |
| 		ReadTimeout:       REQUEST_TIMEOUT,
 | |
| 		Views:             engine,
 | |
| 		EnablePrintRoutes: debug,
 | |
| 		ViewsLayout:       templating.DEFAULT_LAYOUT_NAME,
 | |
| 		UnescapePath:      true,
 | |
| 		// BUG: does not work rn:
 | |
| 		PassLocalsToViews: true,
 | |
| 	})
 | |
| 
 | |
| 	if debug {
 | |
| 		server.Use(cache.New(cache.Config{
 | |
| 			Next:         CacheFunc,
 | |
| 			Expiration:   CACHE_TIME,
 | |
| 			CacheControl: false,
 | |
| 			Storage:      storage,
 | |
| 			KeyGenerator: KeyGenerator,
 | |
| 		}))
 | |
| 		server.Use(logger.New())
 | |
| 	}
 | |
| 
 | |
| 	if !debug {
 | |
| 		server.Use(cache.New(cache.Config{
 | |
| 			Next:         CacheFunc,
 | |
| 			Expiration:   CACHE_TIME,
 | |
| 			CacheControl: false,
 | |
| 			Storage:      storage,
 | |
| 			KeyGenerator: KeyGenerator,
 | |
| 		}))
 | |
| 		server.Use(recover.New())
 | |
| 	}
 | |
| 
 | |
| 	return Server{
 | |
| 		Engine: engine,
 | |
| 		Server: server,
 | |
| 		Cache:  storage,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (s *Server) Start(addr string) error {
 | |
| 	s.Cache.Reset()
 | |
| 	return s.Server.Listen(addr)
 | |
| }
 | |
| 
 | |
| func (s *Server) Stop() error {
 | |
| 	s.Cache.Close()
 | |
| 	return s.Server.Shutdown()
 | |
| }
 | 
