From ce5ad37ac826ce05beefc753f05a859cb98beca0 Mon Sep 17 00:00:00 2001 From: Lee Brown Date: Mon, 12 Aug 2019 21:28:16 -0800 Subject: [PATCH] Updates from aurora.cam --- README.md | 4 ++++ cmd/web-api/Dockerfile | 2 ++ cmd/web-app/Dockerfile | 2 ++ cmd/web-app/main.go | 11 ++++++++++- internal/platform/web/request.go | 6 ++++++ internal/platform/web/response.go | 4 ++++ .../web/template-renderer/template_renderer.go | 5 +++++ 7 files changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0059834..484939c 100644 --- a/README.md +++ b/README.md @@ -305,6 +305,10 @@ flist=`grep -r "saas-starter-kit" * | awk -F ':' '{print $1}' | sort | uniq` for f in $flist; do echo $f; sed -i "" -e "s#saas-starter-kit#aurora-cam#g" $f; done +flist=`grep -r "example-project" * | awk -F ':' '{print $1}' | sort | uniq` +for f in $flist; do echo $f; sed -i "" -e "s#example-project#aurora-cam#g" $f; done + + ``` 3. Create a new AWS Policy with the following details: diff --git a/cmd/web-api/Dockerfile b/cmd/web-api/Dockerfile index 09a1a09..51968c2 100644 --- a/cmd/web-api/Dockerfile +++ b/cmd/web-api/Dockerfile @@ -49,6 +49,8 @@ COPY cmd/${service}/templates /templates ADD resources/templates/shared /templates/shared ADD fresh-auto-reload.conf /runner.conf +ENV TEMPLATE_DIR=/templates + WORKDIR ./cmd/${service} ENTRYPOINT ["fresh", "-c", "/runner.conf"] diff --git a/cmd/web-app/Dockerfile b/cmd/web-app/Dockerfile index 696f41b..11ddfbf 100644 --- a/cmd/web-app/Dockerfile +++ b/cmd/web-app/Dockerfile @@ -32,6 +32,8 @@ COPY cmd/${service}/static /static ADD resources/templates/shared /templates/shared ADD fresh-auto-reload.conf /runner.conf +ENV TEMPLATE_DIR=/templates + WORKDIR ./cmd/${service} ENTRYPOINT ["fresh", "-c", "/runner.conf"] diff --git a/cmd/web-app/main.go b/cmd/web-app/main.go index 4fa82a1..26d52d0 100644 --- a/cmd/web-app/main.go +++ b/cmd/web-app/main.go @@ -818,7 +818,12 @@ func main() { tmplFuncs["S3ImgUrl"] = func(ctx context.Context, p string, size int) string { imgUrl := imgUrlFormatter(p) if cfg.Service.StaticFiles.ImgResizeEnabled { - imgUrl, _ = img_resize.S3ImgUrl(ctx, redisClient, staticS3UrlFormatter, awsSession, cfg.Aws.S3BucketPublic, imgResizeS3KeyPrefix, imgUrl, size) + var rerr error + imgUrl, rerr = img_resize.S3ImgUrl(ctx, redisClient, staticS3UrlFormatter, awsSession, cfg.Aws.S3BucketPublic, imgResizeS3KeyPrefix, imgUrl, size) + if rerr != nil { + imgUrl = "error" + log.Printf("main : S3ImgUrl : %s - %s\n", p, rerr) + } } return imgUrl } @@ -843,6 +848,10 @@ func main() { } } + if web.RequestIsImage(r) { + return err + } + switch statusCode { case http.StatusUnauthorized: http.Redirect(w, r, "/user/login?redirect="+url.QueryEscape(r.RequestURI), http.StatusFound) diff --git a/internal/platform/web/request.go b/internal/platform/web/request.go index 56ca572..1126072 100644 --- a/internal/platform/web/request.go +++ b/internal/platform/web/request.go @@ -16,6 +16,7 @@ import ( // Headers const ( + HeaderAccept = "Accept" HeaderUpgrade = "Upgrade" HeaderXForwardedFor = "X-Forwarded-For" HeaderXForwardedProto = "X-Forwarded-Proto" @@ -127,6 +128,11 @@ func RequestIsWebSocket(r *http.Request) bool { return strings.ToLower(upgrade) == "websocket" } +func RequestIsImage(r *http.Request) bool { + accept := r.Header.Get(HeaderAccept) + return strings.HasPrefix(accept, "image/") +} + func RequestScheme(r *http.Request) string { // Can't use `r.Request.URL.Scheme` // See: https://groups.google.com/forum/#!topic/golang-nuts/pMUkBlQBDF0 diff --git a/internal/platform/web/response.go b/internal/platform/web/response.go index 37dc558..29f5969 100644 --- a/internal/platform/web/response.go +++ b/internal/platform/web/response.go @@ -191,6 +191,10 @@ func RenderError(ctx context.Context, w http.ResponseWriter, r *http.Request, er } v.StatusCode = webErr.Status + if RequestIsImage(r) { + return nil + } + resp := webErr.Response(ctx, true) data := map[string]interface{}{ diff --git a/internal/platform/web/template-renderer/template_renderer.go b/internal/platform/web/template-renderer/template_renderer.go index a2b0bf5..5327307 100644 --- a/internal/platform/web/template-renderer/template_renderer.go +++ b/internal/platform/web/template-renderer/template_renderer.go @@ -279,6 +279,11 @@ func NewTemplateRenderer(templateDir string, enableHotReload bool, globalViewDat // statusCode: the error method calls this function so allow the HTTP Status Code to be set // data: map[string]interface{} to allow including additional request and globally defined values. func (r *TemplateRenderer) Render(ctx context.Context, w http.ResponseWriter, req *http.Request, templateLayoutName, templateContentName, contentType string, statusCode int, data map[string]interface{}) error { + // Not really anyway to render an image response using a template. + if web.RequestIsImage(req) { + return nil + } + // If the template has not been rendered yet or hot reload is enabled, // then parse the template files. t, ok := r.templates[templateContentName]