...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/ea_integration/v2/mockbffserver/server.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/ea_integration/v2/mockbffserver

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io"
     7  	"net/http"
     8  	"os"
     9  	"time"
    10  
    11  	"github.com/go-logr/logr"
    12  
    13  	"edge-infra.dev/pkg/edge/api/middleware"
    14  	"edge-infra.dev/pkg/lib/fog"
    15  )
    16  
    17  var secret = os.Getenv("APP_SECRET")
    18  
    19  const (
    20  	validUsername string = "testValidUser1"
    21  	email         string = "testValidUser1@test.com"
    22  	organization  string = "testOrganization"
    23  	fakeToken     string = "abcd.efgh.ijkl"
    24  	authProvider  string = "bsl"
    25  )
    26  
    27  func main() {
    28  	logger := fog.New()
    29  	logger.Info("Starting server")
    30  
    31  	http.HandleFunc("/api/v2", graphQLHandler(logger))
    32  	server := &http.Server{
    33  		Addr:         "0.0.0.0:8080",
    34  		Handler:      nil,
    35  		ReadTimeout:  5 * time.Second,
    36  		WriteTimeout: 10 * time.Second,
    37  		IdleTimeout:  15 * time.Second,
    38  	}
    39  
    40  	if err := server.ListenAndServe(); err != nil {
    41  		logger.Error(err, "Server error")
    42  		os.Exit(1)
    43  	}
    44  }
    45  
    46  type incomingPayload struct {
    47  	Query     string
    48  	Variables map[string]string
    49  }
    50  
    51  type outgoingPayload struct {
    52  	Data gData `json:"data"`
    53  }
    54  
    55  type gData struct {
    56  	Login login `json:"login"`
    57  }
    58  
    59  type login struct {
    60  	Banners []banner `json:"banners"`
    61  	Token   string   `json:"token"`
    62  }
    63  
    64  type banner struct {
    65  	BannerEdgeID string `json:"bannerEdgeID"`
    66  }
    67  
    68  func graphQLHandler(log logr.Logger) func(w http.ResponseWriter, r *http.Request) {
    69  	return func(w http.ResponseWriter, r *http.Request) {
    70  		data, err := io.ReadAll(r.Body)
    71  		if err != nil {
    72  			log.Error(err, "error reading body")
    73  			w.WriteHeader(http.StatusInternalServerError)
    74  			return
    75  		}
    76  
    77  		var body incomingPayload
    78  		err = json.Unmarshal(data, &body)
    79  		if err != nil {
    80  			log.Error(err, "error unmarshaling json")
    81  			w.WriteHeader(http.StatusInternalServerError)
    82  			return
    83  		}
    84  
    85  		username, ok := body.Variables["username"]
    86  		if !ok {
    87  			log.Error(fmt.Errorf("no username"), "Missing username")
    88  			w.WriteHeader(http.StatusInternalServerError)
    89  			return
    90  		}
    91  		if username != validUsername {
    92  			log.Error(fmt.Errorf("unexpected username: %s", username), "Unexpected username")
    93  			w.WriteHeader(http.StatusInternalServerError)
    94  			return
    95  		}
    96  
    97  		token, err := middleware.CreateToken(
    98  			validUsername,
    99  			email,
   100  			organization,
   101  			secret,
   102  			// role has to have EDGE_ prefix in order to be saved to session
   103  			[]string{"EDGE_ADMIN"},
   104  			fakeToken,
   105  			authProvider,
   106  			"",
   107  		)
   108  		if err != nil {
   109  			log.Error(err, "Error creating token")
   110  			w.WriteHeader(http.StatusInternalServerError)
   111  			return
   112  		}
   113  
   114  		log.Info("Created new token", "secret", secret, "token", token)
   115  
   116  		resp := outgoingPayload{
   117  			Data: gData{
   118  				Login: login{
   119  					Banners: []banner{
   120  						{BannerEdgeID: "3cf00a00-d06b-40c7-859c-fbddfdeb1177"},
   121  					},
   122  					Token: token,
   123  				},
   124  			},
   125  		}
   126  
   127  		out, err := json.Marshal(resp)
   128  		if err != nil {
   129  			log.Error(err, "Error marshalling response data")
   130  			w.WriteHeader(http.StatusInternalServerError)
   131  			return
   132  		}
   133  
   134  		w.WriteHeader(http.StatusOK)
   135  		w.Header().Set("content-type", "application/json")
   136  		_, err = w.Write(out)
   137  		if err != nil {
   138  			log.Error(err, "error writing response")
   139  			return
   140  		}
   141  	}
   142  }
   143  

View as plain text