summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/staticresp.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-05-07 09:56:13 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-05-07 09:56:18 -0600
commite40bbecb16d196d2d700a9484e53c11b64dfe8d9 (patch)
treec4ab6cce5c98fdec6d9d5a3eaf666d5bea55a25f /modules/caddyhttp/staticresp.go
parent8eba582efe2ec8646447d8721a42c486363b3bc2 (diff)
Rough implementation of auto HTTP->HTTPS redirects
Also added GracePeriod for server shutdowns
Diffstat (limited to 'modules/caddyhttp/staticresp.go')
-rw-r--r--modules/caddyhttp/staticresp.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/modules/caddyhttp/staticresp.go b/modules/caddyhttp/staticresp.go
new file mode 100644
index 0000000..dca60cb
--- /dev/null
+++ b/modules/caddyhttp/staticresp.go
@@ -0,0 +1,57 @@
+package caddyhttp
+
+import (
+ "fmt"
+ "net/http"
+
+ "bitbucket.org/lightcodelabs/caddy2"
+)
+
+func init() {
+ caddy2.RegisterModule(caddy2.Module{
+ Name: "http.responders.static",
+ New: func() (interface{}, error) { return new(Static), nil },
+ })
+}
+
+// Static implements a simple responder for static responses.
+// It is Caddy's default responder. TODO: Or is it?
+type Static struct {
+ StatusCode int `json:"status_code"`
+ Headers http.Header `json:"headers"`
+ Body string `json:"body"`
+ Close bool `json:"close"`
+}
+
+func (s Static) ServeHTTP(w http.ResponseWriter, r *http.Request) error {
+ repl := r.Context().Value(ReplacerCtxKey).(*Replacer)
+
+ // close the connection
+ r.Close = s.Close
+
+ // set all headers, with replacements
+ for field, vals := range s.Headers {
+ field = repl.Replace(field, "")
+ for i := range vals {
+ vals[i] = repl.Replace(vals[i], "")
+ }
+ w.Header()[field] = vals
+ }
+
+ // write the headers with a status code
+ statusCode := s.StatusCode
+ if statusCode == 0 {
+ statusCode = http.StatusOK
+ }
+ w.WriteHeader(statusCode)
+
+ // write the response body, with replacements
+ if s.Body != "" {
+ fmt.Fprint(w, repl.Replace(s.Body, ""))
+ }
+
+ return nil
+}
+
+// Interface guard
+var _ Handler = (*Static)(nil)