File: example_cors_method_middleware_test.go

package info (click to toggle)
golang-github-gorilla-mux 1.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 364 kB
  • sloc: makefile: 29
file content (37 lines) | stat: -rw-r--r-- 1,179 bytes parent folder | download | duplicates (4)
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
package mux_test

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/gorilla/mux"
)

func ExampleCORSMethodMiddleware() {
	r := mux.NewRouter()

	r.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
		// Handle the request
	}).Methods(http.MethodGet, http.MethodPut, http.MethodPatch)
	r.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Access-Control-Allow-Origin", "http://example.com")
		w.Header().Set("Access-Control-Max-Age", "86400")
	}).Methods(http.MethodOptions)

	r.Use(mux.CORSMethodMiddleware(r))

	rw := httptest.NewRecorder()
	req, _ := http.NewRequest("OPTIONS", "/foo", nil)                 // needs to be OPTIONS
	req.Header.Set("Access-Control-Request-Method", "POST")           // needs to be non-empty
	req.Header.Set("Access-Control-Request-Headers", "Authorization") // needs to be non-empty
	req.Header.Set("Origin", "http://example.com")                    // needs to be non-empty

	r.ServeHTTP(rw, req)

	fmt.Println(rw.Header().Get("Access-Control-Allow-Methods"))
	fmt.Println(rw.Header().Get("Access-Control-Allow-Origin"))
	// Output:
	// GET,PUT,PATCH,OPTIONS
	// http://example.com
}