|
- package main
-
- import (
- "net/http"
- "strings"
- )
-
- const apiV1Prefix = "/api1/"
-
- func apiV1Main(w http.ResponseWriter, r *http.Request) {
-
- }
-
- func setupCrossOriginResponse(w *http.ResponseWriter, r *http.Request) {
- origin := r.Header.Get("Origin")
- if origin == "" {
- origin = "*"
- }
- requestedHeaders := r.Header.Get("Access-control-Request-Headers")
- method := r.Header.Get("Access-Control-Request-Method")
- (*w).Header().Set("Access-Control-Allow-Origin", origin) //for that specific origin
- (*w).Header().Set("Access-Control-Allow-Credentials", "true")
- (*w).Header().Set("Access-Control-Allow-Methods", removeDupHeaderOptions("POST, GET, OPTIONS, PUT, DELETE, "+method))
- (*w).Header().Set("Access-Control-Allow-Headers", removeDupHeaderOptions("Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, Cookie, Biukop-Session, Biukop-Socket , "+requestedHeaders))
- }
-
- func removeDupHeaderOptions(inStr string) (out string) {
- headers := map[string]struct{}{}
- strings.ReplaceAll(inStr, " ", "") // remove space
- headerArray := strings.Split(inStr, ",") // split
- for _, v := range headerArray {
- headers[v] = struct{}{} // same key will overwrite each other
- }
- out = ""
- for k, _ := range headers {
- if out != "" {
- out += ", "
- }
- out += k
- }
- return
- }
|