From bcf104670ac4e28faf1924bd9e7c7ceee802eaec Mon Sep 17 00:00:00 2001 From: frankw Date: Mon, 6 Jun 2016 10:34:09 +0200 Subject: [PATCH] Pass along headers to actual (golang) http request NB Need to properly iterate/enumerate over headers passed in from Javascript (hardcoded right now) --- fetch/fetch.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/fetch/fetch.go b/fetch/fetch.go index 8ae71a9..eccfe0d 100644 --- a/fetch/fetch.go +++ b/fetch/fetch.go @@ -104,6 +104,23 @@ func DefineWithHandler(vm *otto.Otto, l *loop.Loop, h http.Handler) error { body = strings.NewReader(jsBody.String()) } + // Make map for headers to pass in + reqHeaders := make(map[string]string) + + reqHdrObj := mustValue(jsReq.Get("headers")).Object() + // TODO: Get list of headers from jsReq object (idea: add 'list' method to headers.js?) + // Alternatively: iterate such as in: for (var k in r.headers._headers) { console.log(k + ':', r.headers.get(k)); } + for _, key := range []string{"Authorization" , "X-Amz-Date", "Content-MD5", "Content-Type", "X-Amz-User-Agent", "X-Amz-Content-Sha256"} { + + var v otto.Value + var err error + if v, err = reqHdrObj.Call("get", key); err == nil { + if !v.IsNull() && v.String() != "undefined" { + reqHeaders[key] = v.String() + } + } + } + t := &fetchTask{ jsReq: jsReq, jsRes: jsRes, @@ -116,6 +133,10 @@ func DefineWithHandler(vm *otto.Otto, l *loop.Loop, h http.Handler) error { defer l.Ready(t) req, err := http.NewRequest(method, urlStr, body) + for k, v := range reqHeaders { + req.Header.Set(k, v) // Set headers + } + if err != nil { t.err = err return