Contains the Concourse pipeline definition for building a line-server container
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
983 B

  1. package main
  2. import (
  3. "net/http"
  4. "net/url"
  5. "strings"
  6. )
  7. type addheaders struct {
  8. h http.Handler
  9. headers []string
  10. }
  11. func (a addheaders) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  12. for _, header := range a.headers {
  13. headerSplit := strings.SplitN(header, ": ", 2)
  14. w.Header().Add(headerSplit[0], headerSplit[1])
  15. }
  16. a.h.ServeHTTP(w, r)
  17. }
  18. func AddHeaders(headers []string) func(http.Handler) http.Handler {
  19. fn := func(h http.Handler) http.Handler {
  20. return addheaders{h, headers}
  21. }
  22. return fn
  23. }
  24. func getSiteURL(r *http.Request) string {
  25. if Config.siteURL != "" {
  26. return Config.siteURL
  27. } else {
  28. u := &url.URL{}
  29. u.Host = r.Host
  30. if Config.sitePath != "" {
  31. u.Path = Config.sitePath
  32. }
  33. if scheme := r.Header.Get("X-Forwarded-Proto"); scheme != "" {
  34. u.Scheme = scheme
  35. } else if Config.certFile != "" || (r.TLS != nil && r.TLS.HandshakeComplete == true) {
  36. u.Scheme = "https"
  37. } else {
  38. u.Scheme = "http"
  39. }
  40. return u.String()
  41. }
  42. }