File tree Expand file tree Collapse file tree 2 files changed +35
-8
lines changed Expand file tree Collapse file tree 2 files changed +35
-8
lines changed Original file line number Diff line number Diff line change @@ -3,8 +3,13 @@ package acme
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "log"
7
+ "net/http"
8
+ "os"
6
9
7
10
"github.com/pkg/errors"
11
+ "github.com/smallstep/certificates/errs"
12
+ "github.com/smallstep/certificates/logging"
8
13
)
9
14
10
15
// ProblemType is the type of the ACME problem.
@@ -347,3 +352,27 @@ func (e *Error) ToLog() (interface{}, error) {
347
352
}
348
353
return string (b ), nil
349
354
}
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
+ }
Original file line number Diff line number Diff line change @@ -14,12 +14,14 @@ import (
14
14
15
15
// WriteError writes to w a JSON representation of the given error.
16
16
func WriteError (w http.ResponseWriter , err error ) {
17
- switch err .(type ) {
17
+ switch k := err .(type ) {
18
18
case * acme.Error :
19
- w .Header ().Set ("Content-Type" , "application/problem+json" )
19
+ acme .WriteError (w , k )
20
+ return
20
21
default :
21
22
w .Header ().Set ("Content-Type" , "application/json" )
22
23
}
24
+
23
25
cause := errors .Cause (err )
24
26
if sc , ok := err .(errs.StatusCoder ); ok {
25
27
w .WriteHeader (sc .StatusCode ())
@@ -33,15 +35,11 @@ func WriteError(w http.ResponseWriter, err error) {
33
35
34
36
// Write errors in the response writer
35
37
if rl , ok := w .(logging.ResponseLogger ); ok {
36
- logErr := err
37
- if u , ok := err .(* acme.Error ); ok {
38
- logErr = u .Err
39
- }
40
38
rl .WithFields (map [string ]interface {}{
41
- "error" : logErr ,
39
+ "error" : err ,
42
40
})
43
41
if os .Getenv ("STEPDEBUG" ) == "1" {
44
- if e , ok := logErr .(errs.StackTracer ); ok {
42
+ if e , ok := err .(errs.StackTracer ); ok {
45
43
rl .WithFields (map [string ]interface {}{
46
44
"stack-trace" : fmt .Sprintf ("%+v" , e ),
47
45
})
You can’t perform that action at this time.
0 commit comments