blob: 69ec45b90aeb3d98799b88988661af30ecaa630e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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.
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(caddy2.ReplacerCtxKey).(caddy2.Replacer)
// close the connection after responding
r.Close = s.Close
// set all headers, with replacements
for field, vals := range s.Headers {
field = repl.ReplaceAll(field, "")
for i := range vals {
vals[i] = repl.ReplaceAll(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.ReplaceAll(s.Body, ""))
}
return nil
}
// Interface guard
var _ Handler = (*Static)(nil)
|