Specify callback URL via http header

Signed-off-by: Alex <alexellis2@gmail.com>
This commit is contained in:
Alex
2017-08-19 16:22:03 +01:00
committed by Alex Ellis
parent fa069e412c
commit 3031531b3c
2 changed files with 23 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/url"
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/alexellis/faas/gateway/metrics" "github.com/alexellis/faas/gateway/metrics"
@ -20,23 +21,43 @@ func MakeQueuedProxy(metrics metrics.MetricOptions, wildcard bool, logger *logru
if err != nil { if err != nil {
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
return return
} }
w.WriteHeader(http.StatusAccepted)
vars := mux.Vars(r) vars := mux.Vars(r)
name := vars["name"] name := vars["name"]
callbackURLHeader := r.Header.Get("X-Callback-URL")
var callbackURL *url.URL
if len(callbackURLHeader) > 0 {
urlVal, urlErr := url.Parse(callbackURLHeader)
if urlErr != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(urlErr.Error()))
return
}
callbackURL = urlVal
}
req := &queue.Request{ req := &queue.Request{
Function: name, Function: name,
Body: body, Body: body,
Method: r.Method, Method: r.Method,
QueryString: r.URL.RawQuery, QueryString: r.URL.RawQuery,
Header: r.Header, Header: r.Header,
CallbackURL: callbackURL,
} }
err = canQueueRequests.Queue(req) err = canQueueRequests.Queue(req)
if err != nil { if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
fmt.Println(err) fmt.Println(err)
return
} }
w.WriteHeader(http.StatusAccepted)
} }
} }

View File

@ -8,7 +8,7 @@ type Request struct {
Header http.Header Header http.Header
Body []byte Body []byte
Method string Method string
CallbackURL url.URL CallbackURL *url.URL
QueryString string QueryString string
Function string Function string
} }