Skip to content
Snippets Groups Projects
handler.go 2.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • OZGCloud's avatar
    OZGCloud committed
    //
    // Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
    // Ministerpräsidenten des Landes Schleswig-Holstein
    // Staatskanzlei
    // Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
    //
    // Lizenziert unter der EUPL, Version 1.2 oder - sobald
    // diese von der Europäischen Kommission genehmigt wurden -
    // Folgeversionen der EUPL ("Lizenz");
    // Sie dürfen dieses Werk ausschließlich gemäß
    // dieser Lizenz nutzen.
    // Eine Kopie der Lizenz finden Sie hier:
    //
    // https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
    //
    // Sofern nicht durch anwendbare Rechtsvorschriften
    // gefordert oder in schriftlicher Form vereinbart, wird
    // die unter der Lizenz verbreitete Software "so wie sie
    // ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
    // ausdrücklich oder stillschweigend - verbreitet.
    // Die sprachspezifischen Genehmigungen und Beschränkungen
    // unter der Lizenz sind dem Lizenztext zu entnehmen.
    //
    
    
    OZGCloud's avatar
    OZGCloud committed
    package server
    
    import (
    	"context"
    	"fmt"
    	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
    
    OZGCloud's avatar
    OZGCloud committed
    	"google.golang.org/grpc"
    
    OZGCloud's avatar
    OZGCloud committed
    	"google.golang.org/grpc/codes"
    
    OZGCloud's avatar
    OZGCloud committed
    	"google.golang.org/grpc/credentials/insecure"
    
    OZGCloud's avatar
    OZGCloud committed
    	"google.golang.org/grpc/status"
    
    OZGCloud's avatar
    OZGCloud committed
    	pb "info-manager-proxy/gen/go"
    
    	log "github.com/sirupsen/logrus"
    
    OZGCloud's avatar
    OZGCloud committed
    	"net/http"
    )
    
    func RegisterHomeEndpoint(mux *runtime.ServeMux) {
    	err := mux.HandlePath("GET", "/", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
    		defer func() {
    			if err := recover(); err != nil {
    
    OZGCloud's avatar
    OZGCloud committed
    				log.Error(fmt.Sprintf("failed to recover: %v", err))
    
    OZGCloud's avatar
    OZGCloud committed
    				http.Error(w, fmt.Sprintf("failed to recover: %v", err), http.StatusInternalServerError)
    			}
    		}()
    	})
    
    	if err != nil {
    
    OZGCloud's avatar
    OZGCloud committed
    		log.Fatal(fmt.Sprintf("failed to register home endpoint: %v", err))
    
    OZGCloud's avatar
    OZGCloud committed
    func RegisterInformationEndpoints(ctx context.Context, mux *runtime.ServeMux, grpcUrl string) {
    	opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
    	err := pb.RegisterInformationServiceHandlerFromEndpoint(ctx, mux, grpcUrl, opts)
    	if err != nil {
    
    		log.Fatal(fmt.Sprintf("failed to register information endpoints: %v", err))
    
    OZGCloud's avatar
    OZGCloud committed
    func ErrorHandler(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, r *http.Request, err error) {
    	st, ok := status.FromError(err)
    	if !ok {
    		runtime.DefaultHTTPErrorHandler(ctx, mux, marshaler, w, r, err)
    		return
    	}
    
    	statusCodeMap := map[codes.Code]int{
    		codes.InvalidArgument: http.StatusBadRequest,
    		codes.AlreadyExists:   http.StatusConflict,
    		codes.Unavailable:     http.StatusServiceUnavailable,
    	}
    
    	httpStatusCode := http.StatusInternalServerError
    
    	if code, exists := statusCodeMap[st.Code()]; exists {
    		httpStatusCode = code
    	}
    
    	w.Header().Set("Content-Type", marshaler.ContentType(r))
    	w.WriteHeader(httpStatusCode)
    
    	_, writeErr := w.Write([]byte(st.Message()))
    	if writeErr != nil {
    
    		log.Fatal(fmt.Sprintf("failed to handle grpc error: %v", writeErr))