# Setting up Fluffygate (optional)

The playbook can install and configure [Fluffygate](https://github.com/krille-chan/fluffygate), a simple Push Gateway for Fluffychat.

See the project's documentation to learn what it does and why it might be useful to you.

**Note**: most people don't need to install their own gateway. This optional playbook component is only useful to people who develop/build their own Matrix client applications themselves, as you'll need access to your own Firebase/FCM and APNS credentials.

## Adjusting the playbook configuration

To enable Fluffygate, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:

```yaml
matrix_fluffygate_enabled: true

# Basic app information
matrix_fluffygate_app_name: "Your App Name"
matrix_fluffygate_app_website: "https://example.com"

# Firebase/FCM configuration (for Android / IOS)
matrix_fluffygate_firebase_project: "your-firebase-project-id"
matrix_fluffygate_firebase_key: |
  {
    # Your Firebase service account key JSON content
  }

# Notification settings
matrix_fluffygate_notification_title: "{count} new messages"
matrix_fluffygate_notification_body: "{body}"

# Android specific notification options
matrix_fluffygate_android_notification_options:
  priority: high
  notification:
    sound: "default"
    icon: "notifications_icon"
    tag: "default_notification"

# APNS specific notification options (for iOS)
matrix_fluffygate_apns_notification_options:
  headers:
    apns-priority: "10"
  payload:
    aps:
      sound: "default"
      badge: "{count}"
      mutable-content: 1
```

For a complete list of available configuration options, see the `defaults/main.yml` file in the role.

### Required Configuration

The following settings are required and must be defined:
- `matrix_fluffygate_hostname`
- `matrix_fluffygate_path_prefix`
- `matrix_fluffygate_container_network`
- `matrix_fluffygate_app_name`
- `matrix_fluffygate_app_website`

### Adjusting the Fluffygate URL

By default, this playbook installs Fluffygate at the root path (`/`) of the configured hostname. You can customize both the hostname and path prefix using these variables:

```yaml
# Configure the hostname where Fluffygate will be served
matrix_fluffygate_hostname: "push.example.com"

# Configure a custom path prefix (must either be '/' or not end with a slash)
matrix_fluffygate_path_prefix: /push
```

### Traefik Integration

Fluffygate includes built-in support for Traefik as a reverse proxy. The following settings control this integration:

```yaml
# Enable/disable Traefik labels
matrix_fluffygate_container_labels_traefik_enabled: true

# Configure the Traefik network
matrix_fluffygate_container_labels_traefik_docker_network: "{{ matrix_fluffygate_container_network }}"

# Additional Traefik configuration
matrix_fluffygate_container_labels_traefik_rule: "Host(`{{ matrix_fluffygate_container_labels_traefik_hostname }}`)"
matrix_fluffygate_container_labels_traefik_priority: 0
matrix_fluffygate_container_labels_traefik_entrypoints: web-secure
```

## Adjusting DNS records

You will need to configure your DNS records to point the Fluffygate hostname to your server. This typically involves creating either:
- an A record pointing to your server's IPv4 address
- a CNAME record pointing to your server's hostname

## Installing

After configuring the playbook and adjusting your DNS records, run the installation command:

```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
```

To install only Fluffygate, you can use:

```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-fluffygate,start
```

## Usage

To make use of your Fluffygate installation:

1. Configure your Matrix client application to use your Fluffygate URL as the push gateway
2. Ensure your app uses the same Firebase/FCM credentials for Android notifications
3. Ensure your app uses the same APNS certificates/credentials for iOS notifications
4. Configure the notification templates and options as needed through the playbook variables

### Debugging

If you need to troubleshoot issues:

1. Enable debug logs by setting:
```yaml
matrix_fluffygate_debug_logs: true
```

2. Check the container logs:
```bash
docker logs matrix-fluffygate
```

## Uninstalling

To remove Fluffygate, first disable it in your `inventory/host_vars/matrix.example.com/vars.yml`:

```yaml
matrix_fluffygate_enabled: false
```

Then run the playbook:

```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-fluffygate,start
```

This will stop the service and remove all associated files.