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)* *[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.* If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
## Overview ## Overview
@ -20,37 +20,67 @@ A puppeting bridge between Matrix and WhatsApp packaged as a YunoHost service. M
## Demo ## 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 ## 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 documentation: If specific documentation is needed, feel free to contribute.
## YunoHost specific features ## YunoHost specific features
#### Multi-users support #### Multi-users support
Are LDAP and HTTP auth supported? * Bot users are not related to Yunohost users. Any matrix account or server autorized in the configuration of the bridge can use the bot.
Can the app be used by multiple users? * 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 #### 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/) * Tested on ARMv7 in April 2020
* 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/) * 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/)
* 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/) * 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 ## 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 ## 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:** **More information on the documentation page:**
https://github.com/tulir/mautrix-whatsapp/wiki 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 * Report a bug: https://github.com/YunoHost-Apps/mautrix-whatsapp_ynh/issues
* App website: https://github.com/Gredin67/mautrix-whatsapp_ynh * App website: https://github.com/Gredin67/mautrix-whatsapp_ynh
* Upstream app repository: https://github.com/tulir/mautrix-whatsapp * 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/ * YunoHost website: https://yunohost.org/
--- ---
@ -67,12 +99,8 @@ https://github.com/tulir/mautrix-whatsapp/wiki
Developers info Developers info
---------------- ----------------
**Only if you want to use a testing branch for coding, instead of merging directly into master.** To test communication between the app service and synapse on a VM, you must install a certificate:
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.
``` ```
sudo yunohost app install 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
or update-ca-certificates
sudo yunohost app upgrade REPLACEBYYOURAPP -u https://github.com/YunoHost-Apps/REPLACEBYYOURAPP_ynh/tree/testing --debug
``` ```

View file

@ -4,37 +4,46 @@
# Move this file from check_process.default to check_process when you have filled it. # Move this file from check_process.default to check_process when you have filled it.
;; Test complet ;; Test complet
auto_remove=1
; Manifest ; Manifest
domain="domain.tld" (DOMAIN) domain="domain.tld" (DOMAIN)
path="/path" (PATH) #path="/_matrix/static/" (PATH)
admin="john" (USER) #admin="john" (USER)
language="fr" #language="en"
is_public=1 (PUBLIC|public=1|private=0) is_public=1 (PUBLIC|public=1|private=0)
password="pass" #password="pass"
port="666" (PORT) #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 ; Checks
pkg_linter=1 pkg_linter=1
setup_sub_dir=1 setup_sub_dir=1
setup_root=1 setup_root=1
setup_nourl=0 setup_nourl=0
setup_private=1 setup_private=0
setup_public=1 setup_public=1
upgrade=1 upgrade=0
upgrade=1 from_commit=CommitHash #upgrade=1 from_commit=CommitHash
backup_restore=1 backup_restore=0
multi_instance=1 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. # 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 # incorrect_path=1
port_already_use=0 port_already_use=0
change_url=1 change_url=0
;;; Levels ;;; Levels
# If the level 5 (Package linter) is forced to 1. Please add justifications here. # If the level 5 (Package linter) is forced to 1. Please add justifications here.
Level 5=auto Level 5=auto
;;; Options ;;; Options
Email= #Email=
Notification=none Notification=none
;;; Upgrade options ;;; Upgrade options
; commit=CommitHash ; commit=CommitHash
name=Name and date of the commit. #name=Name and date of the commit.
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666& #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 Type=simple
User=__APP__ User=__APP__
WorkingDirectory=/opt/yunohost/__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 Restart=always
RestartSec=3 RestartSec=3

View file

