@@ -71,41 +71,35 @@ func (ca CA) ServeHTTP(w http.ResponseWriter, r *http.Request) {
71
71
startTime := time .Now ()
72
72
73
73
nb := r .URL .Query ().Get ("not-before" )
74
- if nb == "" {
75
- nb = "now"
76
- }
77
74
na := r .URL .Query ().Get ("not-after" )
78
- if na == "" {
79
- na = "+1h"
80
- }
81
75
82
76
notBefore , notAfter , err := ParseValidity (nb , na )
83
77
if err != nil {
84
- http . Error (w , err .Error (), http .StatusBadRequest )
78
+ writeHTTPError (w , err .Error (), http .StatusBadRequest )
85
79
return
86
80
}
87
81
88
82
contentType , _ , err := webapp .GetContentType (r .Header , webapp .MimeTypeText )
89
83
if err != nil {
90
- e := fmt .Sprintf ("error parsing Content-Type header: %s" , err )
91
- http . Error (w , e , http .StatusBadRequest )
84
+ msg := fmt .Sprintf ("error parsing Content-Type header: %s" , err )
85
+ writeHTTPError (w , msg , http .StatusBadRequest )
92
86
return
93
87
}
94
88
95
89
if ct := contentType ; ct != webapp .MimeTypeText && ct != webapp .MimeTypeBytes {
96
90
msg := fmt .Sprintf ("unsupported Content-Type %s" , ct )
97
- http . Error (w , msg , http .StatusUnsupportedMediaType )
91
+ writeHTTPError (w , msg , http .StatusUnsupportedMediaType )
98
92
return
99
93
}
100
94
101
95
body , err := io .ReadAll (r .Body )
102
96
if err != nil {
103
- http . Error (w , err .Error (), http .StatusInternalServerError )
97
+ writeHTTPError (w , err .Error (), http .StatusInternalServerError )
104
98
return
105
99
}
106
100
csr , err := readCsr (contentType , body )
107
101
if err != nil {
108
- http . Error (w , err .Error (), http .StatusBadRequest )
102
+ writeHTTPError (w , err .Error (), http .StatusBadRequest )
109
103
return
110
104
}
111
105
@@ -120,7 +114,7 @@ func (ca CA) ServeHTTP(w http.ResponseWriter, r *http.Request) {
120
114
if errors .Is (err , bifrost .ErrNamespaceMismatch ) {
121
115
statusCode = http .StatusForbidden
122
116
}
123
- http . Error (w , err .Error (), statusCode )
117
+ writeHTTPError (w , err .Error (), statusCode )
124
118
return
125
119
}
126
120
@@ -160,22 +154,6 @@ func (ca CA) ServeHTTP(w http.ResponseWriter, r *http.Request) {
160
154
ca .requestsDuration .Update (time .Since (startTime ).Seconds ())
161
155
}
162
156
163
- func readCsr (contentType string , body []byte ) ([]byte , error ) {
164
- asn1Data := body
165
- switch contentType {
166
- case webapp .MimeTypeBytes :
167
- // DER encoded
168
- case "" , webapp .MimeTypeText :
169
- // PEM
170
- block , _ := pem .Decode (body )
171
- if block == nil {
172
- return nil , fmt .Errorf ("bifrost: error decoding certificate request PEM block" )
173
- }
174
- asn1Data = block .Bytes
175
- }
176
- return asn1Data , nil
177
- }
178
-
179
157
// IssueCertificate issues a client certificate for a certificate request.
180
158
// The certificate is issued with the Subject Common Name set to the
181
159
// UUID of the client public key and the Subject Organization
@@ -230,3 +208,24 @@ func (ca CA) IssueCertificate(asn1CSR []byte, template *x509.Certificate) ([]byt
230
208
ca .issuedTotal .Inc ()
231
209
return certBytes , nil
232
210
}
211
+
212
+ func readCsr (contentType string , body []byte ) ([]byte , error ) {
213
+ asn1Data := body
214
+ switch contentType {
215
+ case webapp .MimeTypeBytes :
216
+ // DER encoded
217
+ case "" , webapp .MimeTypeText :
218
+ // PEM
219
+ block , _ := pem .Decode (body )
220
+ if block == nil {
221
+ return nil , fmt .Errorf ("bifrost: error decoding certificate request PEM block" )
222
+ }
223
+ asn1Data = block .Bytes
224
+ }
225
+ return asn1Data , nil
226
+ }
227
+
228
+ func writeHTTPError (w http.ResponseWriter , msg string , statusCode int ) {
229
+ slog .Error (msg , "statusCode" , statusCode )
230
+ http .Error (w , msg , statusCode )
231
+ }
0 commit comments