File: middleware.go

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (39 lines) | stat: -rw-r--r-- 1,103 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Package rejectmethods provides middleware to reject HTTP requests with unknown methods
package rejectmethods

import (
	"net/http"

	"github.com/prometheus/client_golang/prometheus"
)

var acceptedMethods = map[string]bool{
	http.MethodGet:     true,
	http.MethodHead:    true,
	http.MethodPost:    true,
	http.MethodPut:     true,
	http.MethodPatch:   true,
	http.MethodDelete:  true,
	http.MethodConnect: true,
	http.MethodOptions: true,
	http.MethodTrace:   true,
}

var rejectedRequestsCount = prometheus.NewCounter(
	prometheus.CounterOpts{
		Name: "gitlab_workhorse_unknown_method_rejected_requests",
		Help: "The number of requests with unknown HTTP method which were rejected",
	},
)

// NewMiddleware returns middleware which rejects all unknown http methods
func NewMiddleware(handler http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if acceptedMethods[r.Method] {
			handler.ServeHTTP(w, r)
		} else {
			rejectedRequestsCount.Inc()
			http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
		}
	})
}