@ -11,8 +11,8 @@
"license": "AGPL3", "license": "AGPL3",
"maintainer": { "maintainer": {
"name": "Gredin67", "name": "Gredin67",
"email": "ghentz@mailz.org", "email": "mautrix_whatsapp@neutralite.org",
"url": "https://github.com/YunoHost-Apps/mautrix-whatsapp_ynh" "url": "https://github.com/Gredin67/mautrix_whatsapp_ynh"
}, },
"requirements": { "requirements": {
"yunohost": ">= 3.5" "yunohost": ">= 3.5"
@ -24,54 +24,69 @@
"arguments": { "arguments": {
"install": [ "install": [
{ {
"name": "domain", "name": "port",
"type": "domain", "type": "string",
"ask": { "ask": {
"en": "Choose the domain name where Synapse is installed.", "en": "Choose a port for communication between mautrix_whatsapp (app service) and synapse (home server)",
"fr": "Choisissez le nom de domaine associé à Synapse." "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", "name": "whatsappbot",
"type": "string", "type": "string",
"ask": { "ask": {
"en": "Choose the user name of the whatsapp bot for which to create a YunoHost and a local synapse server account.", "en": "Choose a local Matrix/Synapse user name for the WhatsApp bot",
"fr": "Choisissez le nom d'utilisateur du robot whatsapp pour lequel un compte sera créé sur YunoHost et le serveur local synapse." "fr": "Choisissez un nom d'utilisateur local Matrix/Synapse pour le robot WhatsApp"
}, },
"example": "whatsappbot", "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" "default": "whatsappbot"
}, },
{ {
"name": "botadmin", "name": "botadmin",
"type": "string", "type": "string",
"ask": { "ask": {
"en": "Choose the matrix account administrator of the whatsapp bot.", "en": "Choose the Matrix account administrator of the WhatsApp bot",
"fr": "Choisissez le compte matrix administrateur du robot whatsapp." "fr": "Choisissez le compte Matrix administrateur du robot WhatsApp"
}, },
"example": "@johndoe:domain.org or @johndoe:matrix.org", "example": "@johndoe:localsynapse.servername or @johndoe:matrix.org",
"default": "Your main matrix account" "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", "name": "botusers",
"type": "string", "type": "string",
"ask": { "ask": {
"en": "Choose a matrix server authorized to use the whatsapp bot.", "en": "Choose Matrix user(s) authorized to bridge with the WhatsApp bot",
"fr": "Choisissez un serveur matrix dont tous les utilisateurs sont autorisés à utiliser le robot whatsapp." "fr": "Choisissez le/les compte(s) Matrix autorisés à utiliser le robot WhatsApp"
}, },
"example": "matrix.org" "example": "admin or local or @johndoe:server.name or server.name or *",
}, "default": "admin",
{
"name": "is_public",
"type": "boolean",
"ask": {
"en": "Is it a public bot?",
"fr": "Est-ce un robot public ?"
},
"default": true,
"help": { "help": {
"en": "A public bot means anyone with a matrix account on the synapse server will be able to use the bot.", "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": "Un robot public signifie que chaque compte matrix du serveur synapse pourra utiliser le robot." "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 # dependencies used by the app
pkg_dependencies="" pkg_dependencies=""
GO_VERSION="1.14.2" GO_VERSION="1.11"
GO_PATH="/usr/lib/go-$GO_VERSION/bin"
#================================================= #=================================================
# PERSONAL HELPERS # PERSONAL HELPERS

View file

@ -8,7 +8,7 @@
source _common.sh source _common.sh
#source /opt/yunohost/mautrix-whatsapp/_ynh_install_extra_app_dependencies #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 source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -26,12 +26,14 @@ ynh_abort_if_errors
# RETRIEVE ARGUMENTS FROM THE MANIFEST # RETRIEVE ARGUMENTS FROM THE MANIFEST
#================================================= #=================================================
domain=$YNH_APP_ARG_DOMAIN #domain=$YNH_APP_ARG_DOMAIN
#path_url=$YNH_APP_ARG_PATH #path_url=$YNH_APP_ARG_PATH
port=$YNH_APP_ARG_PORT
synapsenumber=$YNH_APP_ARG_SYNAPSENUMBER
whatsappbot=$YNH_APP_ARG_WHATSAPPBOT whatsappbot=$YNH_APP_ARG_WHATSAPPBOT
botadmin=$YNH_APP_ARG_BOTADMIN botadmin=$YNH_APP_ARG_BOTADMIN
botusers=$YNH_APP_ARG_BOTUSERS botusers=$YNH_APP_ARG_BOTUSERS
is_public=$YNH_APP_ARG_IS_PUBLIC #is_public=$YNH_APP_ARG_IS_PUBLIC
#language=$YNH_APP_ARG_LANGUAGE #language=$YNH_APP_ARG_LANGUAGE
#password=$YNH_APP_ARG_PASSWORD #password=$YNH_APP_ARG_PASSWORD
@ -47,6 +49,17 @@ is_public=$YNH_APP_ARG_IS_PUBLIC
### db names, ... ### db names, ...
app=$YNH_APP_INSTANCE_NAME 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 # 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_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=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=path --value=$path_url
ynh_app_setting_set --app=$app --key=whatsappbot --value=$whatsappbot 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=botadmin --value=$botadmin
ynh_app_setting_set --app=$app --key=botusers --value=$botusers 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=mautrix_version --value=$upstream_version
ynh_app_setting_set --app=$app --key=final_path --value=$final_path 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 #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 ### - As well as the section "REINSTALL DEPENDENCIES" in the restore script
### - And the section "UPGRADE DEPENDENCIES" in the upgrade 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_extra_app_dependencies --repo="http://http.debian.net/debian $(lsb_release -sc)" --package="golang-1.11"
ynh_install_app_dependencies $pkg_dependencies ynh_install_app_dependencies $pkg_dependencies
@ -135,12 +150,12 @@ ynh_install_app_dependencies $pkg_dependencies
# INSTALL GO # INSTALL GO
#================================================= #=================================================
type /usr/local/go/bin/go > /dev/null || { #type /usr/lib/go-$GO_VERSION/bin/go > /dev/null || {
ynh_script_progression --message="Installing go..." --time --weight=1 # ynh_script_progression --message="Installing go..." --time --weight=1
wget https://dl.google.com/go/go$GO_VERSION.linux-$architecture.tar.gz -q # 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 # tar -C /usr/lib -xzf go$GO_VERSION.linux-$architecture.tar.gz
} #}
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/usr/lib/go-$GO_VERSION/bin
#================================================= #=================================================
# CREATE A POSTGRESQL DATABASE # CREATE A POSTGRESQL DATABASE
@ -217,6 +232,7 @@ ynh_add_systemd_config --service=$app
cd $final_path cd $final_path
#echo 'export PATH=$PATH:/usr/lib/go-1.11/bin/' >> /etc/profile #echo 'export PATH=$PATH:/usr/lib/go-1.11/bin/' >> /etc/profile
#source /etc/profile #source /etc/profile
export PATH=$PATH:/usr/lib/go-$GO_VERSION/bin
go build go build
#Copy example-config.yaml to config.yaml #Copy example-config.yaml to config.yaml
cp example-config.yaml 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" 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). # The domain of the homeserver (for MXIDs, etc).
#"domain: example.com" #"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. # Application service host/registration related details.
# Changing these values requires regeneration of the registration. # Changing these values requires regeneration of the registration.
#appservice: #appservice:
# The address that the homeserver can use to connect to this 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. # 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="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 config.
#database: #database:
@ -264,17 +280,25 @@ ynh_replace_string --match_string="uri: mautrix-whatsapp.db" --replace_string="u
# The unique ID of this appservice. # The unique ID of this appservice.
#id: whatsapp #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. # Appservice bot details.
#bot: #bot:
# Username of the appservice bot. # Username of the appservice bot.
#username: whatsappbot #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. # 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_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_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. #You will also need to add your user of admin user under the permissions section.
# Permissions for using the bridge. # 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 # mxid - Specific user
#permissions: #permissions:
# "*": relaybot # "*": relaybot
# "example.com": user #ynh_replace_string --match_string="'*': relaybot" --replace_string="'': relaybot" --target_file="$final_path/config.yaml"
# "@admin:example.com": admin # "@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" ynh_replace_string --match_string="@admin:example.com" --replace_string="$botadmin" --target_file="$final_path/config.yaml"
# Make app public if necessary # "example.com": user
if [ $is_public -eq 1 ] if [ "$botusers" = "domain" ]
then 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 else
ynh_replace_string --match_string="example.com" --replace_string="$botusers" --target_file="$final_path/config.yaml" ynh_replace_string --match_string="example.com" --replace_string="$botusers" --target_file="$final_path/config.yaml"
fi fi
# relaybot: # relaybot:
# # Whether or not relaybot support is enabled. # # Whether or not relaybot support is enabled.
# enabled: false # enabled: false
@ -320,6 +347,27 @@ fi
# m.video: "<b>{{ .Sender.Displayname }}</b> sent a video" # m.video: "<b>{{ .Sender.Displayname }}</b> sent a video"
# m.location: "<b>{{ .Sender.Displayname }}</b> sent a location" # 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. #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. #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 ./mautrix-whatsapp -g -r /etc/matrix-synapse/$app-registration.yaml
@ -332,10 +380,6 @@ 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_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" 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. #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.
#================================================= #=================================================
@ -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" 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 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 # 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 ### - And the section "SETUP LOGROTATE" in the upgrade script
# Use logrotate to manage application logfile(s) # 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 # 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 ### - 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 ### - 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 # 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" #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 ### - And the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the change_url script
# Start a systemd service # 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 # 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 # 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" #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 app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get --app=$app --key=domain) #domain=$(ynh_app_setting_get --app=$app --key=domain)
port=$(ynh_app_setting_get --app=$app --key=port) #port=$(ynh_app_setting_get --app=$app --key=port)
db_name=$(ynh_app_setting_get --app=$app --key=db_name) #db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$db_name #db_user=$db_name
final_path=$(ynh_app_setting_get --app=$app --key=final_path) 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 # STANDARD REMOVE
#================================================= #=================================================
@ -46,10 +54,10 @@ ynh_remove_systemd_config
#================================================= #=================================================
# REMOVE THE MYSQL DATABASE # 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 # 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_db $app
ynh_psql_drop_user $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="$final_path"
ynh_secure_remove --file="/etc/matrix-synapse/$app-registration.yaml" 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 # 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 # Remove the dedicated nginx config
ynh_remove_nginx_config #ynh_remove_nginx_config
#================================================= #=================================================
# REMOVE PHP-FPM CONFIGURATION # 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 # Remove the dedicated php-fpm config
ynh_remove_fpm_config #ynh_remove_fpm_config
#================================================= #=================================================
# REMOVE LOGROTATE CONFIGURATION # REMOVE LOGROTATE CONFIGURATION
@ -99,19 +109,19 @@ ynh_remove_logrotate
# CLOSE A PORT # CLOSE A PORT
#================================================= #=================================================
if yunohost firewall list | grep -q "\- $port$" #if yunohost firewall list | grep -q "\- $port$"
then #then
ynh_script_progression --message="Closing port $port..." # ynh_script_progression --message="Closing port $port..."
ynh_exec_warn_less yunohost firewall disallow TCP $port # ynh_exec_warn_less yunohost firewall disallow TCP $port
fi #fi
#================================================= #=================================================
# REMOVE FAIL2BAN CONFIGURATION # 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 # Remove the dedicated fail2ban config
ynh_remove_fail2ban_config #ynh_remove_fail2ban_config
#================================================= #=================================================
# SPECIFIC REMOVE # SPECIFIC REMOVE
@ -120,13 +130,13 @@ ynh_remove_fail2ban_config
#================================================= #=================================================
# Remove a cron file # Remove a cron file
ynh_secure_remove --file="/etc/cron.d/$app" #ynh_secure_remove --file="/etc/cron.d/$app"
# Remove a directory securely # Remove a directory securely
ynh_secure_remove --file="/etc/$app/" #ynh_secure_remove --file="/etc/$app/"
# Remove the log files # Remove the log files
ynh_secure_remove --file="/var/log/$app/" #ynh_secure_remove --file="/var/log/$app/"
#================================================= #=================================================
# GENERIC FINALIZATION # 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 ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1
# Delete a system user # Delete a system user
ynh_system_user_delete --username=$app ynh_system_user_delete --username=$mautrix_whatsapp_user
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT