summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/server/main.go93
1 files changed, 32 insertions, 61 deletions
diff --git a/cmd/server/main.go b/cmd/server/main.go
index 532a059..870bd7c 100644
--- a/cmd/server/main.go
+++ b/cmd/server/main.go
@@ -1,80 +1,51 @@
package main
import (
- "context"
- "fmt"
"log"
- "net"
+ "net/http"
+ "os"
+ mux "github.com/gorilla/mux"
"github.com/ketsuna-org/sovrabase/internal/config"
- pb "github.com/ketsuna-org/sovrabase/pkg/proto"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials/insecure"
+ "github.com/ketsuna-org/sovrabase/internal/middleware"
)
-type server struct {
- pb.UnimplementedForwardCommandServiceServer
- nodeClients map[string]pb.ForwardCommandServiceClient
-}
-
-func (s *server) ForwardCommand(ctx context.Context, req *pb.ForwardCommandRequest) (*pb.ForwardCommandResponse, error) {
- log.Printf("Received command: %s for node: %s", req.Command, req.TargetNode)
-
- // Si c'est pour ce node, traiter localement
- if req.TargetNode == "" || req.TargetNode == "self" {
- return &pb.ForwardCommandResponse{
- Success: true,
- Result: fmt.Sprintf("Command '%s' executed locally", req.Command),
- }, nil
+func main() {
+ // Get config path from environment variable or use default
+ configPath := os.Getenv("CONFIG_PATH")
+ if configPath == "" {
+ configPath = "config.yaml"
}
- // Sinon, forwarder au node cible
- if client, exists := s.nodeClients[req.TargetNode]; exists {
- resp, err := client.ForwardCommand(ctx, req)
- if err != nil {
- return &pb.ForwardCommandResponse{
- Success: false,
- ErrorMessage: fmt.Sprintf("Failed to forward to %s: %v", req.TargetNode, err),
- }, nil
- }
- return resp, nil
+ cfg, err := config.LoadConfig(configPath)
+ if err != nil {
+ log.Fatalf("failed to load config from %s: %v", configPath, err)
}
- // Node inconnu
- return &pb.ForwardCommandResponse{
- Success: false,
- ErrorMessage: fmt.Sprintf("Unknown target node: %s", req.TargetNode),
- }, nil
-}
+ // Setup HTTP Server
-func main() {
- cfg, err := config.LoadConfig("config.toml")
- if err != nil {
- log.Fatalf("failed to load config: %v", err)
+ router := mux.NewRouter()
+ log.Printf("Starting API server on %s", cfg.API.APIAddr)
+ if cfg.API.Domain != "" {
+ log.Printf(" - Configured domain: %s", cfg.API.Domain)
}
-
- // Initialiser les connexions aux autres nodes
- nodeClients := make(map[string]pb.ForwardCommandServiceClient)
- for _, addr := range cfg.Cluster.RPCServers {
- if addr != cfg.RPC.RPCAddr { // Ne pas se connecter à soi-même
- conn, err := grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
- if err != nil {
- log.Printf("Failed to connect to node %s: %v", addr, err)
- continue
- }
- nodeClients[addr] = pb.NewForwardCommandServiceClient(conn)
- log.Printf("Connected to node: %s", addr)
- }
+ if len(cfg.API.CORSAllow) > 0 {
+ log.Printf(" - CORS allowed origins: %v", cfg.API.CORSAllow)
}
- lis, err := net.Listen("tcp", cfg.RPC.RPCAddr)
- if err != nil {
- log.Fatalf("failed to listen: %v", err)
+ // Appliquer le middleware CORS
+ corsConfig := &middleware.CORSConfig{
+ Domain: cfg.API.Domain,
+ AllowedOrigins: cfg.API.CORSAllow,
}
- s := grpc.NewServer()
- pb.RegisterForwardCommandServiceServer(s, &server{nodeClients: nodeClients})
- log.Printf("server listening at %v", lis.Addr())
- if err := s.Serve(lis); err != nil {
- log.Fatalf("failed to serve: %v", err)
+ router.Use(middleware.CORSMiddleware(corsConfig))
+
+ router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ w.Write([]byte("Sovrabase API is running"))
+ })
+
+ if err := http.ListenAndServe(cfg.API.APIAddr, router); err != nil {
+ log.Fatalf("failed to start API server: %v", err)
}
}