Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/esl/MongoosePush

MongoosePush is a simple Elixir RESTful service allowing to send push notification via FCM and/or APNS.
https://github.com/esl/MongoosePush

apns elixir fcm gcm http2 mongooseim notifications push rest

Last synced: about 1 month ago
JSON representation

MongoosePush is a simple Elixir RESTful service allowing to send push notification via FCM and/or APNS.

Lists

README

        

# MongoosePush

[![CircleCI](https://circleci.com/gh/esl/MongoosePush.svg?style=shield)](https://app.circleci.com/pipelines/github/esl/MongoosePush?branch=master) [![Coverage Status](https://coveralls.io/repos/github/esl/MongoosePush/badge.svg?branch=master)](https://coveralls.io/github/esl/MongoosePush?branch=master)

**MongoosePush** is a simple, **RESTful** service written in **Elixir**, providing the ability to **send push
notifications** to `FCM` (Firebase Cloud Messaging) and/or
`APNS` (Apple Push Notification Service) via their `HTTP/2` API.

## Documentation

Documentation is available at: https://esl.github.io/MongoosePush

# Quick start

## Running from DockerHub

We provide prebuilt MongoosePush images. Configuration requires either an FCM token, APNS certificates or an APNS token. Depending on your usecase, you can have some or all of them in a standalone MongoosePush instance or using a docker container.
For the full configuration you need to set the following directory structure up:
* priv/
* ssl/
* rest_cert.pem - The HTTP endpoint certificate
* rest_key.pem - private key for the HTTP endpoint certificate (has to be unencrypted)
* apns/
* prod_cert.pem - Production APNS app certificate
* prod_key.pem - Production APNS app certificate's private key (has to be unencrypted)
* dev_cert.pem - Development APNS app certificate
* dev_key.pem - Development APNS app certificate's private key (has to be unencrypted)
* token.p8 - `APNS` authentication token
* fcm/
* token.json - `FCM` service account JSON file
* var/
* config.toml - TOML configuration file (optional)

If you want to use `APNS` token authentication you need to provide token and set `key_id` and `team_id` environment variables. To see how to obtain token and `key_id` read [this](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token_based_connection_to_apns).
To see how to obtain `team_id` read [this](https://www.mobiloud.com/help/knowledge-base/ios-app-transfer/).

`FCM` JSON file can be generated by Firebase console (https://console.firebase.google.com). Go to your project -> `Project Settings` -> `Service accounts` -> `Generate new private key`.

TOML config file is optional. It allows to fully configure the service but basic configuration can be achieved via environmental variables only.

Assuming that you have the `priv` directory with all certificates and fcm token in current directory and `var` directory with a config file, then you may start MongoosePush with the following command:

```bash
docker run -v `pwd`/priv:/opt/app/priv \
-v `pwd`/var:/opt/app/var \
-e PUSH_HTTPS_CERTFILE="/opt/app/priv/ssl/rest_cert.pem" \
-e PUSH_HTTPS_KEYFILE="/opt/app/priv/ssl/rest_key.pem" \
-it --rm mongooseim/mongoose-push:latest
```

## Local build prerequisites

* Elixir 1.5+ (http://elixir-lang.org/install.html)
* Erlang/OTP 19.3+
> NOTE: Some Erlang/OTP 20.x releases / builds contain TLS bug that prevents connecting to APNS servers.
> When building with this Erlang version, please make sure that MongoosePushRuntimeTest test suite passes.
> It is however highly recommended to build MongoosePush with Erlang/OTP 21.x.
* Rebar3 (just enter ```mix local.rebar```)