-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2043 from etkecc/add-postmoogle
add postmoogle
- Loading branch information
Showing
13 changed files
with
434 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Setting up Postmoogle (optional) | ||
|
||
**Note**: email bridging can also happen via the [email2matrix](configuring-playbook-email2matrix.md) bridge supported by the playbook. | ||
|
||
The playbook can install and configure [Postmoogle](https://gitlab.com/etke.cc/postmoogle) for you. | ||
|
||
It's a bot/bridge you can use to forward emails to Matrix rooms | ||
|
||
See the project's [documentation](https://gitlab.com/etke.cc/postmoogle) to learn what it does and why it might be useful to you. | ||
|
||
|
||
## Registering the bot user | ||
|
||
By default, the playbook will set up the bot with a username like this: `@postmoogle:DOMAIN`. | ||
|
||
(to use a different username, adjust the `matrix_bot_postmoogle_login` variable). | ||
|
||
You **need to register the bot user manually** before setting up the bot. You can use the playbook to [register a new user](registering-users.md): | ||
|
||
``` | ||
ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=postmoogle password=PASSWORD_FOR_THE_BOT admin=no' --tags=register-user | ||
``` | ||
|
||
Choose a strong password for the bot. You can generate a good password with a command like this: `pwgen -s 64 1`. | ||
|
||
|
||
## Adjusting the playbook configuration | ||
|
||
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file: | ||
|
||
```yaml | ||
matrix_bot_postmoogle_enabled: true | ||
|
||
# Adjust this to whatever password you chose when registering the bot user | ||
matrix_bot_postmoogle_password: PASSWORD_FOR_THE_BOT | ||
``` | ||
|
||
|
||
## Installing | ||
|
||
After configuring the playbook, run the [installation](installing.md) command again: | ||
|
||
``` | ||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start | ||
``` | ||
|
||
|
||
## Usage | ||
|
||
To use the bot, invite the `@postmoogle:DOMAIN` into a room you want to use as a mailbox. | ||
|
||
Then send `!pm mailbox NAME` to expose this Matrix room as an inbox with the email address `NAME@matrix.domain`. Emails sent to that email address will be forwarded to the room. | ||
|
||
Send `!pm help` to the room to see the bot's help menu for additional commands. | ||
|
||
You can also refer to the upstream [documentation](https://gitlab.com/etke.cc/postmoogle). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
--- | ||
# postmoogle is an email to matrix bot | ||
# Project source code URL: https://gitlab.com/etke.cc/postmoogle | ||
|
||
matrix_bot_postmoogle_enabled: true | ||
|
||
matrix_bot_postmoogle_container_image_self_build: false | ||
matrix_bot_postmoogle_docker_repo: "https://gitlab.com/etke.cc/postmoogle.git" | ||
matrix_bot_postmoogle_docker_repo_version: "{{ matrix_bot_postmoogle_version }}" | ||
matrix_bot_postmoogle_docker_src_files_path: "{{ matrix_base_data_path }}/postmoogle/docker-src" | ||
|
||
matrix_bot_postmoogle_version: latest | ||
matrix_bot_postmoogle_docker_image: "{{ matrix_bot_postmoogle_docker_image_name_prefix }}postmoogle:{{ matrix_bot_postmoogle_version }}" | ||
matrix_bot_postmoogle_docker_image_name_prefix: "{{ 'localhost/' if matrix_bot_postmoogle_container_image_self_build else 'registry.gitlab.com/etke.cc/' }}" | ||
matrix_bot_postmoogle_docker_image_force_pull: "{{ matrix_bot_postmoogle_docker_image.endswith(':latest') }}" | ||
|
||
matrix_bot_postmoogle_base_path: "{{ matrix_base_data_path }}/postmoogle" | ||
matrix_bot_postmoogle_config_path: "{{ matrix_bot_postmoogle_base_path }}/config" | ||
matrix_bot_postmoogle_data_path: "{{ matrix_bot_postmoogle_base_path }}/data" | ||
|
||
# A list of extra arguments to pass to the container | ||
matrix_bot_postmoogle_container_extra_arguments: [] | ||
|
||
# List of systemd services that matrix-bot-postmoogle.service depends on | ||
matrix_bot_postmoogle_systemd_required_services_list: ['docker.service'] | ||
|
||
# List of systemd services that matrix-bot-postmoogle.service wants | ||
matrix_bot_postmoogle_systemd_wanted_services_list: [] | ||
|
||
|
||
# Database-related configuration fields. | ||
# | ||
# To use SQLite, stick to these defaults. | ||
# | ||
# To use Postgres: | ||
# - change the engine (`matrix_bot_postmoogle_database_engine: 'postgres'`) | ||
# - adjust your database credentials via the `matrix_bot_postmoogle_database_*` variables | ||
matrix_bot_postmoogle_database_engine: 'sqlite' | ||
|
||
matrix_bot_postmoogle_sqlite_database_path_local: "{{ matrix_bot_postmoogle_data_path }}/bot.db" | ||
matrix_bot_postmoogle_sqlite_database_path_in_container: "/data/bot.db" | ||
|
||
matrix_bot_postmoogle_database_username: 'postmoogle' | ||
matrix_bot_postmoogle_database_password: 'some-password' | ||
matrix_bot_postmoogle_database_hostname: 'matrix-postgres' | ||
matrix_bot_postmoogle_database_port: 5432 | ||
matrix_bot_postmoogle_database_name: 'postmoogle' | ||
|
||
matrix_bot_postmoogle_database_connection_string: 'postgres://{{ matrix_bot_postmoogle_database_username }}:{{ matrix_bot_postmoogle_database_password }}@{{ matrix_bot_postmoogle_database_hostname }}:{{ matrix_bot_postmoogle_database_port }}/{{ matrix_bot_postmoogle_database_name }}?sslmode=disable' | ||
|
||
matrix_bot_postmoogle_storage_database: "{{ | ||
{ | ||
'sqlite': matrix_bot_postmoogle_sqlite_database_path_in_container, | ||
'postgres': matrix_bot_postmoogle_database_connection_string, | ||
}[matrix_bot_postmoogle_database_engine] | ||
}}" | ||
|
||
matrix_bot_postmoogle_database_dialect: "{{ | ||
{ | ||
'sqlite': 'sqlite3', | ||
'postgres': 'postgres', | ||
}[matrix_bot_postmoogle_database_engine] | ||
}}" | ||
|
||
|
||
# The bot's username. This user needs to be created manually beforehand. | ||
# Also see `matrix_bot_postmoogle_password`. | ||
matrix_bot_postmoogle_login: "postmoogle" | ||
|
||
# The password that the bot uses to authenticate. | ||
matrix_bot_postmoogle_password: '' | ||
|
||
matrix_bot_postmoogle_homeserver: "{{ matrix_homeserver_container_url }}" | ||
|
||
# Command prefix | ||
matrix_bot_postmoogle_prefix: '!pm' | ||
|
||
# Max email size in megabytes, including attachments | ||
matrix_bot_postmoogle_maxsize: '1024' | ||
|
||
# Allow room settings changes by any room participant | ||
matrix_bot_postmoogle_noowner: false | ||
|
||
# Allow Postmoogle use by users over federation | ||
matrix_bot_postmoogle_federation: false | ||
|
||
# Sentry DSN | ||
matrix_bot_postmoogle_sentry: '' | ||
|
||
# Log level | ||
matrix_bot_postmoogle_loglevel: 'INFO' | ||
|
||
# Disable encryption | ||
matrix_bot_postmoogle_noencryption: false | ||
|
||
matrix_bot_postmoogle_domain: "{{ matrix_server_fqn_matrix }}" | ||
|
||
# in-container port | ||
matrix_bot_postmoogle_port: '2525' | ||
|
||
# on-host port | ||
matrix_bot_postmoogle_smtp_host_bind_port: '25' | ||
|
||
# Additional environment variables to pass to the postmoogle container | ||
# | ||
# Example: | ||
# matrix_bot_postmoogle_environment_variables_extension: | | ||
# postmoogle_TEXT_DONE=Done | ||
matrix_bot_postmoogle_environment_variables_extension: '' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
|
||
- ansible.builtin.set_fact: | ||
matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-bot-postmoogle.service'] }}" | ||
when: matrix_bot_postmoogle_enabled | bool |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
--- | ||
|
||
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/init.yml" | ||
tags: | ||
- always | ||
|
||
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/validate_config.yml" | ||
when: "run_setup | bool and matrix_bot_postmoogle_enabled | bool" | ||
tags: | ||
- setup-all | ||
- setup-bot-postmoogle | ||
|
||
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/setup_install.yml" | ||
when: "run_setup | bool and matrix_bot_postmoogle_enabled | bool" | ||
tags: | ||
- setup-all | ||
- setup-bot-postmoogle | ||
|
||
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/setup_uninstall.yml" | ||
when: "run_setup | bool and not matrix_bot_postmoogle_enabled | bool" | ||
tags: | ||
- setup-all | ||
- setup-bot-postmoogle |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
--- | ||
- block: | ||
- name: Check if an SQLite database already exists | ||
ansible.builtin.stat: | ||
path: "{{ matrix_bot_postmoogle_sqlite_database_path_local }}" | ||
register: matrix_bot_postmoogle_sqlite_database_path_local_stat_result | ||
|
||
- block: | ||
- ansible.builtin.set_fact: | ||
matrix_postgres_db_migration_request: | ||
src: "{{ matrix_bot_postmoogle_sqlite_database_path_local }}" | ||
dst: "{{ matrix_bot_postmoogle_database_connection_string }}" | ||
caller: "{{ role_path | basename }}" | ||
engine_variable_name: 'matrix_bot_postmoogle_database_engine' | ||
engine_old: 'sqlite' | ||
systemd_services_to_stop: ['matrix-bot-postmoogle.service'] | ||
|
||
- ansible.builtin.import_role: | ||
name: matrix-postgres | ||
tasks_from: migrate_db_to_postgres | ||
|
||
- ansible.builtin.set_fact: | ||
matrix_bot_postmoogle_requires_restart: true | ||
when: "matrix_bot_postmoogle_sqlite_database_path_local_stat_result.stat.exists | bool" | ||
when: "matrix_bot_postmoogle_database_engine == 'postgres'" | ||
|
||
- name: Ensure postmoogle paths exist | ||
ansible.builtin.file: | ||
path: "{{ item.path }}" | ||
state: directory | ||
mode: 0750 | ||
owner: "{{ matrix_user_username }}" | ||
group: "{{ matrix_user_groupname }}" | ||
with_items: | ||
- {path: "{{ matrix_bot_postmoogle_config_path }}", when: true} | ||
- {path: "{{ matrix_bot_postmoogle_data_path }}", when: true} | ||
- {path: "{{ matrix_bot_postmoogle_docker_src_files_path }}", when: matrix_bot_postmoogle_container_image_self_build} | ||
when: "item.when | bool" | ||
|
||
- name: Ensure postmoogle environment variables file created | ||
ansible.builtin.template: | ||
src: "{{ role_path }}/templates/env.j2" | ||
dest: "{{ matrix_bot_postmoogle_config_path }}/env" | ||
owner: "{{ matrix_user_username }}" | ||
group: "{{ matrix_user_groupname }}" | ||
mode: 0640 | ||
|
||
- name: Ensure postmoogle image is pulled | ||
docker_image: | ||
name: "{{ matrix_bot_postmoogle_docker_image }}" | ||
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}" | ||
force_source: "{{ matrix_bot_postmoogle_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}" | ||
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_bot_postmoogle_docker_image_force_pull }}" | ||
when: "not matrix_bot_postmoogle_container_image_self_build | bool" | ||
register: result | ||
retries: "{{ matrix_container_retries_count }}" | ||
delay: "{{ matrix_container_retries_delay }}" | ||
until: result is not failed | ||
|
||
- name: Ensure postmoogle repository is present on self-build | ||
ansible.builtin.git: | ||
repo: "{{ matrix_bot_postmoogle_docker_repo }}" | ||
version: "{{ matrix_bot_postmoogle_docker_repo_version }}" | ||
dest: "{{ matrix_bot_postmoogle_docker_src_files_path }}" | ||
force: "yes" | ||
become: true | ||
become_user: "{{ matrix_user_username }}" | ||
register: matrix_bot_postmoogle_git_pull_results | ||
when: "matrix_bot_postmoogle_container_image_self_build | bool" | ||
|
||
- name: Ensure postmoogle image is built | ||
docker_image: | ||
name: "{{ matrix_bot_postmoogle_docker_image }}" | ||
source: build | ||
force_source: "{{ matrix_bot_postmoogle_git_pull_results.changed if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}" | ||
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_mailer_git_pull_results.changed }}" | ||
build: | ||
dockerfile: Dockerfile | ||
path: "{{ matrix_bot_postmoogle_docker_src_files_path }}" | ||
pull: true | ||
when: "matrix_bot_postmoogle_container_image_self_build | bool" | ||
|
||
- name: Ensure matrix-bot-postmoogle.service installed | ||
ansible.builtin.template: | ||
src: "{{ role_path }}/templates/systemd/matrix-bot-postmoogle.service.j2" | ||
dest: "{{ matrix_systemd_path }}/matrix-bot-postmoogle.service" | ||
mode: 0644 | ||
register: matrix_bot_postmoogle_systemd_service_result | ||
|
||
- name: Ensure systemd reloaded after matrix-bot-postmoogle.service installation | ||
ansible.builtin.service: | ||
daemon_reload: true | ||
when: "matrix_bot_postmoogle_systemd_service_result.changed | bool" | ||
|
||
- name: Ensure matrix-bot-postmoogle.service restarted, if necessary | ||
ansible.builtin.service: | ||
name: "matrix-bot-postmoogle.service" | ||
state: restarted | ||
when: "matrix_bot_postmoogle_systemd_service_result.changed | bool" |
Oops, something went wrong.