1
0
Fork 0
This repository has been archived on 2025-05-26. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Checkpoint-Golang/checkpoint_service/main.go
2025-05-26 12:42:36 -05:00

66 lines
1.6 KiB
Go

package main
import (
"context"
"flag"
"log"
"os"
"os/signal"
"syscall"
"time"
"checkpoint_service/middleware"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/compress"
"github.com/gofiber/fiber/v2/middleware/logger"
)
func main() {
// Parse command-line flags
port := flag.String("port", "8080", "Port to listen on")
skipCheckpoint := flag.Bool("skip-checkpoint", false, "Skip the checkpoint middleware")
flag.Parse()
// Create Fiber app
app := fiber.New()
// Request logging
app.Use(logger.New())
// Response compression
app.Use(compress.New())
// Load and apply middleware plugins
for _, handler := range middleware.LoadPlugins(*skipCheckpoint) {
app.Use(handler)
}
log.Println("Loaded middleware plugins")
// API group for proof-of-work endpoints
api := app.Group("/api")
api.Get("/pow/challenge", middleware.GetCheckpointChallengeHandler)
api.Post("/pow/verify", middleware.VerifyCheckpointHandler)
api.Get("/verify", middleware.VerifyCheckpointHandler)
// Start the server in a goroutine
go func() {
addr := ":" + *port
log.Printf("Checkpoint service starting on %s", addr)
if err := app.Listen(addr); err != nil {
log.Fatalf("Server error: %v", err)
}
}()
// Graceful shutdown on SIGINT/SIGTERM
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := app.ShutdownWithContext(ctx); err != nil {
log.Fatalf("Server forced to shutdown: %v", err)
}
log.Println("Server exiting")
}