69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package server
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/gofiber/fiber/v2"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/cors"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/idempotency"
 | |
| 	"github.com/gofiber/fiber/v2/middleware/logger"
 | |
| 	jsoniter "github.com/json-iterator/go"
 | |
| 	"github.com/rs/zerolog/log"
 | |
| 	"github.com/spf13/viper"
 | |
| )
 | |
| 
 | |
| var A *fiber.App
 | |
| 
 | |
| func NewServer() {
 | |
| 	A = fiber.New(fiber.Config{
 | |
| 		DisableStartupMessage: true,
 | |
| 		EnableIPValidation:    true,
 | |
| 		ServerHeader:          "Hydrogen.Paperclip",
 | |
| 		AppName:               "Hydrogen.Paperclip",
 | |
| 		ProxyHeader:           fiber.HeaderXForwardedFor,
 | |
| 		JSONEncoder:           jsoniter.ConfigCompatibleWithStandardLibrary.Marshal,
 | |
| 		JSONDecoder:           jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal,
 | |
| 		BodyLimit:             512 * 1024 * 1024 * 1024, // 512 TiB
 | |
| 		EnablePrintRoutes:     viper.GetBool("debug.print_routes"),
 | |
| 	})
 | |
| 
 | |
| 	A.Use(idempotency.New())
 | |
| 	A.Use(cors.New(cors.Config{
 | |
| 		AllowCredentials: true,
 | |
| 		AllowMethods: strings.Join([]string{
 | |
| 			fiber.MethodGet,
 | |
| 			fiber.MethodPost,
 | |
| 			fiber.MethodHead,
 | |
| 			fiber.MethodOptions,
 | |
| 			fiber.MethodPut,
 | |
| 			fiber.MethodDelete,
 | |
| 			fiber.MethodPatch,
 | |
| 		}, ","),
 | |
| 		AllowOriginsFunc: func(origin string) bool {
 | |
| 			return true
 | |
| 		},
 | |
| 	}))
 | |
| 
 | |
| 	A.Use(logger.New(logger.Config{
 | |
| 		Format: "${status} | ${latency} | ${method} ${path}\n",
 | |
| 		Output: log.Logger,
 | |
| 	}))
 | |
| 
 | |
| 	A.Get("/.well-known", getMetadata)
 | |
| 	A.Get("/.well-known/destinations", getDestinations)
 | |
| 
 | |
| 	api := A.Group("/api").Name("API")
 | |
| 	{
 | |
| 		api.Get("/attachments/:id/meta", getAttachmentMeta)
 | |
| 		api.Get("/attachments/:id", openAttachment)
 | |
| 		api.Post("/attachments", authMiddleware, createAttachment)
 | |
| 		api.Delete("/attachments/:id", authMiddleware, deleteAttachment)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func Listen() {
 | |
| 	if err := A.Listen(viper.GetString("bind")); err != nil {
 | |
| 		log.Fatal().Err(err).Msg("An error occurred when starting server...")
 | |
| 	}
 | |
| }
 |