From fa73d0a6f804f0a6ecb0bbab261c6a02faa622a8 Mon Sep 17 00:00:00 2001 From: Rodrigue Chakode Date: Sun, 17 May 2020 21:54:25 +0200 Subject: [PATCH] updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs updated docs --- README.md | 232 ++++++++++++------ app.yaml.sample | 2 + .../hugo-partial-contact-form.html | 0 ...m-submitted-and-processed-with-success.png | Bin 0 -> 42816 bytes 4 files changed, 164 insertions(+), 70 deletions(-) rename model/hugo-contact-form.html => samples/hugo-partial-contact-form.html (100%) create mode 100644 screenshots/form-submitted-and-processed-with-success.png diff --git a/README.md b/README.md index 2746108..0d2fd70 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,179 @@ -# Overview +![](https://img.shields.io/github/license/rchakode/hugo-mx-gateway.svg?label=License) +[![Actions Status](https://github.com/rchakode/hugo-mx-gateway/workflows/Build/badge.svg)](https://github.com/rchakode/hugo-mx-gateway/actions) +![](https://img.shields.io/docker/pulls/rchakode/hugo-mx-gateway.svg?label=Docker%20Pulls) +- [Overview](#overview) + - [How it Works](#how-it-works) + - [Screenshots](#screenshots) +- [Configuration variables](#configuration-variables) +- [Deployment options](#deployment-options) + - [Deployment on Google Appp Engine](#deployment-on-google-appp-engine) + - [Before you begin](#before-you-begin) + - [Configure and deploy the App](#configure-and-deploy-the-app) + - [Deployment on a Kubernetes cluster](#deployment-on-a-kubernetes-cluster) + - [Installation using Helm 3 (i.e. without tiller)](#installation-using-helm-3-ie-without-tiller) + - [Installation using Kubectl](#installation-using-kubectl) + - [Deployment on Docker](#deployment-on-docker) + - [Test the App](#test-the-app) +- [Samples of Hugo Contact Forms](#samples-of-hugo-contact-forms) +- [Developers' corner](#developers-corner) +- [License & Copyrights](#license--copyrights) +- [Support & Contributions](#support--contributions) + + +# Overview +Did you ever experience building a static website (e.g. using [Hugo](https://gohugo.io/)) or whatever alternative, and stuck when coming the time to add a contact or a demo request form? + +You're at the place. + +`hugo-mx-gateway` provides a HTTP POST endpoint that can be bound to your HTML template to handle user contact and demo requests in a simple yet powerful way. + +## How it Works +`hugo-mx-gateway` is built upon a simple request form handling workflow: + +* You create a HTML form with a POST action pointing towards the `hugo-mx-gateway` service. +* The `hugo-mx-gateway` service is a RESTful HTTP POST endpoint backed by an application easily deployable on [Google App Engine](https://cloud.google.com/appengine), on Kubernetes, or on Docker. Hereafter we also refer to it as **the App**. +* For each form request, the App retrieves information submitted by the user (email, subject, message details...), **automatically generates and sends a _templated email_ to the user**, while **bcc**ing a copy of that email to an address that you do define for tracking and follow up. +* Once a request is processed (upon success or failure), the App copes with the reply towards the origin web site (static page) by redirecting the browser to the request page with additionnal URL parameters describing the status of the processing (e.g. `/contact.html?status=success&message=request%20submitted`). With this, you can then add a few lines of Javascript to retrieve and display the reply message on the page. +* The App is shipped with a sample HTML form including some common fields for contact and demo requests, as well as a sample Javascript code to handle the processing response. That said, this is a open source software, so you're free to adapt it for your specific use cases. + +## Screenshots +This screenshot show an example of a form successfully submitted and handled by the backend, which replied with the message in green. + +![Screenshot of a successful submission](./screenshots/form-submitted-and-processed-with-success.png) + # Configuration variables +According to your deployment approach (Google App Engine, Kubernetes or Docker), you must provide the following configuration parameters as environment variables: -* Create the App Engine configuration file - ``` - cp app.yaml.sample app.yaml - ``` -* Edit the `app.yaml` file with your favorite editor and set the following environement variables appropriately: +* `SMTP_SERVER_ADDR`: set the IP or the hostname of the SMTP server. Currently, it's required that the SMTP server being supporting TLS. +* `SMTP_VERITY_CERT`: Tell if the `hugo-mx-gateway` App should validate the SMTP certificate against valid authorities. If you're using a self-signed certificate on the SMTP server, this value must be set to `false`. +* `SMTP_CLIENT_USERNAME`: Set the username to connect to the SMTP server. +* `SMTP_CLIENT_PASSWORD`: Set the password to connect to the SMTP server. +* `CONTACT_REPLY_EMAIL`: Set an email address for the reply email. It's not necessary a valid email address, for example if don't want the user to reply you can use something like `noreply@example.com`. +* `CONTACT_REPLY_BCC_EMAIL`: Set an email address for bcc copy of the email sent to the user. This is useful for tracking and follow up. +* `DEMO_URL`: Specific for demo forms, it can be used to set the URL of the demo site that will be included to the user reply email (e.g. `https://demo.example.com/`). +* `ALLOWED_ORIGINS`: Set a list of comma-separated domains that the `hugo-mx-gateway` App shoudl trust. This is for security reason to filter requests. Only requests with an `Origin` header belonging to the defined origins will be accepted, through it's only required that the request has a valid `Referer` header. It's expected in the future to these request filtering and admission rules. -``` - SMTP_SERVER_ADDR: "smtp.mailgun.org:587" - SMTP_VERITY_CERT: true - SMTP_CLIENT_USERNAME: "postmaster@example.com" - SMTP_CLIENT_PASSWORD: "postmasterSecretPassWord" - CONTACT_REPLY_EMAIL: "noreply@example.com" - CONTACT_REPLY_CC_EMAIL: "contact@example.com" - DEMO_URL: "https://demo.example.com/" - ALLOWED_ORIGIN_DOMAIN: "example.com" +# Deployment options + +## Deployment on Google Appp Engine + +### Before you begin +To deploy the `hugo-mx-gateway` App on Google App Engine, make sure that you have a active GCP account and: +* Install the [Google Cloud SDK](https://cloud.google.com/sdk) (gcloud) installed on your work station. +* Create/select a GCP project to deploy the App. Note that each GCP project can hold only a single App Engine instance. + +### Configure and deploy the App +* Create the Google App Engine configuration file + ``` + cp app.yaml.sample app.yaml + ``` +* Open the `app.yaml` file with your favorite editor. +* Set the configuration variables as described [here](#configuration-variables). +* Apply the deployment as follows: + ``` + make deploy-gcp + ``` + +On success the sendmail POST endpoint shall be reachable at the address: `https://..r.appspot.com/sendmail` + +Replace: +* `` with the GCP project ID. +* `` with the region of the App Engine instance. + + +## Deployment on a Kubernetes cluster + + +There is a [Helm chart](./helm/) to ease the deployment on Kubernetes using Helm or `kubectl`. + +The Helm based deployment has been validated with Helm 3, i.e. without `Tiller`. + +Either way, check the [values.yaml](./helm/values.yaml) file to set the [configuration options](#configuration-variables) according to your specific settings. + +> **Security Context:** +> `hugo-mx-gateway`'s pod is deployed with a unprivileged security context by default. However, if needed, it's possible to launch the pod in privileged mode by setting the Helm configuration value `securityContext.enabled` to `false`. + +In the next deployment commands, it's assumed that the target namespace `hugo-mx-gateway` do exist. If not create it first, or, alternatively, adapt the commands to use any other namespace of your choice. + +### Installation using Helm 3 (i.e. without tiller) + + +Helm 3 does not longer require to have [`tiller`](https://v2.helm.sh/docs/install/). + +As a consequence the below command shall work with a fresh installation of `hugo-mx-gateway` or a former version installed with Helm 3. There is a [known issue](https://github.com/helm/helm/issues/6850) when there is already a version **not** installed with Helm 3. + +```bash +helm upgrade \ + --namespace hugo-mx-gateway \ + --install hugo-mx-gateway \ + helm/hugo-mx-gateway/ ``` +### Installation using Kubectl + +This approach requires to have the Helm client (version 2 or 3) installed to generate a raw template for kubectl. -## Required HTTP Headers - -* `Origin` -* `Referer` - -## SMTP -https://cloud.google.com/compute/docs/tutorials/sending-mail/using-mailgun?hl=fr - -## Test ``` -curl -H'Origin: http://realopinsight.com' \ - -H'Referer: realopinsight.com' \ +$ helm template \ + --namespace hugo-mx-gateway \ + --name hugo-mx-gateway \ + helm/hugo-mx-gateway/ | kubectl apply -f - +``` + +## Deployment on Docker +`hugo-mx-gateway` is released as a Docker image. So you can quickly start an instance of the service by running the following command: + +``` +$ docker run -d \ + --publish 8080:8080 \ + --name 'hugo-mx-gateway' \ + -e SMTP_SERVER_ADDR="smtp.mailgun.org:587" \ + -e SMTP_VERITY_CERT=true \ + -e SMTP_CLIENT_USERNAME="postmaster@example.com" \ + -e SMTP_CLIENT_PASSWORD="postmasterSecretPassWord" \ + -e CONTACT_REPLY_EMAIL="noreply@example.com" \ + -e CONTACT_REPLY_BCC_EMAIL="contact@example.com" \ + -e DEMO_URL="https://demo.example.com/" \ + -e ALLOWED_ORIGINS="127.0.0.1,example.com" \ + rchakode/hugo-mx-gateway +``` + +In this command, you SHOULD adapt the values of configuration variables as described [here](#configuration-variables). + +## Test the App +``` +curl -H'Origin: http://example.com' \ + -H'Referer: example.com' \ -H'Content-Type: application/x-www-form-urlencoded' \ -d 'target=contact' \ - -XPOST https://hugo-mx-gateway.ew.r.appspot.com/sendmail + -XPOST https://..r.appspot.com/sendmail +``` + +# Samples of Hugo Contact Forms +See in `./samples/`. + + +# Developers' corner +To build the stack ``` -# Build -```sh make build ``` -# Hugo Contact Form -See `./model/hugo-contact-form.html`. +# License & Copyrights +This tool (code and documentation) is licensed under the terms of Apache 2.0 License. Read the [LICENSE](LICENSE) file for more details on the license terms. -``` -
-
-
- Please fill in the form to submit your request -
-
- - -
-
- - -
-
- - -
- {{ if in .Params.tags "contact" }} -
- - - -
-
- - -
- {{ else }} -
- - -
- {{ end }} - -
-
-
-``` +The tool may inlcude third-party libraries provided with their owns licenses and copyrights, but always compatible with the Apache 2.0 License terms of use. + +# Support & Contributions +We encourage feedback and do make our best to handle any troubles you may encounter when using this tool. + +Here is the link to submit issues: https://github.com/rchakode/hugo-mx-gateway/issues. + +New ideas are welcomed, please open an issue to submit your idea if you have any one. + +Contributions are accepted subject that the code and documentation be released under the terms of Apache 2.0 License. + +To contribute bug patches or new features, please use the Github Pull Request model. \ No newline at end of file diff --git a/app.yaml.sample b/app.yaml.sample index f96752a..b1e9cb7 100644 --- a/app.yaml.sample +++ b/app.yaml.sample @@ -1,6 +1,8 @@ runtime: go112 env_variables: + TEMPLATE_DEMO_REQUEST_REPLY: templates/template_reply_demo_request.html + TEMPLATE_CONTACT_REQUEST_REPLY: templates/template_reply_contact_request.html SMTP_SERVER_ADDR: "smtp.mailgun.org:587" SMTP_VERITY_CERT: true SMTP_CLIENT_USERNAME: "postmaster@example.com" diff --git a/model/hugo-contact-form.html b/samples/hugo-partial-contact-form.html similarity index 100% rename from model/hugo-contact-form.html rename to samples/hugo-partial-contact-form.html diff --git a/screenshots/form-submitted-and-processed-with-success.png b/screenshots/form-submitted-and-processed-with-success.png new file mode 100644 index 0000000000000000000000000000000000000000..38957072e62cb539ea388aa79bdc62dcc9bafdb3 GIT binary patch literal 42816 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 literal 0 HcmV?d00001