Skip to content

Commit

Permalink
fix: send proper json error responses
Browse files Browse the repository at this point in the history
fixes #80
  • Loading branch information
mr-karan committed Jul 1, 2024
1 parent 89224c7 commit 86d9e37
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
35 changes: 28 additions & 7 deletions cmd/doggo/cli.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"encoding/json"
"fmt"
"os"
"time"
Expand Down Expand Up @@ -149,25 +150,45 @@ func main() {

// Resolve Queries.
var (
responses []resolvers.Response
responseErrors []error
responses []resolvers.Response
responseErrors []error
)
for _, q := range app.Questions {
for _, rslv := range app.Resolvers {
resp, err := rslv.Lookup(q)
if err != nil {
app.Logger.WithError(err).Error("error looking up DNS records")
responseErrors = append(responseErrors, err)
}
responses = append(responses, resp)
}
}

if len(responses) == 0 && len(responseErrors) > 0 {
app.Logger.Exit(9)
}
// Output results
if app.QueryFlags.ShowJSON {
jsonOutput := struct {
Responses []resolvers.Response `json:"responses,omitempty"`
Error string `json:"error,omitempty"`
}{
Responses: responses,
}

if len(responseErrors) > 0 {
jsonOutput.Error = responseErrors[0].Error()
}

app.Output(responses)
jsonData, err := json.MarshalIndent(jsonOutput, "", " ")
if err != nil {
app.Logger.WithError(err).Error("Error marshaling JSON")
app.Logger.Exit(1)
}
fmt.Println(string(jsonData))
} else {
if len(responseErrors) > 0 {
app.Logger.WithError(responseErrors[0]).Error("Error looking up DNS records")
app.Logger.Exit(9)
}
app.Output(responses)
}

// Quitting.
app.Logger.Exit(0)
Expand Down
10 changes: 8 additions & 2 deletions internal/app/output.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,19 @@ import (
)

func (app *App) outputJSON(rsp []resolvers.Response) {
jsonOutput := struct {
Responses []resolvers.Response `json:"responses"`
}{
Responses: rsp,
}

// Pretty print with 4 spaces.
res, err := json.MarshalIndent(rsp, "", " ")
res, err := json.MarshalIndent(jsonOutput, "", " ")
if err != nil {
app.Logger.WithError(err).Error("unable to output data in JSON")
app.Logger.Exit(-1)
}
fmt.Printf("%s", res)
fmt.Printf("%s\n", res)
}

func (app *App) outputShort(rsp []resolvers.Response) {
Expand Down

0 comments on commit 86d9e37

Please sign in to comment.