No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

43 líneas
1.3KB

  1. package main
  2. import (
  3. "net/http"
  4. "strings"
  5. )
  6. const apiV1Prefix = "/api1/"
  7. func apiV1Main(w http.ResponseWriter, r *http.Request) {
  8. }
  9. func setupCrossOriginResponse(w *http.ResponseWriter, r *http.Request) {
  10. origin := r.Header.Get("Origin")
  11. if origin == "" {
  12. origin = "*"
  13. }
  14. requestedHeaders := r.Header.Get("Access-control-Request-Headers")
  15. method := r.Header.Get("Access-Control-Request-Method")
  16. (*w).Header().Set("Access-Control-Allow-Origin", origin) //for that specific origin
  17. (*w).Header().Set("Access-Control-Allow-Credentials", "true")
  18. (*w).Header().Set("Access-Control-Allow-Methods", removeDupHeaderOptions("POST, GET, OPTIONS, PUT, DELETE, "+method))
  19. (*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))
  20. }
  21. func removeDupHeaderOptions(inStr string) (out string) {
  22. headers := map[string]struct{}{}
  23. strings.ReplaceAll(inStr, " ", "") // remove space
  24. headerArray := strings.Split(inStr, ",") // split
  25. for _, v := range headerArray {
  26. headers[v] = struct{}{} // same key will overwrite each other
  27. }
  28. out = ""
  29. for k, _ := range headers {
  30. if out != "" {
  31. out += ", "
  32. }
  33. out += k
  34. }
  35. return
  36. }