Skip to content

Commit 2e0e62b

Browse files
committed
add WriteError method for acme api
1 parent 9aef84b commit 2e0e62b

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

acme/errors.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ package acme
33
import (
44
"encoding/json"
55
"fmt"
6+
"log"
7+
"net/http"
8+
"os"
69

710
"github.com/pkg/errors"
11+
"github.com/smallstep/certificates/errs"
12+
"github.com/smallstep/certificates/logging"
813
)
914

1015
// ProblemType is the type of the ACME problem.
@@ -347,3 +352,27 @@ func (e *Error) ToLog() (interface{}, error) {
347352
}
348353
return string(b), nil
349354
}
355+
356+
// WriteError writes to w a JSON representation of the given error.
357+
func WriteError(w http.ResponseWriter, err *Error) {
358+
w.Header().Set("Content-Type", "application/problem+json")
359+
w.WriteHeader(err.StatusCode())
360+
361+
// Write errors in the response writer
362+
if rl, ok := w.(logging.ResponseLogger); ok {
363+
rl.WithFields(map[string]interface{}{
364+
"error": err.Err,
365+
})
366+
if os.Getenv("STEPDEBUG") == "1" {
367+
if e, ok := err.Err.(errs.StackTracer); ok {
368+
rl.WithFields(map[string]interface{}{
369+
"stack-trace": fmt.Sprintf("%+v", e),
370+
})
371+
}
372+
}
373+
}
374+
375+
if err := json.NewEncoder(w).Encode(err); err != nil {
376+
log.Println(err)
377+
}
378+
}

api/errors.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ import (
1414

1515
// WriteError writes to w a JSON representation of the given error.
1616
func WriteError(w http.ResponseWriter, err error) {
17-
switch err.(type) {
17+
switch k := err.(type) {
1818
case *acme.Error:
19-
w.Header().Set("Content-Type", "application/problem+json")
19+
acme.WriteError(w, k)
20+
return
2021
default:
2122
w.Header().Set("Content-Type", "application/json")
2223
}
24+
2325
cause := errors.Cause(err)
2426
if sc, ok := err.(errs.StatusCoder); ok {
2527
w.WriteHeader(sc.StatusCode())
@@ -33,15 +35,11 @@ func WriteError(w http.ResponseWriter, err error) {
3335

3436
// Write errors in the response writer
3537
if rl, ok := w.(logging.ResponseLogger); ok {
36-
logErr := err
37-
if u, ok := err.(*acme.Error); ok {
38-
logErr = u.Err
39-
}
4038
rl.WithFields(map[string]interface{}{
41-
"error": logErr,
39+
"error": err,
4240
})
4341
if os.Getenv("STEPDEBUG") == "1" {
44-
if e, ok := logErr.(errs.StackTracer); ok {
42+
if e, ok := err.(errs.StackTracer); ok {
4543
rl.WithFields(map[string]interface{}{
4644
"stack-trace": fmt.Sprintf("%+v", e),
4745
})

0 commit comments

Comments
 (0)