Skip to content

Erlang + ClojureScript app to send holiday reminders

License

Notifications You must be signed in to change notification settings

lambdaclass/holiday_pinger

Repository files navigation

Holiday Pinger Build Status

Holiday Pinger is an Erlang/OTP application that allows users to send national holiday reminders through different channels (e.g. email, Slack).

Project setup for development

The project requires Elrang/OTP 20 and Leningen for the ClojureScript web application.

Setup the database (using Docker):

$ make ops

Create the tables:

$ make ops_start

Compile and run a development shell:

$ make dev

Run the tests:

$ make test

Build a release:

$ make release

UI setup

The UI is a ClojureScript project that uses re-frame. The code is in priv/ui and is build as part of the dev and release targets.

For UI development, run a dev shell and then:

$ make dev_ui

Which uses figwheel to provide a REPL and hot-reload of the code changes.

Production install

Inside the devops folder you can find an install shell script for installing holiday_ping in a debian 9 server. On the other hand, you can do make app_image to generate a Docker image of HolidayPinger called holiday-ping.

The release generated for prod expects some config values from the environment. If you prefer, you can modify prod.config to directly set the values and re-make the release or image. The expected environment variables are this:

  • RELX_REPLACE_OS_VARS=true
  • SSL_CERTFILE=</dir/of/ssl/fullchain.pem>
  • SSL_KEYFILE=</dir/of/ssl/privkey.pem>
  • TOKEN_SECRET=<secret_token_hash>
  • POSTGRES_HOST=<holiday_ping_postgres_1>
  • POSTGRES_USER=<postgres user>
  • POSTGRES_PASSWORD=<postgres user password>
  • POSTGRES_DB=<postgres database>

NOTE: Remember to mount the folder where SSL_CERTFILE and SSL_KEYFILE are stored into the container.

Credentials

GitHub and Google login configuration

For the GitHub login option to work, OAuth cretentials need to be generated and set as GITHUB_CLIENTID and GITHUB_SECRET environment variables.

Similarly, use the Google developers console to generate the Google credentials and set them as GOOGLE_CLIENTID and GOOGLE_SECRET.

Email providers

Holiday Pinger supports two different providers for sending emails: Amazon SES and Mailgun. To choose one, set it in the config file (prod.conf for the production environment) as

{email_provider, erlcloud_ses}

for Amazon SES and

{email_provider, mailgun}

for Mailgun. Afterwards, make sure email_enabled is set to true in the application environment (e.g. in conf/dev.config) and then supply the appropiate environment variables:

Amazon SES

To send emails with amazon, set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

Mailgun

To send emails with Mailgun, set MAILGUN_KEY and MAILGUN_DOMAIN.

Rest API Reference

Not yet.