@@ -66,27 +66,15 @@ func (p *restProxy) handleSecret(w http.ResponseWriter, r *http.Request) {
66
66
path := r .URL .Path
67
67
err := api .ValidateSecretPath (path )
68
68
if err != nil {
69
- w .WriteHeader (http .StatusBadRequest )
70
- io .WriteString (w , err .Error ())
69
+ writeError (w , err , http .StatusBadRequest )
71
70
return
72
71
}
73
72
74
73
switch r .Method {
75
74
case "GET" :
76
75
secret , err := p .client .Secrets ().Versions ().GetWithData (path )
77
76
if err != nil {
78
- var errCode int
79
-
80
- if err , ok := err .(errio.PublicStatusError ); ok {
81
- errCode = err .StatusCode
82
- }
83
-
84
- if errCode == 0 {
85
- errCode = http .StatusInternalServerError
86
- }
87
-
88
- w .WriteHeader (errCode )
89
- io .WriteString (w , err .Error ())
77
+ writeError (w , err , 0 )
90
78
return
91
79
}
92
80
@@ -95,51 +83,29 @@ func (p *restProxy) handleSecret(w http.ResponseWriter, r *http.Request) {
95
83
case "POST" :
96
84
secret , err := ioutil .ReadAll (r .Body )
97
85
if err != nil {
98
- w .WriteHeader (http .StatusInternalServerError )
99
- io .WriteString (w , err .Error ())
86
+ writeError (w , err , http .StatusInternalServerError )
100
87
return
101
88
}
102
89
103
90
_ , err = p .client .Secrets ().Write (path , secret )
104
91
if err != nil {
105
- var errCode int
106
-
107
- if err , ok := err .(errio.PublicStatusError ); ok {
108
- errCode = err .StatusCode
109
- }
110
-
92
+ statusCode := 0
111
93
switch err {
112
94
case secrethub .ErrCannotWriteToVersion ,
113
95
secrethub .ErrEmptySecret ,
114
96
secrethub .ErrSecretTooBig :
115
- errCode = http .StatusBadRequest
97
+ statusCode = http .StatusBadRequest
116
98
}
117
99
118
- if errCode == 0 {
119
- errCode = http .StatusInternalServerError
120
- }
121
-
122
- w .WriteHeader (errCode )
123
- io .WriteString (w , err .Error ())
100
+ writeError (w , err , statusCode )
124
101
return
125
102
}
126
103
127
104
w .WriteHeader (http .StatusCreated )
128
105
case "DELETE" :
129
106
err := p .client .Secrets ().Delete (path )
130
107
if err != nil {
131
- var errCode int
132
-
133
- if err , ok := err .(errio.PublicStatusError ); ok {
134
- errCode = err .StatusCode
135
- }
136
-
137
- if errCode == 0 {
138
- errCode = http .StatusInternalServerError
139
- }
140
-
141
- w .WriteHeader (errCode )
142
- io .WriteString (w , err .Error ())
108
+ writeError (w , err , 0 )
143
109
return
144
110
}
145
111
@@ -149,3 +115,20 @@ func (p *restProxy) handleSecret(w http.ResponseWriter, r *http.Request) {
149
115
w .WriteHeader (http .StatusMethodNotAllowed )
150
116
}
151
117
}
118
+
119
+ // writeError writes an error message and HTTP status code to the ResponseWriter.
120
+ // The HTTP status code is derrived from the error, unless overriden by the statusCode argument.
121
+ func writeError (w http.ResponseWriter , err error , statusCode int ) {
122
+ if statusCode == 0 {
123
+ if err , ok := err .(errio.PublicStatusError ); ok {
124
+ statusCode = err .StatusCode
125
+ }
126
+
127
+ if statusCode == 0 {
128
+ statusCode = http .StatusInternalServerError
129
+ }
130
+ }
131
+
132
+ w .WriteHeader (statusCode )
133
+ io .WriteString (w , err .Error ())
134
+ }
0 commit comments