package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
)
func corsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("Executing middleware", r.Method)
if r.Method == "OPTIONS" {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers:", "Origin, Content-Type, X-Auth-Token, Authorization")
w.Header().Set("Content-Type", "application/json")
return
}
next.ServeHTTP(w, r)
log.Println("Executing middleware again")
})
}
func adminLogin(w http.ResponseWriter, r *http.Request) {
log.Println("Executing adminLogin")
w.Write([]byte("adminLogin"))
}
func allClinics(w http.ResponseWriter, r *http.Request) {
log.Println("Executing allClinics")
w.Write([]byte("allClinics"))
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/adminlogin", adminLogin).Methods("POST")
r.HandleFunc("/clinics", allClinics).Methods("GET")
log.Fatal(http.ListenAndServe(":3000", corsMiddleware(r)))
}
// curl localhost:3000/clinics -v
// curl -X POST localhost:3000/adminlogin -v
w.Header().Set("Access-Control-Allow-Origin", "https://foo.my-domain.com")
w.Header().Set("Access-Control-Allow-Origin", "https://bar.my-domain.com")
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:8080)
I solved with the following:
package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
)
func corsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("Executing middleware", r.Method)
if r.Method == "OPTIONS" {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS")
CORRECTED > w.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, Authorization")