Skip to content
This repository was archived by the owner on Mar 8, 2023. It is now read-only.

Commit 1540e6f

Browse files
authored
Merge pull request #12 from keylockerbv/delete-secret
Support for deleting secrets
2 parents 00a0401 + 21c8c00 commit 1540e6f

1 file changed

Lines changed: 32 additions & 30 deletions

File tree

pkg/restproxy/rest_proxy.go

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -66,27 +66,15 @@ func (p *restProxy) handleSecret(w http.ResponseWriter, r *http.Request) {
6666
path := r.URL.Path
6767
err := api.ValidateSecretPath(path)
6868
if err != nil {
69-
w.WriteHeader(http.StatusBadRequest)
70-
io.WriteString(w, err.Error())
69+
writeError(w, err, http.StatusBadRequest)
7170
return
7271
}
7372

7473
switch r.Method {
7574
case "GET":
7675
secret, err := p.client.Secrets().Versions().GetWithData(path)
7776
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)
9078
return
9179
}
9280

@@ -95,38 +83,52 @@ func (p *restProxy) handleSecret(w http.ResponseWriter, r *http.Request) {
9583
case "POST":
9684
secret, err := ioutil.ReadAll(r.Body)
9785
if err != nil {
98-
w.WriteHeader(http.StatusInternalServerError)
99-
io.WriteString(w, err.Error())
86+
writeError(w, err, http.StatusInternalServerError)
10087
return
10188
}
10289

10390
_, err = p.client.Secrets().Write(path, secret)
10491
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
11193
switch err {
11294
case secrethub.ErrCannotWriteToVersion,
11395
secrethub.ErrEmptySecret,
11496
secrethub.ErrSecretTooBig:
115-
errCode = http.StatusBadRequest
97+
statusCode = http.StatusBadRequest
11698
}
11799

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)
124101
return
125102
}
126103

127104
w.WriteHeader(http.StatusCreated)
105+
case "DELETE":
106+
err := p.client.Secrets().Versions().Delete(path)
107+
if err != nil {
108+
writeError(w, err, 0)
109+
return
110+
}
111+
112+
w.WriteHeader(http.StatusOK)
128113
default:
129-
w.Header().Add("Allow", "GET, POST")
114+
w.Header().Add("Allow", "GET, POST, DELETE")
130115
w.WriteHeader(http.StatusMethodNotAllowed)
131116
}
132117
}
118+
119+
// writeError writes an error message and HTTP status code to the ResponseWriter.
120+
// The HTTP status code is derived 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

Comments
 (0)