...
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
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