From f157fdf0e5281397488ab1ea429581b2014c6078 Mon Sep 17 00:00:00 2001 From: Connor van Spronssen Date: Sun, 22 Dec 2024 13:40:22 +0100 Subject: [PATCH 1/5] feat(api): Add an API endpoint to get all global fields --- cmd/api/get-global-fields.go | 15 +++++++++++ cmd/server/handle-routes.go | 1 + cmd/server/routes/v1/get-global-fields.go | 31 +++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 cmd/api/get-global-fields.go create mode 100644 cmd/server/routes/v1/get-global-fields.go diff --git a/cmd/api/get-global-fields.go b/cmd/api/get-global-fields.go new file mode 100644 index 0000000..6cf1dae --- /dev/null +++ b/cmd/api/get-global-fields.go @@ -0,0 +1,15 @@ +package api + +import ( + "github.com/Dobefu/csb/cmd/cs_sdk" +) + +func GetGlobalFields() (map[string]interface{}, error) { + data, err := cs_sdk.Request("global_fields", "GET", nil) + + if err != nil { + return nil, err + } + + return data, nil +} diff --git a/cmd/server/handle-routes.go b/cmd/server/handle-routes.go index 530922f..6b2e594 100644 --- a/cmd/server/handle-routes.go +++ b/cmd/server/handle-routes.go @@ -18,6 +18,7 @@ func HandleRoutes(mux *http.ServeMux, apiPath string) { apiRoute(mux, apiPath, "/get-entry-by-uid", "GET", v1.GetEntryByUid) apiRoute(mux, apiPath, "/content-types", "GET", v1.GetContentTypes) apiRoute(mux, apiPath, "/content-type", "GET", v1.GetContentType) + apiRoute(mux, apiPath, "/global-fields", "GET", v1.GetGlobalFields) } func apiRoute( diff --git a/cmd/server/routes/v1/get-global-fields.go b/cmd/server/routes/v1/get-global-fields.go new file mode 100644 index 0000000..1139556 --- /dev/null +++ b/cmd/server/routes/v1/get-global-fields.go @@ -0,0 +1,31 @@ +package v1 + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/Dobefu/csb/cmd/api" + "github.com/Dobefu/csb/cmd/server/utils" +) + +func GetGlobalFields(w http.ResponseWriter, r *http.Request) { + globalFields, err := api.GetGlobalFields() + + if err != nil { + utils.PrintError(w, err, false) + return + } + + output := utils.ConstructOutput() + output["data"] = globalFields + + json, err := json.Marshal(output) + + if err != nil { + utils.PrintError(w, err, true) + return + } + + fmt.Fprint(w, string(json)) +} From b03e59ed5dd1209f342e0d402bab41ff2744e692 Mon Sep 17 00:00:00 2001 From: Connor van Spronssen Date: Sun, 22 Dec 2024 13:41:54 +0100 Subject: [PATCH 2/5] test: Add new tests to the GetGlobalFields function --- cmd/api/get-global-fields_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 cmd/api/get-global-fields_test.go diff --git a/cmd/api/get-global-fields_test.go b/cmd/api/get-global-fields_test.go new file mode 100644 index 0000000..3f76b9a --- /dev/null +++ b/cmd/api/get-global-fields_test.go @@ -0,0 +1,28 @@ +package api + +import ( + "os" + "testing" + + "github.com/Dobefu/csb/cmd/init_env" + "github.com/stretchr/testify/assert" +) + +func TestGetGlobalFields(t *testing.T) { + var err error + + init_env.Main("../../.env.test") + + oldApiKey := os.Getenv("CS_API_KEY") + os.Setenv("CS_API_KEY", "bogus") + + _, err = GetGlobalFields() + assert.NotEqual(t, nil, err) + + os.Setenv("CS_API_KEY", oldApiKey) + + globalFields, err := GetGlobalFields() + assert.Equal(t, nil, err) + + assert.NotEqual(t, nil, globalFields) +} From 490614c0b50e261440ede0352f340cf733028d00 Mon Sep 17 00:00:00 2001 From: Connor van Spronssen Date: Sun, 22 Dec 2024 13:49:02 +0100 Subject: [PATCH 3/5] test: Add new tests to the HandleRoutes functions --- cmd/server/handle-routes_test.go | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/cmd/server/handle-routes_test.go b/cmd/server/handle-routes_test.go index afb60b9..24bfe7c 100644 --- a/cmd/server/handle-routes_test.go +++ b/cmd/server/handle-routes_test.go @@ -139,6 +139,8 @@ func TestHandleRoutes(t *testing.T) { assert.NotEqual(t, nil, body["data"]) assert.Equal(t, nil, body["error"]) + os.Setenv("DEBUG_AUTH_BYPASS", "") + body, err = request( "GET", fmt.Sprintf("%s/%s", server.URL, "/content-type"), @@ -165,6 +167,37 @@ func TestHandleRoutes(t *testing.T) { assert.Equal(t, nil, err) assert.Equal(t, nil, body["data"]) assert.NotEqual(t, nil, body["error"]) + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/global-fields"), + true, + ) + assert.Equal(t, nil, err) + assert.NotEqual(t, nil, body["data"]) + assert.Equal(t, nil, body["error"]) + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/global-fields"), + false, + ) + assert.Equal(t, nil, err) + assert.Equal(t, nil, body["data"]) + assert.NotEqual(t, nil, body["error"]) + + os.Setenv("DEBUG_AUTH_BYPASS", "1") + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/global-fields"), + false, + ) + assert.Equal(t, nil, err) + assert.NotEqual(t, nil, body["data"]) + assert.Equal(t, nil, body["error"]) + + os.Setenv("DEBUG_AUTH_BYPASS", "") } func request(method string, path string, withAuthToken bool) (body map[string]interface{}, err error) { From 0a10e574eb8e9a56c2dc2a9282ed0f7192d6b5cb Mon Sep 17 00:00:00 2001 From: Connor van Spronssen Date: Sun, 22 Dec 2024 13:56:10 +0100 Subject: [PATCH 4/5] test: Add new tests to the HandleRoutes functions --- cmd/server/handle-routes_test.go | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/cmd/server/handle-routes_test.go b/cmd/server/handle-routes_test.go index 24bfe7c..7dd1bd6 100644 --- a/cmd/server/handle-routes_test.go +++ b/cmd/server/handle-routes_test.go @@ -83,6 +83,20 @@ func TestHandleRoutes(t *testing.T) { assert.Equal(t, nil, body["data"]) assert.NotEqual(t, nil, body["error"]) + oldApiKey := os.Getenv("CS_API_KEY") + os.Setenv("CS_API_KEY", "bogus") + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/get-entry-by-url?url=/&locale=en"), + true, + ) + assert.Equal(t, nil, err) + assert.Equal(t, nil, body["data"]) + assert.NotEqual(t, nil, body["error"]) + + os.Setenv("CS_API_KEY", oldApiKey) + body, err = request( "GET", fmt.Sprintf("%s/%s", server.URL, "/get-entry-by-uid"), @@ -101,6 +115,20 @@ func TestHandleRoutes(t *testing.T) { assert.NotEqual(t, nil, body["data"]) assert.Equal(t, nil, body["error"]) + oldApiKey = os.Getenv("CS_API_KEY") + os.Setenv("CS_API_KEY", "bogus") + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/get-entry-by-uid?uid=blt0617c28651fb44bf&locale=en"), + true, + ) + assert.Equal(t, nil, err) + assert.Equal(t, nil, body["data"]) + assert.NotEqual(t, nil, body["error"]) + + os.Setenv("CS_API_KEY", oldApiKey) + body, err = request( "GET", fmt.Sprintf("%s/%s", server.URL, "/get-entry-by-uid?uid=/bogus&locale=en"), @@ -141,6 +169,20 @@ func TestHandleRoutes(t *testing.T) { os.Setenv("DEBUG_AUTH_BYPASS", "") + oldApiKey = os.Getenv("CS_API_KEY") + os.Setenv("CS_API_KEY", "bogus") + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/content-types"), + true, + ) + assert.Equal(t, nil, err) + assert.Equal(t, nil, body["data"]) + assert.NotEqual(t, nil, body["error"]) + + os.Setenv("CS_API_KEY", oldApiKey) + body, err = request( "GET", fmt.Sprintf("%s/%s", server.URL, "/content-type"), @@ -198,6 +240,20 @@ func TestHandleRoutes(t *testing.T) { assert.Equal(t, nil, body["error"]) os.Setenv("DEBUG_AUTH_BYPASS", "") + + oldApiKey = os.Getenv("CS_API_KEY") + os.Setenv("CS_API_KEY", "bogus") + + body, err = request( + "GET", + fmt.Sprintf("%s/%s", server.URL, "/global-fields"), + true, + ) + assert.Equal(t, nil, err) + assert.Equal(t, nil, body["data"]) + assert.NotEqual(t, nil, body["error"]) + + os.Setenv("CS_API_KEY", oldApiKey) } func request(method string, path string, withAuthToken bool) (body map[string]interface{}, err error) { From 4b6e1d8a3bac5c9e9afaaf32923b88b1000e0865 Mon Sep 17 00:00:00 2001 From: Connor van Spronssen Date: Sun, 22 Dec 2024 14:28:29 +0100 Subject: [PATCH 5/5] test: Add some tests to the RequireDeliveryToken function --- cmd/server/handle-routes_test.go | 4 +- .../middleware/require-delivery-token_test.go | 100 ++++++++++++++++++ 2 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 cmd/server/middleware/require-delivery-token_test.go diff --git a/cmd/server/handle-routes_test.go b/cmd/server/handle-routes_test.go index 7dd1bd6..e0d064d 100644 --- a/cmd/server/handle-routes_test.go +++ b/cmd/server/handle-routes_test.go @@ -17,10 +17,10 @@ import ( ) func TestHandleRoutes(t *testing.T) { - init_env.Main("../../.env.test") - var err error + init_env.Main("../../.env.test") + err = database.Connect() assert.Equal(t, nil, err) diff --git a/cmd/server/middleware/require-delivery-token_test.go b/cmd/server/middleware/require-delivery-token_test.go new file mode 100644 index 0000000..020cd0b --- /dev/null +++ b/cmd/server/middleware/require-delivery-token_test.go @@ -0,0 +1,100 @@ +package middleware + +import ( + "fmt" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/Dobefu/csb/cmd/init_env" + "github.com/stretchr/testify/assert" +) + +func TestRequireDeliveryToken(t *testing.T) { + var err error + + init_env.Main("../../../.env.test") + + mux := http.NewServeMux() + RequireDeliveryToken(mux) + + server := httptest.NewServer(mux) + assert.NotEqual(t, nil, server) + defer server.Close() + + mux.Handle( + "/", + RequireDeliveryToken(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, "") + })), + ) + + err = request( + fmt.Sprintf("%s/%s", server.URL, "/"), + false, + ) + assert.Equal(t, nil, err) + + err = request( + fmt.Sprintf("%s/%s", server.URL, "/"), + true, + ) + assert.Equal(t, nil, err) + + os.Setenv("DEBUG_AUTH_BYPASS", "1") + + err = request( + fmt.Sprintf("%s/%s", server.URL, "/"), + false, + ) + assert.Equal(t, nil, err) + + os.Setenv("DEBUG_AUTH_BYPASS", "") + + oldAuthToken := os.Getenv("CS_DELIVERY_TOKEN") + os.Setenv("CS_DELIVERY_TOKEN", "bogus") + + err = request( + fmt.Sprintf("%s/%s", server.URL, "/"), + false, + ) + assert.Equal(t, nil, err) + + os.Setenv("CS_DELIVERY_TOKEN", "") + + err = request( + fmt.Sprintf("%s/%s", server.URL, "/"), + false, + ) + assert.Equal(t, nil, err) + + os.Setenv("CS_DELIVERY_TOKEN", oldAuthToken) +} + +func request(path string, withAuthToken bool) (err error) { + req, err := http.NewRequest( + "GET", + path, + nil, + ) + + if err != nil { + return err + } + + if withAuthToken { + req.Header = http.Header{ + "Authorization": {os.Getenv("CS_DELIVERY_TOKEN")}, + } + } + + client := http.Client{} + _, err = client.Do(req) + + if err != nil { + return err + } + + return nil +}