1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh.git synced 2024-09-03 19:46:01 +02:00

Merge pull request #3 from Gredin67/master

Make app work
This commit is contained in:
Gredin67 2020-04-30 14:45:35 +02:00 committed by GitHub
commit 5ad308edc8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 230 additions and 117 deletions

View file

@ -6,7 +6,7 @@
*[Lire ce readme en français.](./README_fr.md)*
> *This package allows you to install Mautrix-WhatsApp quickly and simply on a YunoHost server.
> *This package allows you to install a Mautrix-WhatsApp bridge quickly and simply on a YunoHost server alongside Matrix-Synapse.
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
## Overview
@ -20,37 +20,67 @@ A puppeting bridge between Matrix and WhatsApp packaged as a YunoHost service. M
## Demo
* [Official demo](Link to a demo site for this app)
* If you want to test the bridge, send an email to the App maintainer with the matrix user account you want to bridge to WhatsApp.
## Configuration
## Bridging usage
### Bridge a WhatsApp user and a Matrix user
* First your matrix user or server has to be authorized in the bridge configuration (see below)
* Then, invite the bot (default @whatsappbot:yoursynapse.domain) in this new matrix-whatsapp bot administration room.
* Type ``login``
* Capture the QR code with the camera in the whatsapp of your VM or smartphone (WhatsApp Web)
* Send ``help`` to the bot in the created room to know how to control the bot.
See also [upstream wiki Authentication page](https://github.com/tulir/mautrix-whatsapp/wiki/Authentication)
How to configure this app: by an admin panel, a plain file with SSH, or any other way.
** Note that several WhatsApp and Matrix users can be bridge, each users has its own bot administration room. If they are in a same WhatsApp group, only one matrix room will be created. **
### Bridge a WhatsApp group in Matrix "Relaybot"
* First Relaybot option should be enabled in the bridge configuration (default=disabled, see below)
* Once the bot administration room is setup, you can also bridge all messages between a Matrix room and a WhatsApp room/group.
In whatsapp all messages will be sent by the account who is logged in with a prefix for the source matrix user. On the matrix side the bridge will still create matrix users corresponding to the whatsapp users when they send a message.
See also [upstream wiki Relaybot page](https://github.com/tulir/mautrix-whatsapp/wiki/Relaybot)
## Configuration of the bridge
The bridge is roughly configured at installation, e.g. allowed admin and user of the bot. Finer configuration can be done by modifying the
following configuration file with SSH:
```/opt/yunohost/mautrix_whatsapp/config.yaml```
and then restarting the mautrix_whatsapp service.
## Documentation
* Official documentation: https://github.com/tulir/mautrix-whatsapp/wiki
* Official "mautrix-whatsapp" documentation: https://github.com/tulir/mautrix-whatsapp/wiki
* Matrix room: #whatsapp:maunium.net
In case you need to upload your logs somewhere, be aware that they contain your contacts' and your phone numbers. Strip them out with
``| sed -r 's/[0-9]{10,}/📞/g' ``
* "mautrix-whatsapp" bridge is based on the [Rhymen/go-whatsapp](https://github.com/Rhymen/go-whatsapp) implementation of the [sigalor/whatsapp-web-reveng](https://github.com/sigalor/whatsapp-web-reveng) project.
* YunoHost documentation: If specific documentation is needed, feel free to contribute.
## YunoHost specific features
#### Multi-users support
Are LDAP and HTTP auth supported?
Can the app be used by multiple users?
* Bot users are not related to Yunohost users. Any matrix account or server autorized in the configuration of the bridge can use the bot.
* The whatsapp bot is a local matrix-synapse user, but accessible through federation (synapse public or private).
* Several WhatsApp and Matrix users can be bridged with one bridge, each user has its own bot administration room.
* If several bot users are in a same WhatsApp group, only one matrix room will be created by the bridge.
Multi-instance installation should work, but was not tested yet. A priori it makes only sense if several synapse instances are installed.
#### Supported architectures
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/REPLACEBYYOURAPP%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/REPLACEBYYOURAPP/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/REPLACEBYYOURAPP%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/REPLACEBYYOURAPP/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/REPLACEBYYOURAPP%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/REPLACEBYYOURAPP/)
* Tested on ARMv7 in April 2020
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mautrix-whatsapp_ynh%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/mautrix-whatsapp_ynh/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mautrix-whatsapp_ynh%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mautrix-whatsapp_ynh/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/mautrix-whatsapp_ynh%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/mautrix-whatsapp_ynh/)
## Limitations
* Audio/Video calls are not bridged yet. It is recommended to install whatsapp on a virtual android running on a server. If whatsapp loses connection, e.g. the phone is set in flight mode, the bot has to be restarted by sending a reconnnect message in the matrix administration room.
* Audio/Video calls are not bridged yet.
* If whatsapp loses connection, e.g. the phone is set in flight mode or push notifications are deactivated, the bot has sometimes to be restarted manually by sending a reconnnect message in the matrix administration room.
## Additional information
* Other information you would add about this application
* It is recommended to install whatsapp on a virtual android running on a server, see [upstream wiki Android-VM-Setup page](https://github.com/tulir/mautrix-whatsapp/wiki/Android-VM-Setup)
**More information on the documentation page:**
https://github.com/tulir/mautrix-whatsapp/wiki
@ -60,6 +90,8 @@ https://github.com/tulir/mautrix-whatsapp/wiki
* Report a bug: https://github.com/YunoHost-Apps/mautrix-whatsapp_ynh/issues
* App website: https://github.com/Gredin67/mautrix-whatsapp_ynh
* Upstream app repository: https://github.com/tulir/mautrix-whatsapp
* Up-Upstream repository: https://github.com/Rhymen/go-whatsapp
* Up-Up-Upstream repository: https://github.com/sigalor/whatsapp-web-reveng
* YunoHost website: https://yunohost.org/
---
@ -67,12 +99,8 @@ https://github.com/tulir/mautrix-whatsapp/wiki
Developers info
----------------
**Only if you want to use a testing branch for coding, instead of merging directly into master.**
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/REPLACEBYYOURAPP_ynh/tree/testing).
To try the testing branch, please proceed like that.
To test communication between the app service and synapse on a VM, you must install a certificate:
```
sudo yunohost app install https://github.com/YunoHost-Apps/REPLACEBYYOURAPP_ynh/tree/testing --debug
or
sudo yunohost app upgrade REPLACEBYYOURAPP -u https://github.com/YunoHost-Apps/REPLACEBYYOURAPP_ynh/tree/testing --debug
echo | openssl s_client -showcerts -servername synapse.vm -connect synapse.vm:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/synapse.vm.crt
update-ca-certificates
```

View file

@ -4,37 +4,46 @@
# Move this file from check_process.default to check_process when you have filled it.
;; Test complet
auto_remove=1
; Manifest
domain="domain.tld" (DOMAIN)
path="/path" (PATH)
admin="john" (USER)
language="fr"
#path="/_matrix/static/" (PATH)
#admin="john" (USER)
#language="en"
is_public=1 (PUBLIC|public=1|private=0)
password="pass"
port="666" (PORT)
#password="pass"
#port="666" (PORT)
whatsappbot="whatsappbot"
botadmin="@johndoe:domain.tld"
botusers="@johndoe:domain.tld"
; pre-install
sudo yunohost app fetchlist
#sudo yunohost domain add baikaldomain.tld --admin-password $PASSWORD
sudo yunohost app install synapse -a "domain=domain.tld&server_name="Same than the domain"&is_public=1"
; Checks
pkg_linter=1
setup_sub_dir=1
setup_root=1
setup_nourl=0
setup_private=1
setup_private=0
setup_public=1
upgrade=1
upgrade=1 from_commit=CommitHash
backup_restore=1
upgrade=0
#upgrade=1 from_commit=CommitHash
backup_restore=0
multi_instance=1
# This test is no longer necessary since the version 2.7 (PR: https://github.com/YunoHost/yunohost/pull/304), you can still do it if your app could be installed with this version.
# incorrect_path=1
port_already_use=0
change_url=1
change_url=0
;;; Levels
# If the level 5 (Package linter) is forced to 1. Please add justifications here.
Level 5=auto
;;; Options
Email=
#Email=
Notification=none
;;; Upgrade options
; commit=CommitHash
name=Name and date of the commit.
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666&
#name=Name and date of the commit.
#manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666&

View file

@ -6,7 +6,7 @@ After=matrix-synapse.service
Type=simple
User=__APP__
WorkingDirectory=/opt/yunohost/__APP__
ExecStart=/opt/yunohost/__APP__/mautrix-whatsapp -c=/opt/yunohost/__APP__/config.yaml >> /var/log/__APP__/__APP__.log 2>&1
ExecStart=/opt/yunohost/__APP__/mautrix-whatsapp -c=/opt/yunohost/__APP__/config.yaml >> /var/log/__APP__/log.log 2>&1
Restart=always
RestartSec=3

View file

@ -11,8 +11,8 @@
"license": "AGPL3",
"maintainer": {
"name": "Gredin67",
"email": "ghentz@mailz.org",
"url": "https://github.com/YunoHost-Apps/mautrix-whatsapp_ynh"
"email": "mautrix_whatsapp@neutralite.org",
"url": "https://github.com/Gredin67/mautrix_whatsapp_ynh"
},
"requirements": {
"yunohost": ">= 3.5"
@ -23,55 +23,70 @@
],
"arguments": {
"install": [
{
"name": "domain",
"type": "domain",
{
"name": "port",
"type": "string",
"ask": {
"en": "Choose the domain name where Synapse is installed.",
"fr": "Choisissez le nom de domaine associé à Synapse."
"en": "Choose a port for communication between mautrix_whatsapp (app service) and synapse (home server)",
"fr": "Choisissez un port pour la communication entre mautrix_whatsapp (app service) et synapse (home server)"
},
"example": "domain.org"
"example": "29318",
"default": "8449"
},
{
"name": "synapsenumber",
"type": "string",
"ask": {
"en": "Choose the local synapse instance number to communicate with app service",
"fr": "Choisissez le numéro de l'instance synapse qui doit communiquer avec l'app service"
},
"example": "2 (for instance synapse__2)",
"help": {
"en": "If you installed synapse only once time, then leave default value 1.",
"fr": "Si vous n'avez installé qu'une fois synapse, gardez la valeur par défaut 1."
},
"default": "1"
},
{
"name": "whatsappbot",
"type": "string",
"ask": {
"en": "Choose the user name of the whatsapp bot for which to create a YunoHost and a local synapse server account.",
"fr": "Choisissez le nom d'utilisateur du robot whatsapp pour lequel un compte sera créé sur YunoHost et le serveur local synapse."
"en": "Choose a local Matrix/Synapse user name for the WhatsApp bot",
"fr": "Choisissez un nom d'utilisateur local Matrix/Synapse pour le robot WhatsApp"
},
"example": "whatsappbot",
"help": {
"en": "A system user will be created. Invite @whatsappbot:localsynapse.servername from an authorized Matrix account to start bridging. Give the matrix server_name, not the full domain/url.",
"fr": "Un utilisateur système sera créé. Inviter @whatsappbot:localsynapse.servername depuis un compte Matrix autorisé pour démarrer une passerelle. Donner le nom du serveur matrix, pas le domaine/url complet."
},
"default": "whatsappbot"
},
{
"name": "botadmin",
"type": "string",
"ask": {
"en": "Choose the matrix account administrator of the whatsapp bot.",
"fr": "Choisissez le compte matrix administrateur du robot whatsapp."
"en": "Choose the Matrix account administrator of the WhatsApp bot",
"fr": "Choisissez le compte Matrix administrateur du robot WhatsApp"
},
"example": "@johndoe:domain.org or @johndoe:matrix.org",
"default": "Your main matrix account"
"example": "@johndoe:localsynapse.servername or @johndoe:matrix.org",
"help": {
"en": "The WhatsApp bot administrator does not need to be a local Matrix/Synapse account.",
"fr": "Le compte administrateur du robot WhatsApp peut ne pas être un compte local Matrix/Synapse."
},
"default": "Your main Matrix account"
},
{
"name": "botusers",
"type": "string",
"ask": {
"en": "Choose a matrix server authorized to use the whatsapp bot.",
"fr": "Choisissez un serveur matrix dont tous les utilisateurs sont autorisés à utiliser le robot whatsapp."
"en": "Choose Matrix user(s) authorized to bridge with the WhatsApp bot",
"fr": "Choisissez le/les compte(s) Matrix autorisés à utiliser le robot WhatsApp"
},
"example": "matrix.org"
},
{
"name": "is_public",
"type": "boolean",
"ask": {
"en": "Is it a public bot?",
"fr": "Est-ce un robot public ?"
},
"default": true,
"example": "admin or local or @johndoe:server.name or server.name or *",
"default": "admin",
"help": {
"en": "A public bot means anyone with a matrix account on the synapse server will be able to use the bot.",
"fr": "Un robot public signifie que chaque compte matrix du serveur synapse pourra utiliser le robot."
"en": "Either the administrator only (admin), all local Matrix/Synapse users (local), a remote or local user (@johndoe:server.name), a remote server (matrix.org), or all remote/local servers (*) can be authorized. Give the matrix server_name, not the full domain/url.",
"fr": "On peut autoriser le compte administrateur seul (admin), tous les comptes Matrix/Synapse locaux (local), un compte local ou distant (@johndoe:server.name), un serveur distant (matrix.org), ou tous les serveurs remote/local (*). Donner le nom du serveur matrix, pas le domaine/url complet."
}
}
]

View file

@ -6,7 +6,8 @@
# dependencies used by the app
pkg_dependencies=""
GO_VERSION="1.14.2"
GO_VERSION="1.11"
GO_PATH="/usr/lib/go-$GO_VERSION/bin"
#=================================================
# PERSONAL HELPERS

View file

@ -8,7 +8,7 @@
source _common.sh
#source /opt/yunohost/mautrix-whatsapp/_ynh_install_extra_app_dependencies
#source _ynh_install_extra_app_dependencies
source _ynh_install_extra_app_dependencies
source /usr/share/yunohost/helpers
#=================================================
@ -26,12 +26,14 @@ ynh_abort_if_errors
# RETRIEVE ARGUMENTS FROM THE MANIFEST
#=================================================
domain=$YNH_APP_ARG_DOMAIN
#domain=$YNH_APP_ARG_DOMAIN
#path_url=$YNH_APP_ARG_PATH
port=$YNH_APP_ARG_PORT
synapsenumber=$YNH_APP_ARG_SYNAPSENUMBER
whatsappbot=$YNH_APP_ARG_WHATSAPPBOT
botadmin=$YNH_APP_ARG_BOTADMIN
botusers=$YNH_APP_ARG_BOTUSERS
is_public=$YNH_APP_ARG_IS_PUBLIC
#is_public=$YNH_APP_ARG_IS_PUBLIC
#language=$YNH_APP_ARG_LANGUAGE
#password=$YNH_APP_ARG_PASSWORD
@ -47,6 +49,17 @@ is_public=$YNH_APP_ARG_IS_PUBLIC
### db names, ...
app=$YNH_APP_INSTANCE_NAME
# ToDo check (in manifest?) if the selected synapse instance is not already connected to a mautrix_whatsapp bridge
if [ $synapsenumber -eq "1" ]
then
server_name=$(ynh_app_setting_get --app synapse --key server_name)
domain=$(ynh_app_setting_get --app synapse --key domain)
else
server_name=$(ynh_app_setting_get --app synapse__$synapsenumber --key server_name)
domain=$(ynh_app_setting_get --app synapse__$synapsenumber --key domain)
fi
#=================================================
# SET CONSTANTS
#=================================================
@ -86,13 +99,15 @@ test ! -e "$final_path" || ynh_die --message="This path already contains a folde
ynh_script_progression --message="Storing installation settings..." --time --weight=1
ynh_app_setting_set --app=$app --key=domain --value=$domain
ynh_app_setting_set --app=$app --key=server_name --value=$server_name
ynh_app_setting_set --app=$app --key=port --value=$port
#ynh_app_setting_set --app=$app --key=path --value=$path_url
ynh_app_setting_set --app=$app --key=whatsappbot --value=$whatsappbot
ynh_app_setting_set --app=$app --key=botadmin --value=$botadmin
ynh_app_setting_set --app=$app --key=botusers --value=$botusers
ynh_app_setting_set --app=$app --key=mautrix_version --value=$upstream_version
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
ynh_app_setting_set --app=$app --key=is_public --value=$is_public
#ynh_app_setting_set --app=$app --key=is_public --value=$is_public
#ynh_app_setting_set --app=$app --key=language --value=$language
#=================================================
@ -126,7 +141,7 @@ ynh_script_progression --message="Installing dependencies..." --time --weight=1
### - As well as the section "REINSTALL DEPENDENCIES" in the restore script
### - And the section "UPGRADE DEPENDENCIES" in the upgrade script
#ynh_install_extra_app_dependencies --repo="http://http.debian.net/debian stretch-backports main" --package="golang-1.11"
ynh_install_extra_app_dependencies --repo="http://http.debian.net/debian stretch-backports main" --package="golang-1.11"
#ynh_install_extra_app_dependencies --repo="http://http.debian.net/debian $(lsb_release -sc)" --package="golang-1.11"
ynh_install_app_dependencies $pkg_dependencies
@ -135,12 +150,12 @@ ynh_install_app_dependencies $pkg_dependencies
# INSTALL GO
#=================================================
type /usr/local/go/bin/go > /dev/null || {
ynh_script_progression --message="Installing go..." --time --weight=1
wget https://dl.google.com/go/go$GO_VERSION.linux-$architecture.tar.gz -q
tar -C /usr/local -xzf go$GO_VERSION.linux-$architecture.tar.gz
}
export PATH=$PATH:/usr/local/go/bin
#type /usr/lib/go-$GO_VERSION/bin/go > /dev/null || {
# ynh_script_progression --message="Installing go..." --time --weight=1
# wget https://dl.google.com/go/go$GO_VERSION.linux-$architecture.tar.gz -q
# tar -C /usr/lib -xzf go$GO_VERSION.linux-$architecture.tar.gz
#}
export PATH=$PATH:/usr/lib/go-$GO_VERSION/bin
#=================================================
# CREATE A POSTGRESQL DATABASE
@ -217,6 +232,7 @@ ynh_add_systemd_config --service=$app
cd $final_path
#echo 'export PATH=$PATH:/usr/lib/go-1.11/bin/' >> /etc/profile
#source /etc/profile
export PATH=$PATH:/usr/lib/go-$GO_VERSION/bin
go build
#Copy example-config.yaml to config.yaml
cp example-config.yaml config.yaml
@ -241,17 +257,17 @@ cp example-config.yaml config.yaml
ynh_replace_string --match_string="address: https://example.com" --replace_string="address: https://$domain" --target_file="$final_path/config.yaml"
# The domain of the homeserver (for MXIDs, etc).
#"domain: example.com"
ynh_replace_string --match_string="domain: example.com" --replace_string="domain: $domain" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="domain: example.com" --replace_string="domain: $server_name" --target_file="$final_path/config.yaml"
# Application service host/registration related details.
# Changing these values requires regeneration of the registration.
#appservice:
# The address that the homeserver can use to connect to this appservice.
ynh_replace_string --match_string="address: http://localhost:29318" --replace_string="address: http://0.0.0.0:8449" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="address: http://localhost:29318" --replace_string="address: http://localhost:$port" --target_file="$final_path/config.yaml"
# The hostname and port where this appservice should listen.
#ynh_replace_string --match_string="hostname: 0.0.0.0" --replace_string="hostname: 0.0.0.0" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="port: 29318" --replace_string="port: 8449" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="port: 29318" --replace_string="port: $port" --target_file="$final_path/config.yaml"
# Database config.
#database:
@ -264,17 +280,25 @@ ynh_replace_string --match_string="uri: mautrix-whatsapp.db" --replace_string="u
# The unique ID of this appservice.
#id: whatsapp
ynh_replace_string --match_string="id: whatsapp" --replace_string="id: $app" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="id: whatsapp" --replace_string="id: $whatsappbot" --target_file="$final_path/config.yaml"
# Appservice bot details.
#bot:
# Username of the appservice bot.
#username: whatsappbot
ynh_replace_string --match_string="username: whatsappbot" --replace_string="username: $mautrix_whatsapp_user" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="username: whatsappbot" --replace_string="username: $whatsappbot" --target_file="$final_path/config.yaml"
# Bridge config
#bridge:
# Localpart template of MXIDs for WhatsApp users.
# {{.}} is replaced with the phone number of the WhatsApp user.
#username_template: whatsapp_{{.}}
#ynh_replace_string --match_string="username_template: whatsapp" --replace_string="username_template: $whatsappbot" --target_file="$final_path/config.yaml"
# {{.Localpart}} is the MXID localpart and {{.Server}} is the MXID server part of the user.
#community_template: whatsapp_{{.Localpart}}={{.Server}}
#ynh_replace_string --match_string="community_template: whatsapp" --replace_string="community_template: $whatsappbot" --target_file="$final_path/config.yaml"
# Maximum number of connections. Mostly relevant for Postgres.
ynh_replace_string --match_string="max_open_conns: 20" --replace_string="max_open_conns: 20" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="max_idle_conns: 2" --replace_string="max_idle_conns: 2" --target_file="$final_path/config.yaml"
#ynh_replace_string --match_string="max_open_conns: 20" --replace_string="max_open_conns: 20" --target_file="$final_path/config.yaml"
#ynh_replace_string --match_string="max_idle_conns: 2" --replace_string="max_idle_conns: 2" --target_file="$final_path/config.yaml"
#You will also need to add your user of admin user under the permissions section.
# Permissions for using the bridge.
@ -288,18 +312,21 @@ ynh_replace_string --match_string="max_idle_conns: 2" --replace_string="max_idle
# mxid - Specific user
#permissions:
# "*": relaybot
# "example.com": user
#ynh_replace_string --match_string="'*': relaybot" --replace_string="'': relaybot" --target_file="$final_path/config.yaml"
# "@admin:example.com": admin
#ynh_replace_string --match_string=""*": relaybot" --replace_string=""*": relaybot" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="@admin:example.com" --replace_string="$botadmin" --target_file="$final_path/config.yaml"
# Make app public if necessary
if [ $is_public -eq 1 ]
# "example.com": user
if [ "$botusers" = "domain" ]
then
ynh_replace_string --match_string="example.com" --replace_string="domain" --target_file="$final_path/config.yaml"
ynh_replace_string --match_string="example.com" --replace_string="$server_name" --target_file="$final_path/config.yaml"
elif [ "$botusers" = "admin" ]
then
ynh_replace_string --match_string="'example.com': user" --replace_string="#'example.com': user" --target_file="$final_path/config.yaml"
else
ynh_replace_string --match_string="example.com" --replace_string="$botusers" --target_file="$final_path/config.yaml"
fi
# relaybot:
# # Whether or not relaybot support is enabled.
# enabled: false
@ -320,6 +347,27 @@ fi
# m.video: "<b>{{ .Sender.Displayname }}</b> sent a video"
# m.location: "<b>{{ .Sender.Displayname }}</b> sent a location"
# Logging config.
#logging:
# The directory for log files. Will be created if not found.
#directory: ./logs
ynh_replace_string --match_string="directory: ./logs" --replace_string="directory: /var/log/$app" --target_file="$final_path/config.yaml"
# Available variables: .Date for the file date and .Index for different log files on the same day.
#file_name_format: "{{.Date}}-{{.Index}}.log"
ynh_replace_string --match_string="{{.Date}}-{{.Index}}.log" --replace_string="log.log" --target_file="$final_path/config.yaml"
# Date format for file names in the Go time format: https://golang.org/pkg/time/#pkg-constants
#file_date_format: 2006-01-02
ynh_replace_string --match_string="file_date_format: 2006-01-02" --replace_string="#file_date_format: 2006-01-02" --target_file="$final_path/config.yaml"
# Log file permissions.
#file_mode: 0600
#ynh_replace_string --match_string="file_mode: 0600" --replace_string="file_mode: 384" --target_file="$final_path/config.yaml"
# Timestamp format for log entries in the Go time format.
#timestamp_format: Jan _2, 2006 15:04:05
# Minimum severity for log messages.
# Options: debug, info, warn, error, fatal
#print_level: debug
ynh_replace_string --match_string="print_level: debug" --replace_string="print_level: warn" --target_file="$final_path/config.yaml"
#Generate the appservice registration file by running ./mautrix-whatsapp -g.
#You can use the -c and -r flags to change the location of the config and registration files. They default to config.yaml and registration.yaml respectively.
./mautrix-whatsapp -g -r /etc/matrix-synapse/$app-registration.yaml
@ -332,12 +380,8 @@ fi
ynh_replace_string --match_string="#app_service_config_files:" --replace_string="app_service_config_files:" --target_file="/etc/matrix-synapse/homeserver.yaml"
ynh_replace_string --match_string="# - app_service_1.yaml" --replace_string=" - '/etc/matrix-synapse/$app-registration.yaml'" --target_file="/etc/matrix-synapse/homeserver.yaml"
#You will then need to restart the synapse server. Remember to restart it every time the registration file is regenerated.
service matrix-synapse restart
#Run the bridge with
#service mautrix-whatsapp restart
#./mautrix-whatsapp.
#=================================================
# STORE THE CONFIG FILE CHECKSUM
#=================================================
@ -377,6 +421,11 @@ chown $mautrix_whatsapp_user:root -R $final_path
chown /etc/matrix-synapse/$app-registration.yaml --reference="/etc/matrix-synapse/homeserver.yaml"
chmod u=rwX,g=rX,o= /etc/matrix-synapse/$app-registration.yaml
#You will then need to restart the synapse server. Remember to restart it every time the registration file is regenerated.
service matrix-synapse restart
#Run the bridge with
#service mautrix-whatsapp restart
#./mautrix-whatsapp.
#=================================================
# SETUP LOGROTATE
@ -392,7 +441,8 @@ ynh_script_progression --message="Configuring log rotation..." --time --weight=1
### - And the section "SETUP LOGROTATE" in the upgrade script
# Use logrotate to manage application logfile(s)
ynh_use_logrotate --logfile "/var/log/$app"
ynh_use_logrotate --logfile "/var/log/$app/log.log"
chown $mautrix_whatsapp_user:root -R /var/log/$app
#=================================================
# ADVERTISE SERVICE IN ADMIN PANEL
@ -406,7 +456,7 @@ ynh_use_logrotate --logfile "/var/log/$app"
### - Remove the section "REMOVE SERVICE FROM ADMIN PANEL" in the remove script
### - As well as the section "ADVERTISE SERVICE IN ADMIN PANEL" in the restore script
yunohost service add $app --log "/var/log/$app/$app.log"
yunohost service add $app --log "/var/log/$app/log.log"
# if using yunohost version 3.2 or more in the 'manifest.json', a description can be added
#yunohost service add $app --description "$app daemon for XXX" --log "/var/log/$app/$app.log"
@ -424,12 +474,12 @@ ynh_script_progression --message="Starting a systemd service..." --time --weight
### - And the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the change_url script
# Start a systemd service
ynh_systemd_action --service_name=$app --action="start" --line_match="Bot now ready to bridge Whatsapp and Matrix users from $botusers" --log_path="/var/log/$app/$app.log" --timeout=300
ynh_systemd_action --service_name=$app --action="start"
#=================================================
# SETUP FAIL2BAN
#=================================================
ynh_script_progression --message="Configuring fail2ban..." --time --weight=1
#ynh_script_progression --message="Configuring fail2ban..." --time --weight=1
# Create a dedicated fail2ban config
#ynh_add_fail2ban_config --logpath="/var/log/nginx/${domain}-error.log" --failregex="Regex to match into the log for a failed login"

View file

@ -16,12 +16,20 @@ ynh_script_progression --message="Loading installation settings..." --time --wei
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get --app=$app --key=domain)
port=$(ynh_app_setting_get --app=$app --key=port)
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$db_name
#domain=$(ynh_app_setting_get --app=$app --key=domain)
#port=$(ynh_app_setting_get --app=$app --key=port)
#db_name=$(ynh_app_setting_get --app=$app --key=db_name)
#db_user=$db_name
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#=================================================
# SET CONSTANTS
#=================================================
mautrix_whatsapp_user=$app
#mautrix_whatsapp_db_name=$app
#mautrix_whatsapp_db_user=$app
#=================================================
# STANDARD REMOVE
#=================================================
@ -46,10 +54,10 @@ ynh_remove_systemd_config
#=================================================
# REMOVE THE MYSQL DATABASE
#=================================================
ynh_script_progression --message="Removing the MySQL database..." --time --weight=1
ynh_script_progression --message="Removing the PostgreSQL database..." --time --weight=1
# Remove a database if it exists, along with the associated user
ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name
#ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name
ynh_psql_drop_db $app
ynh_psql_drop_user $app
@ -70,22 +78,24 @@ ynh_script_progression --message="Removing app main directory..." --time --weigh
ynh_secure_remove --file="$final_path"
ynh_secure_remove --file="/etc/matrix-synapse/$app-registration.yaml"
ynh_replace_string --match_string=" - '/etc/matrix-synapse/$app-registration.yaml'" --replace_string="# - app_service_1.yaml" --target_file="/etc/matrix-synapse/homeserver.yaml"
service matrix-synapse restart
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Removing nginx web server configuration..." --time --weight=1
#ynh_script_progression --message="Removing nginx web server configuration..." --time --weight=1
# Remove the dedicated nginx config
ynh_remove_nginx_config
#ynh_remove_nginx_config
#=================================================
# REMOVE PHP-FPM CONFIGURATION
#=================================================
ynh_script_progression --message="Removing php-fpm configuration..." --time --weight=1
#ynh_script_progression --message="Removing php-fpm configuration..." --time --weight=1
# Remove the dedicated php-fpm config
ynh_remove_fpm_config
#ynh_remove_fpm_config
#=================================================
# REMOVE LOGROTATE CONFIGURATION
@ -99,19 +109,19 @@ ynh_remove_logrotate
# CLOSE A PORT
#=================================================
if yunohost firewall list | grep -q "\- $port$"
then
ynh_script_progression --message="Closing port $port..."
ynh_exec_warn_less yunohost firewall disallow TCP $port
fi
#if yunohost firewall list | grep -q "\- $port$"
#then
# ynh_script_progression --message="Closing port $port..."
# ynh_exec_warn_less yunohost firewall disallow TCP $port
#fi
#=================================================
# REMOVE FAIL2BAN CONFIGURATION
#=================================================
ynh_script_progression --message="Removing fail2ban configuration..." --time --weight=1
#ynh_script_progression --message="Removing fail2ban configuration..." --time --weight=1
# Remove the dedicated fail2ban config
ynh_remove_fail2ban_config
#ynh_remove_fail2ban_config
#=================================================
# SPECIFIC REMOVE
@ -120,13 +130,13 @@ ynh_remove_fail2ban_config
#=================================================
# Remove a cron file
ynh_secure_remove --file="/etc/cron.d/$app"
#ynh_secure_remove --file="/etc/cron.d/$app"
# Remove a directory securely
ynh_secure_remove --file="/etc/$app/"
#ynh_secure_remove --file="/etc/$app/"
# Remove the log files
ynh_secure_remove --file="/var/log/$app/"
#ynh_secure_remove --file="/var/log/$app/"
#=================================================
# GENERIC FINALIZATION
@ -136,7 +146,7 @@ ynh_secure_remove --file="/var/log/$app/"
ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1
# Delete a system user
ynh_system_user_delete --username=$app
ynh_system_user_delete --username=$mautrix_whatsapp_user
#=================================================
# END OF SCRIPT