@@ -315,21 +315,21 @@ func NewRoutes(upstream *url.URL, label string, extractLabeler ExtractLabeler, o
315
315
mux := newStrictMux (newInstrumentedMux (http .NewServeMux (), opt .registerer ))
316
316
317
317
errs := merrors .New (
318
- mux .Handle ("/federate" , r .el .ExtractLabel (enforceMethods (r .matcher , "GET" ))),
319
- mux .Handle ("/api/v1/query" , r .el .ExtractLabel (enforceMethods (r .query , "GET" , "POST" ))),
320
- mux .Handle ("/api/v1/query_range" , r .el .ExtractLabel (enforceMethods (r .query , "GET" , "POST" ))),
321
- mux .Handle ("/api/v1/alerts" , r .el .ExtractLabel (enforceMethods (r .passthrough , "GET" ))),
322
- mux .Handle ("/api/v1/rules" , r .el .ExtractLabel (enforceMethods (r .passthrough , "GET" ))),
323
- mux .Handle ("/api/v1/series" , r .el .ExtractLabel (enforceMethods (r .matcher , "GET" , "POST" ))),
324
- mux .Handle ("/api/v1/query_exemplars" , r .el .ExtractLabel (enforceMethods (r .query , "GET" , "POST" ))),
318
+ mux .Handle ("/federate" , r .el .ExtractLabel (r . enforceMethods (r .matcher , "GET" ))),
319
+ mux .Handle ("/api/v1/query" , r .el .ExtractLabel (r . enforceMethods (r .query , "GET" , "POST" ))),
320
+ mux .Handle ("/api/v1/query_range" , r .el .ExtractLabel (r . enforceMethods (r .query , "GET" , "POST" ))),
321
+ mux .Handle ("/api/v1/alerts" , r .el .ExtractLabel (r . enforceMethods (r .passthrough , "GET" ))),
322
+ mux .Handle ("/api/v1/rules" , r .el .ExtractLabel (r . enforceMethods (r .passthrough , "GET" ))),
323
+ mux .Handle ("/api/v1/series" , r .el .ExtractLabel (r . enforceMethods (r .matcher , "GET" , "POST" ))),
324
+ mux .Handle ("/api/v1/query_exemplars" , r .el .ExtractLabel (r . enforceMethods (r .query , "GET" , "POST" ))),
325
325
)
326
326
327
327
if opt .enableLabelAPIs {
328
328
errs .Add (
329
- mux .Handle ("/api/v1/labels" , r .el .ExtractLabel (enforceMethods (r .matcher , "GET" , "POST" ))),
329
+ mux .Handle ("/api/v1/labels" , r .el .ExtractLabel (r . enforceMethods (r .matcher , "GET" , "POST" ))),
330
330
// Full path is /api/v1/label/<label_name>/values but http mux does not support patterns.
331
331
// This is fine though as we don't care about name for matcher injector.
332
- mux .Handle ("/api/v1/label/" , r .el .ExtractLabel (enforceMethods (r .matcher , "GET" ))),
332
+ mux .Handle ("/api/v1/label/" , r .el .ExtractLabel (r . enforceMethods (r .matcher , "GET" ))),
333
333
)
334
334
}
335
335
@@ -338,22 +338,22 @@ func NewRoutes(upstream *url.URL, label string, extractLabeler ExtractLabeler, o
338
338
// semantics of the Silences API don't support multi-label matchers.
339
339
mux .Handle ("/api/v2/silences" , r .el .ExtractLabel (
340
340
r .errorIfRegexpMatch (
341
- enforceMethods (
341
+ r . enforceMethods (
342
342
assertSingleLabelValue (r .silences ),
343
343
"GET" , "POST" ,
344
344
),
345
345
),
346
346
)),
347
347
mux .Handle ("/api/v2/silence/" , r .el .ExtractLabel (
348
348
r .errorIfRegexpMatch (
349
- enforceMethods (
349
+ r . enforceMethods (
350
350
assertSingleLabelValue (r .deleteSilence ),
351
351
"DELETE" ,
352
352
),
353
353
),
354
354
)),
355
- mux .Handle ("/api/v2/alerts/groups" , r .el .ExtractLabel (enforceMethods (r .enforceFilterParameter , "GET" ))),
356
- mux .Handle ("/api/v2/alerts" , r .el .ExtractLabel (enforceMethods (r .alerts , "GET" ))),
355
+ mux .Handle ("/api/v2/alerts/groups" , r .el .ExtractLabel (r . enforceMethods (r .enforceFilterParameter , "GET" ))),
356
+ mux .Handle ("/api/v2/alerts" , r .el .ExtractLabel (r . enforceMethods (r .alerts , "GET" ))),
357
357
)
358
358
359
359
errs .Add (
@@ -422,8 +422,12 @@ func (r *routes) errorHandler(rw http.ResponseWriter, _ *http.Request, err error
422
422
rw .WriteHeader (http .StatusBadGateway )
423
423
}
424
424
425
- func enforceMethods (h http.HandlerFunc , methods ... string ) http.HandlerFunc {
425
+ func ( r * routes ) enforceMethods (h http.HandlerFunc , methods ... string ) http.HandlerFunc {
426
426
return func (w http.ResponseWriter , req * http.Request ) {
427
+ if req .Method == http .MethodOptions {
428
+ r .passthrough (w , req )
429
+ return
430
+ }
427
431
for _ , m := range methods {
428
432
if m == req .Method {
429
433
h (w , req )
0 commit comments