commands/http: Allow API requests from whitelisted origins
Matt Bell committed
Nov 18, 2014 at 22:16 UTC
aaab7d0898cb69097736f00eea2c270e62510401
1 file changed
+15
-4
commands/http/handler.go
+15
-4
@@ -12,8 +12,9 @@ import (
12
var log = u.Logger("commands/http")
13
14
type Handler struct {
15
- ctx cmds.Context
16
- root *cmds.Command
15
+ ctx cmds.Context
16
+ root *cmds.Command
17
+ origin string
18
}
19
20
var ErrNotFound = errors.New("404 page not found")
@@ -29,13 +30,23 @@ var mimeTypes = map[string]string{
30
cmds.Text: "text/plain",
31
}
32
32
-func NewHandler(ctx cmds.Context, root *cmds.Command) *Handler {
33
- return &Handler{ctx, root}
33
+func NewHandler(ctx cmds.Context, root *cmds.Command, origin string) *Handler {
34
+ // allow whitelisted origins (so we can make API requests from the browser)
35
+ if len(origin) > 0 {
36
+ log.Info("Allowing API requests from origin: " + origin)
37
+ }
38
+
39
+ return &Handler{ctx, root, origin}
40
}
41
42
func (i Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
43
log.Debug("Incoming API request: ", r.URL)
44
45
+ if len(i.origin) > 0 {
46
+ w.Header().Set("Access-Control-Allow-Origin", i.origin)
47
+ }
48
+ w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
49
+
50
req, err := Parse(r, i.root)
51
if err != nil {
52
if err == ErrNotFound {