matrix-org / sygnal

Sygnal: reference Push Gateway for Matrix
Apache License 2.0
166 stars 148 forks source link
hacktoberfest matrix python

Introduction

Sygnal is a reference Push Gateway for Matrix.

See https://spec.matrix.org/latest/push-gateway-api/#overview for a high level overview of how notifications work in Matrix.

The Matrix Specification describes the protocol that Matrix Home Servers use to send notifications to Push Gateways such as Sygnal.

Contributing

Looking to contribute to Sygnal? See CONTRIBUTING.md

Setup

Sygnal is configured through a YAML configuration file. By default, this configuration file is assumed to be named sygnal.yaml and to be in the working directory. To change this, set the SYGNAL_CONF environment variable to the path to your configuration file. A sample configuration file is provided in this repository; see sygnal.yaml.sample.

The apps: section is where you set up different apps that are to be handled. Each app should be given its own subsection, with the key of that subsection being the app's app_id. Keys in this section take the form of the app_id, as specified when setting up a Matrix pusher (see https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3pushersset).

See the sample configuration for examples.

You can find a docker image for sygnal on DockerHub.

App Types

There are two supported App Types:

apns

This sends push notifications to iOS apps via the Apple Push Notification Service (APNS).

The expected configuration depends on which kind of authentication you wish to use.

For certificate-based authentication, it expects:

For token-based authentication, it expects:

For either type, it can accept:

gcm

This sends messages via Google/Firebase Cloud Messaging (GCM/FCM) and hence can be used to deliver notifications to Android apps.

The expected configuration depends on which version of the firebase api you wish to use.

For legacy API, it expects:

For API v1, it expects:

Using an HTTP Proxy for outbound traffic

Sygnal will, by default, automatically detect an HTTPS_PROXY environment variable on start-up.

If one is present, it will be used for outbound traffic to APNs and GCM/FCM.

Currently only HTTP proxies with the CONNECT method are supported. (Both APNs and FCM use HTTPS traffic which is tunnelled in a CONNECT tunnel.)

If you wish, you can instead configure a HTTP CONNECT proxy in sygnal.yaml.

Pusher data configuration

The following parameters can be specified in the data dictionary which is given when configuring the pusher via POST /_matrix/client/v3/pushers/set:

Running

With default configuration file name of sygnal.yaml:

python -m sygnal.sygnal

With custom configuration file name:

SYGNAL_CONF=/path/to/custom_sygnal.conf python -m sygnal.sygnal

Python 3.8 or higher is required.

Log Rotation

Sygnal's logging appends to files but does not use a rotating logger. The recommended configuration is therefore to use logrotate. The log file will be automatically reopened if the log file changes, for example due to logrotate.

More Documentation

More documentation for Sygnal is available in the docs directory: