Add key-protected sample

This commit is contained in:
Alex Ellis
2017-03-31 20:05:04 +01:00
committed by Alex Ellis
parent 54d16013bb
commit 19699d5e79
6 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,2 @@
ApiKeyProtected

View File

@ -0,0 +1,16 @@
FROM alpine:latest
WORKDIR /root/
EXPOSE 8080
ENV http_proxy ""
ENV https_proxy ""
# ADD https://github.com/alexellis/faas/releases/download/v0.5-alpha/fwatchdog /usr/bin
COPY fwatchdog /usr/bin/
RUN chmod +x /usr/bin/fwatchdog
COPY app .
ENV fprocess="/root/app"
CMD ["fwatchdog"]

View File

@ -0,0 +1,9 @@
FROM golang:1.7.5
RUN mkdir -p /go/src/app
COPY handler.go /go/src/app
WORKDIR /go/src/app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
CMD ["echo"]

View File

@ -0,0 +1,6 @@
### Api-Key-Protected sample
To use this sample provide an env variable for the container/service in `secret_api_key`.
Then when calling via the gateway pass the additional header "X-Api-Key", if it matches the `secret_api_key` value then the function will give access, otherwise access denied.

View File

@ -0,0 +1,12 @@
#!/bin/sh
echo Building functions/api-key-protected:build
docker build --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy \
-t functions/api-key-protected . -f Dockerfile.build
docker create --name render_extract functions/api-key-protected
docker cp render_extract:/go/src/app/app ./app
docker rm -f render_extract
echo Building functions/api-key-protected:latest
docker build --no-cache -t functions/api-key-protected:latest .

View File

@ -0,0 +1,29 @@
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"github.com/alexellis/faas/watchdog/types"
)
func handle(header http.Header, body []byte) {
key := header.Get("X-Api-Key")
if key == os.Getenv("secret_api_key") {
fmt.Println("Unlocked the function!")
} else {
fmt.Println("Access denied!")
}
}
func main() {
bytes, _ := ioutil.ReadAll(os.Stdin)
req, err := types.UnmarshalRequest(bytes)
if err != nil {
log.Fatal(err)
}
handle(req.Header, req.Body.Raw)
}