Skip to content

Commit

Permalink
🧹 Allow to override the API endpoint (#12)
Browse files Browse the repository at this point in the history
* 🧹 Allow to override the API endpoint

Fixes #9

Signed-off-by: Christian Zunker <[email protected]>

* Add url parsing for both cases

Signed-off-by: Christian Zunker <[email protected]>

---------

Signed-off-by: Christian Zunker <[email protected]>
  • Loading branch information
czunker authored Dec 5, 2023
1 parent e27ff48 commit 85d860c
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 2 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,14 @@ make test
For any requests, bug or comments, please [open an issue][issues] or [submit a
pull request][pulls].

## Development

When developing new APIs locally, you can overwrite the API endpoint.
Specify `MONDOO_API_ENDPOINT` environment variable for the `generate` command, e.g.,:
```
MONDOO_API_ENDPOINT=http://127.0.0.1 make generate
```

## Kudos

This implementation is heavily inspired by the [GitHub GraphQL Go Client](https://github.com/shurcooL/githubv4).
Expand Down
30 changes: 28 additions & 2 deletions gen/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"io"
"log"
"net/http"
"net/url"
"os"
"path/filepath"
"sort"
Expand Down Expand Up @@ -74,7 +75,6 @@ func generateSchema(token string, basePath string) error {

// loadSchema loads the GraphQL schema from the Mondoo API.
func loadSchema(token string) (schema interface{}, err error) {
apiHost := "us.api.mondoo.com"
introspection := `
{
__schema {
Expand Down Expand Up @@ -176,10 +176,12 @@ fragment TypeRef on __Type {
}
}
`
apiEndpoint, apiHost := getAPIEndpoint()
fmt.Printf("using endpoint %s\n", apiEndpoint)
// do introspection query
req, err := http.NewRequest(
"POST",
"https://"+apiHost+"/query",
apiEndpoint,
strings.NewReader(`{"query":`+strconv.Quote(introspection)+`}`),
)
if err != nil {
Expand Down Expand Up @@ -338,3 +340,27 @@ func parseTemplate(text string) *template.Template {
},
}).Parse(text))
}

func getAPIEndpoint() (string, string) {
apiHost := "us.api.mondoo.com"
apiEndpoint, err := url.JoinPath("https://", apiHost, "/query")
if err != nil {
log.Fatalf("invalid MONDOO_API_ENDPOINT: %v", err)
}
endpoint, ok := os.LookupEnv("MONDOO_API_ENDPOINT")
if ok {
if !strings.HasPrefix(endpoint, "http://") && !strings.HasPrefix(endpoint, "https://") {
endpoint = "https://" + endpoint
}
apiEndpoint, err = url.JoinPath(endpoint, "/query")
if err != nil {
log.Fatalf("invalid MONDOO_API_ENDPOINT: %v", err)
}
}
parsedUrl, err := url.Parse(apiEndpoint)
if err != nil {
log.Fatalf("invalid API url: %v", err)
}

return apiEndpoint, parsedUrl.Host
}
23 changes: 23 additions & 0 deletions gen/gen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,26 @@ func TestRun(t *testing.T) {
err := generateSchema(token, "..")
require.NoError(t, err)
}
func TestGetAPIEndpoint(t *testing.T) {
// Test case 1: MONDOO_API_ENDPOINT not set
expectedEndpoint := "https://us.api.mondoo.com/query"
expectedHost := "us.api.mondoo.com"
actualEndpoint, actualHost := getAPIEndpoint()
require.Equal(t, expectedEndpoint, actualEndpoint, "Unexpected API endpoint")
require.Equal(t, expectedHost, actualHost, "Unexpected host")

// Test case 2: MONDOO_API_ENDPOINT set
os.Setenv("MONDOO_API_ENDPOINT", "custom.api.endpoint")
expectedEndpoint = "https://custom.api.endpoint/query"
expectedHost = "custom.api.endpoint"
actualEndpoint, actualHost = getAPIEndpoint()
require.Equal(t, expectedEndpoint, actualEndpoint, "Unexpected API endpoint")
require.Equal(t, expectedHost, actualHost, "Unexpected host")

os.Setenv("MONDOO_API_ENDPOINT", "http://custom.api.endpoint:1234")
expectedEndpoint = "http://custom.api.endpoint:1234/query"
expectedHost = "custom.api.endpoint:1234"
actualEndpoint, actualHost = getAPIEndpoint()
require.Equal(t, expectedEndpoint, actualEndpoint, "Unexpected API endpoint")
require.Equal(t, expectedHost, actualHost, "Unexpected host")
}

0 comments on commit 85d860c

Please sign in to comment.