diff --git a/README.md b/README.md index 5143bdf..0431f19 100644 --- a/README.md +++ b/README.md @@ -1 +1,29 @@ -# matterbridge_ynh \ No newline at end of file +# matterbridge app for YunoHost +matterbridge Server + +**Shipped version:** 1.16.0 + +- [Yunohost project](https://yunohost.org) +- [matterbridge website](https://github.com/42wim/matterbridge) + +![](https://raw.githubusercontent.com/42wim/matterbridge/master/img/matterbridge-notext.gif) + + +[![Install matterbridge with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=matterbridge) + +### Installing guide + + App can be installed by YunoHost **admin web-interface** or by **running following command**: + + $ sudo yunohost app install https://github.com/YunoHost-Apps/matterbridge_ynh + + After install : + + 1. need to edit file + 2. put your sql user and password + + +### Upgrade this package: + + $ sudo yunohost app upgrade matterbridge -u https://github.com/YunoHost-Apps/matterbridge_ynh + diff --git a/check_process b/check_process new file mode 100644 index 0000000..0cbeae3 --- /dev/null +++ b/check_process @@ -0,0 +1,42 @@ +# See here for more informations +# https://github.com/YunoHost/package_check#syntax-check_process-file + +# Move this file from check_process.default to check_process when you have filled it. + +;; Test complet + ; Manifest + domain="domain.tld" (DOMAIN) + path="/" (PATH) + is_public=1 (PUBLIC|public=1|private=0) +# password="pass" +# nextclouddomain="domain.tld" + port="9980" (PORT) + ; Checks + pkg_linter=1 + setup_sub_dir=0 + setup_root=1 + setup_nourl=0 + setup_private=0 + setup_public=1 + upgrade=1 + backup_restore=1 + multi_instance=1 + incorrect_path=1 + port_already_use=0 + change_url=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto +# Level 4: + Level 4=1 (This app supports the Nextcloud LDAP auth) +# Level 5: + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 +;;; Options +Email= +Notification=none diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..8445b69 --- /dev/null +++ b/conf/app.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/YunoHost-Apps/matterbridge_ynh/releases/download/1.16.0/matterbridge.tar.gz +SOURCE_SUM=11235b8fdb72c3927cbc247aabfb2116f4a9909214d4c0304bbbbe0a8fdd2b2e106b89acb6781165f7a080a407119c622eaf58b266e0d4ac486a692405575ebf +SOURCE_SUM_PRG=sha512sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=false +SOURCE_EXTRACT=true +SOURCE_FILENAME=matterbridge.tar.gz \ No newline at end of file diff --git a/conf/matterbridge.toml b/conf/matterbridge.toml new file mode 100644 index 0000000..d2f9ed7 --- /dev/null +++ b/conf/matterbridge.toml @@ -0,0 +1,1659 @@ +#This is configuration for matterbridge. +#WARNING: as this file contains credentials, be sure to set correct file permissions +#See https://github.com/42wim/matterbridge/wiki/How-to-create-your-config for how to create your config +#See https://github.com/42wim/matterbridge/wiki/Settings for all settings +################################################################### +#IRC section +################################################################### +#REQUIRED to start IRC section +[irc] + +#You can configure multiple servers "[irc.name]" or "[irc.name2]" +#In this example we use [irc.freenode] +#REQUIRED +[irc.freenode] +#irc server to connect to. +#REQUIRED +Server="irc.freenode.net:6667" + +#Password for irc server (if necessary) +#OPTIONAL (default "") +Password="" + +#Enable to use TLS connection to your irc server. +#OPTIONAL (default false) +UseTLS=false + +#Enable SASL (PLAIN) authentication. (freenode requires this from eg AWS hosts) +#It uses NickServNick and NickServPassword as login and password +#OPTIONAL (default false) +UseSASL=false + +#Enable to not verify the certificate on your irc server. +#e.g. when using selfsigned certificates +#OPTIONAL (default false) +SkipTLSVerify=true + +#If you know your charset, you can specify it manually. +#Otherwise it tries to detect this automatically. Select one below +# "iso-8859-2:1987", "iso-8859-9:1989", "866", "latin9", "iso-8859-10:1992", "iso-ir-109", "hebrew", +# "cp932", "iso-8859-15", "cp437", "utf-16be", "iso-8859-3:1988", "windows-1251", "utf16", "latin6", +# "latin3", "iso-8859-1:1987", "iso-8859-9", "utf-16le", "big5", "cp819", "asmo-708", "utf-8", +# "ibm437", "iso-ir-157", "iso-ir-144", "latin4", "850", "iso-8859-5", "iso-8859-5:1988", "l3", +# "windows-31j", "utf8", "iso-8859-3", "437", "greek", "iso-8859-8", "l6", "l9-iso-8859-15", +# "iso-8859-2", "latin2", "iso-ir-100", "iso-8859-6", "arabic", "iso-ir-148", "us-ascii", "x-sjis", +# "utf16be", "iso-8859-8:1988", "utf16le", "l4", "utf-16", "iso-ir-138", "iso-8859-7", "iso-8859-7:1987", +# "windows-1252", "l2", "koi8-r", "iso8859-1", "latin1", "ecma-114", "iso-ir-110", "elot-928", +# "iso-ir-126", "iso-8859-1", "iso-ir-127", "cp850", "cyrillic", "greek8", "windows-1250", "iso-latin-1", +# "l5", "ibm866", "cp866", "ms-kanji", "ibm850", "ecma-118", "iso-ir-101", "ibm819", "l1", "iso-8859-6:1987", +# "latin5", "ascii", "sjis", "iso-8859-10", "iso-8859-4", "iso-8859-4:1988", "shift-jis +# The select charset will be converted to utf-8 when sent to other bridges. +#OPTIONAL (default "") +Charset="" + +#Your nick on irc. +#REQUIRED +Nick="matterbot" + +#If you registered your bot with a service like Nickserv on freenode. +#Also being used when UseSASL=true +# +#Note: if you want do to quakenet auth, set NickServNick="Q@CServe.quakenet.org" +#OPTIONAL +NickServNick="nickserv" +NickServPassword="secret" + +#OPTIONAL only used for quakenet auth +NickServUsername="username" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Flood control +#Delay in milliseconds between each message send to the IRC server +#OPTIONAL (default 1300) +MessageDelay=1300 + +#Maximum amount of messages to hold in queue. If queue is full +#messages will be dropped. +# will be add to the message that fills the queue. +#OPTIONAL (default 30) +MessageQueue=30 + +#Maximum length of message sent to irc server. If it exceeds +# will be add to the message. +#OPTIONAL (default 400) +MessageLength=400 + +#Split messages on MessageLength instead of showing the +#WARNING: this could lead to flooding +#OPTIONAL (default false) +MessageSplit=false + +#Delay in seconds to rejoin a channel when kicked +#OPTIONAL (default 0) +RejoinDelay=0 + +#ColorNicks will show each nickname in a different color. +#Only works in IRC right now. +ColorNicks=false + +#RunCommands allows you to send RAW irc commands after connection +#Array of strings +#OPTIONAL (default empty) +RunCommands=["PRIVMSG user hello","PRIVMSG chanserv something"] + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +#The string "{NOPINGNICK}" (case sensitive) will be replaced by the actual nick / username, but with a ZWSP inside the nick, so the irc user with the same nick won't get pinged. See https://github.com/42wim/matterbridge/issues/175 for more information +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#Enable to show verbose users joins/parts (ident@host) from other bridges +#Currently works for messages from the following bridges: irc +#OPTIONAL (default false) +VerboseJoinPart=false + +#Do not send joins/parts to other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack +#OPTIONAL (default false) +NoSendJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#XMPP section +################################################################### +[xmpp] + +#You can configure multiple servers "[xmpp.name]" or "[xmpp.name2]" +#In this example we use [xmpp.jabber] +#REQUIRED +[xmpp.jabber] +#xmpp server to connect to. +#REQUIRED +Server="jabber.example.com:5222" + +#Jid +#REQUIRED +Jid="user@example.com" + +#Password +#REQUIRED +Password="yourpass" + +#MUC +#REQUIRED +Muc="conference.jabber.example.com" + +#Your nick in the rooms +#REQUIRED +Nick="xmppbot" + +#Enable to not verify the certificate on your xmpp server. +#e.g. when using selfsigned certificates +#OPTIONAL (default false) +SkipTLSVerify=true + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#Messages you want to replace. +#It replaces outgoing messages from the bridge. +#So you need to place it by the sending bridge definition. +#Regular expressions supported +#Some examples: +#This replaces cat => dog and sleep => awake +#ReplaceMessages=[ ["cat","dog"], ["sleep","awake"] ] +#This Replaces every number with number. 123 => numbernumbernumber +#ReplaceMessages=[ ["[0-9]","number"] ] +#OPTIONAL (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#Nicks you want to replace. +#See ReplaceMessages for syntaxA +#OPTIONAL (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#mattermost section +################################################################### +[mattermost] +#You can configure multiple servers "[mattermost.name]" or "[mattermost.name2]" +#In this example we use [mattermost.work] +#REQUIRED + +[mattermost.work] +#The mattermost hostname. (do not prefix it with http or https) +#REQUIRED (when not using webhooks) +Server="yourmattermostserver.domain" + +#Your team on mattermost. +#REQUIRED (when not using webhooks) +Team="yourteam" + +#login/pass of your bot. +#Use a dedicated user for this and not your own! +#REQUIRED (when not using webhooks) +Login="yourlogin" +Password="yourpass" + +#personal access token of the bot. +#new feature since mattermost 4.1. See https://docs.mattermost.com/developer/personal-access-tokens.html +#OPTIONAL (you can use token instead of login/password) +#Token="abcdefghijklm" + +#Enable this to make a http connection (instead of https) to your mattermost. +#OPTIONAL (default false) +NoTLS=false + +#### Settings for webhook matterbridge. +#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE DEDICATED BOT USER WHEN POSSIBLE! +#You don't need to configure this, if you have configured the settings +#above. + +#Url is your incoming webhook url as specified in mattermost. +#See account settings - integrations - incoming webhooks on mattermost. +#If specified, messages will be sent to mattermost using this URL +#OPTIONAL +WebhookURL="https://yourdomain/hooks/yourhookkey" + +#Address to listen on for outgoing webhook requests from mattermost. +#See account settings - integrations - outgoing webhooks on mattermost. +#If specified, messages will be received from mattermost on this ip:port +#(this will only work if WebhookURL above is also configured) +#OPTIONAL +WebhookBindAddress="0.0.0.0:9999" + +#Icon that will be showed in mattermost. +#This only works when WebhookURL is configured +#OPTIONAL +IconURL="http://youricon.png" + +#### End settings for webhook matterbridge. + +#Enable to not verify the certificate on your mattermost server. +#e.g. when using selfsigned certificates +#OPTIONAL (default false) +SkipTLSVerify=true + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#how to format the list of IRC nicks when displayed in mattermost. +#Possible options are "table" and "plain" +#OPTIONAL (default plain) +NickFormatter="plain" +#How many nicks to list per row for formatters that support this. +#OPTIONAL (default 4) +NicksPerRow=4 + +#Skip the Mattermost server version checks that are normally done when connecting. +#The usage scenario for this feature would be when the Mattermost instance is hosted behind a +#reverse proxy that suppresses "non-standard" response headers in flight. +#OPTIONAL (default false) +SkipVersionCheck=false + +#Whether to prefix messages from other bridges to mattermost with the sender's nick. +#Useful if username overrides for incoming webhooks isn't enabled on the +#mattermost server. If you set PrefixMessagesWithNick to true, each message +#from bridge to Mattermost will by default be prefixed by "bridge-" + nick. You can, +#however, modify how the messages appear, by setting (and modifying) RemoteNickFormat +#OPTIONAL (default false) +PrefixMessagesWithNick=false + +#Disable sending of edits to other bridges +#OPTIONAL (default false) +EditDisable=false + +#Message to be appended to every edited message +#OPTIONAL (default empty) +EditSuffix=" (edited)" + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#Do not send joins/parts to other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack +#OPTIONAL (default false) +NoSendJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#Gitter section +#Best to make a dedicated gitter account for the bot. +################################################################### + +[gitter] + +#You can configure multiple servers "[gitter.name]" or "[gitter.name2]" +#In this example we use [gitter.myproject] +#REQUIRED +[gitter.myproject] +#Token to connect with Gitter API +#You can get your token by going to https://developer.gitter.im/docs/welcome and SIGN IN +#REQUIRED +Token="Yourtokenhere" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +# +# Keybase +# You should have a separate bridge account on Keybase +# (it also needs to be logged in on the system you're running the bridge on) +# +################################################################### + +[keybase.myteam] + +# RemoteNickFormat defines how remote users appear on this bridge +# See [general] config section for default options +RemoteNickFormat="{NICK} ({PROTOCOL}): " + +# extra label that can be used in the RemoteNickFormat +# optional (default empty) +Label="" + +# Your team on Keybase. +# The bot user MUST be a member of this team +# REQUIRED +Team="myteam" + +################################################################### +#slack section +################################################################### +[slack] + +#You can configure multiple servers "[slack.name]" or "[slack.name2]" +#In this example we use [slack.hobby] +#REQUIRED +[slack.hobby] +#Token to connect with the Slack API +#You'll have to use a test/api-token using a dedicated user and not a bot token. +#See https://github.com/42wim/matterbridge/issues/75 for more info. +#Use https://api.slack.com/custom-integrations/legacy-tokens +#REQUIRED (when not using webhooks) +Token="yourslacktoken" + +#Extra slack specific debug info, warning this generates a lot of output. +#OPTIONAL (default false) +Debug="false" + +#### Settings for webhook matterbridge. +#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API +#AND DEDICATED BOT USER WHEN POSSIBLE! +#Url is your incoming webhook url as specified in slack +#See account settings - integrations - incoming webhooks on slack +#OPTIONAL +WebhookURL="https://hooks.slack.com/services/yourhook" + +#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API +#AND DEDICATED BOT USER WHEN POSSIBLE! +#Address to listen on for outgoing webhook requests from slack +#See account settings - integrations - outgoing webhooks on slack +#webhooks +#OPTIONAL +WebhookBindAddress="0.0.0.0:9999" + +#Icon that will be showed in slack +#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. +#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge +#The string "{LABEL}" (case sensitive) will be replaced by label= field of the sending bridge +#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge +#OPTIONAL +IconURL="https://robohash.org/{NICK}.png?size=48x48" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#how to format the list of IRC nicks when displayed in slack +#Possible options are "table" and "plain" +#OPTIONAL (default plain) +NickFormatter="plain" +#How many nicks to list per row for formatters that support this. +#OPTIONAL (default 4) +NicksPerRow=4 + +#Disable sending of edits to other bridges +#OPTIONAL (default false) +EditDisable=true + +#Message to be appended to every edited message +#OPTIONAL (default empty) +EditSuffix=" (edited)" + +#Whether to prefix messages from other bridges to mattermost with RemoteNickFormat +#Useful if username overrides for incoming webhooks isn't enabled on the +#slack server. If you set PrefixMessagesWithNick to true, each message +#from bridge to Slack will by default be prefixed by "bridge-" + nick. You can, +#however, modify how the messages appear, by setting (and modifying) RemoteNickFormat +#OPTIONAL (default false) +PrefixMessagesWithNick=false + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#Do not send joins/parts to other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack +#OPTIONAL (default false) +NoSendJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +#Opportunistically preserve threaded replies between Slack channels. +#This only works if the parent message is still in the cache. +#Cache is flushed between restarts. +#Note: Not currently working on gateways with mixed bridges of +# both slack and slack-legacy type. Context in issue #624. +#OPTIONAL (default false) +PreserveThreading=false + +#Enable showing "user_typing" events from across gateway when available. +#Protip: Set your bot/user's "Full Name" to be "Someone (over chat bridge)", +#and so the message will say "Someone (over chat bridge) is typing". +#OPTIONAL (default false) +ShowUserTyping=false + +################################################################### +#discord section +################################################################### +[discord] + +#You can configure multiple servers "[discord.name]" or "[discord.name2]" +#In this example we use [discord.game] +#REQUIRED +[discord.game] +#Token to connect with Discord API +#You can get your token by following the instructions on +#https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token +#If you want roles/groups mentions to be shown with names instead of ID, you'll need to give your bot the "Manage Roles" permission. +#REQUIRED +Token="Yourtokenhere" + +#REQUIRED +Server="yourservername" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Shows title, description and URL of embedded messages (sent by other bots) +#OPTIONAL (default false) +ShowEmbeds=false + +#Shows the username instead of the server nickname +#OPTIONAL (default false) +UseUserName=false + +#Show #xxxx discriminator with UseUserName +#OPTIONAL (default false) +UseDiscriminator=false + +#Specify WebhookURL. If given, will relay messages using the Webhook, which gives a better look to messages. +#This only works if you have one discord channel, if you have multiple discord channels you'll have to specify it in the gateway config +#OPTIONAL (default empty) +WebhookURL="Yourwebhooktokenhere" + +#Disable sending of edits to other bridges +#OPTIONAL (default false) +EditDisable=false + +#Message to be appended to every edited message +#OPTIONAL (default empty) +EditSuffix=" (edited)" + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic/purpose changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +#Enable to sync topic/purpose changes from other bridges +#Only works syncing topic changes from slack bridge for now +#OPTIONAL (default false) +SyncTopic=false + +################################################################### +#telegram section +################################################################### +[telegram] + +#You can configure multiple servers "[telegram.name]" or "[telegram.name2]" +#In this example we use [telegram.secure] +#REQUIRED +[telegram.secure] +#Token to connect with telegram API +#See https://core.telegram.org/bots#6-botfather and https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau +#REQUIRED +Token="Yourtokenhere" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#OPTIONAL (default empty) +#Supported formats are "HTML", "Markdown" and "HTMLNick" +#See https://core.telegram.org/bots/api#html-style +#See https://core.telegram.org/bots/api#markdown-style +#HTMLNick only allows HTML for the nick, the message itself will be html-escaped +MessageFormat="" + +#If enabled use the "First Name" as username. If this is empty use the Username +#If disabled use the "Username" as username. If this is empty use the First Name +#If all names are empty, username will be "unknown" +#OPTIONAL (default false) +UseFirstName=false + +#WARNING! If enabled this will relay GIF/stickers/documents and other attachments as URLs +#Those URLs will contain your bot-token. This may not be what you want. +#For now there is no secure way to relay GIF/stickers/documents without seeing your token. +#OPTIONAL (default false) +UseInsecureURL=false + +#Disable quoted/reply messages +#OPTIONAL (default false) +QuoteDisable=false + +#Format quoted/reply messages +#OPTIONAL (default "{MESSAGE} (re @{QUOTENICK}: {QUOTEMESSAGE})") +QuoteFormat="{MESSAGE} (re @{QUOTENICK}: {QUOTEMESSAGE})" + +#Convert WebP images to PNG before upload. +#https://github.com/42wim/matterbridge/issues/398 +#OPTIONAL (default false) +MediaConvertWebPToPNG=false + +#Disable sending of edits to other bridges +#OPTIONAL (default false) +EditDisable=false + +#Message to be appended to every edited message +#OPTIONAL (default empty) +EditSuffix=" (edited)" + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="spammer1 spammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +# +#WARNING: if you have set MessageFormat="HTML" be sure that this format matches the guidelines +#on https://core.telegram.org/bots/api#html-style otherwise the message will not go through to +#telegram! eg <{NICK}> should be <{NICK}> +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#rocketchat section +################################################################### +[rocketchat] +#You can configure multiple servers "[rocketchat.name]" or "[rocketchat.name2]" +#In this example we use [rocketchat.work] +#REQUIRED + +[rocketchat.rockme] +#The rocketchat hostname. (prefix it with http or https) +#REQUIRED (when not using webhooks) +Server="https://yourrocketchatserver.domain.com:443" + +#login/pass of your bot. +#login needs to be the login with email address! user@domain.com +#Use a dedicated user for this and not your own! +#REQUIRED (when not using webhooks) +Login="yourlogin@domain.com" +Password="yourpass" +# When using access token set Login to the User ID associated with your token and Token to your token. +# When Token is set Password is ignored. +# Login="yOurUSerID" +# Token="YoUrUsER_toKEN" + + +#### Settings for webhook matterbridge. +#USE DEDICATED BOT USER WHEN POSSIBLE! This allows you to use advanced features like message editing/deleting and uploads +#You don't need to configure this, if you have configured the settings +#above. + +#Url is your incoming webhook url as specified in rocketchat +#Read #https://rocket.chat/docs/administrator-guides/integrations/#how-to-create-a-new-incoming-webhook +#See administration - integrations - new integration - incoming webhook +#REQUIRED +WebhookURL="https://yourdomain/hooks/yourhookkey" + +#Address to listen on for outgoing webhook requests from rocketchat. +#See administration - integrations - new integration - outgoing webhook +#REQUIRED +WebhookBindAddress="0.0.0.0:9999" + +#Your nick/username as specified in your incoming webhook "Post as" setting +#REQUIRED +Nick="matterbot" + +#Enable this to make a http connection (instead of https) to your rocketchat +#OPTIONAL (default false) +NoTLS=false + +#Enable to not verify the certificate on your rocketchat server. +#e.g. when using selfsigned certificates +#OPTIONAL (default false) +SkipTLSVerify=true + +#### End settings for webhook matterbridge. + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Whether to prefix messages from other bridges to rocketchat with the sender's nick. +#Useful if username overrides for incoming webhooks isn't enabled on the +#rocketchat server. If you set PrefixMessagesWithNick to true, each message +#from bridge to rocketchat will by default be prefixed by the RemoteNickFormat setting. i +#if you're using login/pass you can better enable because of this bug: +#https://github.com/RocketChat/Rocket.Chat/issues/7549 +#OPTIONAL (default false) +PrefixMessagesWithNick=false + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="ircspammer1 ircspammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#matrix section +################################################################### +[matrix] +#You can configure multiple servers "[matrix.name]" or "[matrix.name2]" +#In this example we use [matrix.neo] +#REQUIRED + +[matrix.neo] +#Server is your homeserver (eg https://matrix.org) +#REQUIRED +Server="https://matrix.org" + +#login/pass of your bot. +#Use a dedicated user for this and not your own! +#Messages sent from this user will not be relayed to avoid loops. +#REQUIRED +Login="yourlogin" +Password="yourpass" + +#Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org +#to other bridges, or only send "username".(true only sends username) +#OPTIONAL (default false) +NoHomeServerSuffix=false + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Whether to prefix messages from other bridges to matrix with the sender's nick. +#Useful if username overrides for incoming webhooks isn't enabled on the +#matrix server. If you set PrefixMessagesWithNick to true, each message +#from bridge to matrix will by default be prefixed by the RemoteNickFormat setting. i +#OPTIONAL (default false) +PrefixMessagesWithNick=false + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="spammer1 spammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#steam section +################################################################### +[steam] +#You can configure multiple servers "[steam.name]" or "[steam.name2]" +#In this example we use [steam.gamechat] +#REQUIRED + +[steam.gamechat] +#login/pass of your bot. +#Use a dedicated user for this and not your own account! +#REQUIRED +Login="yourlogin" +Password="yourpass" + +#steamguard mail authcode (not the 2FA code) +#OPTIONAL +Authcode="ABCE12" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Whether to prefix messages from other bridges to matrix with the sender's nick. +#Useful if username overrides for incoming webhooks isn't enabled on the +#matrix server. If you set PrefixMessagesWithNick to true, each message +#from bridge to matrix will by default be prefixed by the RemoteNickFormat setting. i +#OPTIONAL (default false) +PrefixMessagesWithNick=false + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="spammer1 spammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + + + +################################################################### +# +# WhatsApp +# +################################################################### + +[whatsapp.bridge] + +# Number you will use as a relay bot. Tip: Get some disposable sim card, don't rely on your own number. +Number="+48111222333" + +# First time that you login you will need to scan QR code, then credentials willl be saved in a session file +# If you won't set SessionFile then you will need to scan QR code on every restart +# optional (by default the session is stored only in memory, till restarting matterbridge) +SessionFile="session-48111222333.gob" + +# If your terminal is white we need to invert QR code in order for it to be scanned properly +# optional (default false) +QrOnWhiteTerminal=true + +# Messages will be seen by other WhatsApp contacts as coming from the bridge. Original nick will be part of the message. +RemoteNickFormat="@{NICK}: " + +# extra label that can be used in the RemoteNickFormat +# optional (default empty) +Label="Organization" + + + +################################################################### +# +# zulip +# +################################################################### + +[zulip] + +#You can configure multiple servers "[zulip.name]" or "[zulip.name2]" +#In this example we use [zulip.streamchat] +#REQUIRED + +[zulip.streamchat] +#Token to connect with zulip API (called bot API key in Settings - Your bots) +#REQUIRED +Token="Yourtokenhere" + +#Username of the bot, normally called yourbot-bot@yourserver.zulipchat.com +#See username in Settings - Your bots +#REQUIRED +Login="yourbot-bot@yourserver.zulipchat.com" + +#Servername of your zulip instance +#REQUIRED +Server="https://yourserver.zulipchat.com" + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#Nicks you want to ignore. +#Regular expressions supported +#Messages from those users will not be sent to other bridges. +#OPTIONAL +IgnoreNicks="spammer1 spammer2" + +#Messages you want to ignore. +#Messages matching these regexp will be ignored and not sent to other bridges +#See https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword +IgnoreMessages="^~~ badword" + +#messages you want to replace. +#it replaces outgoing messages from the bridge. +#so you need to place it by the sending bridge definition. +#regular expressions supported +#some examples: +#this replaces cat => dog and sleep => awake +#replacemessages=[ ["cat","dog"], ["sleep","awake"] ] +#this replaces every number with number. 123 => numbernumbernumber +#replacemessages=[ ["[0-9]","number"] ] +#optional (default empty) +ReplaceMessages=[ ["cat","dog"] ] + +#nicks you want to replace. +#see replacemessages for syntaxa +#optional (default empty) +ReplaceNicks=[ ["user--","user"] ] + +#Extractnicks is used to for example rewrite messages from other relaybots +#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466 +#some examples: +#this replaces a message like "Relaybot: something interesting" to "relayeduser: something interesting" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ] +#you can use multiple entries for multiplebots +#this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else" +#ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ] +#OPTIONAL (default empty) +ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ] + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#Enable to show users joins/parts from other bridges +#Currently works for messages from the following bridges: irc, mattermost, slack, discord +#OPTIONAL (default false) +ShowJoinPart=false + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + +#Enable to show topic changes from other bridges +#Only works hiding/show topic changes from slack bridge for now +#OPTIONAL (default false) +ShowTopicChange=false + +################################################################### +#API +################################################################### +[api] +#You can configure multiple API hooks +#In this example we use [api.local] +#REQUIRED + +[api.local] +#Address to listen on for API +#REQUIRED +BindAddress="127.0.0.1:4242" + +#Amount of messages to keep in memory +#OPTIONAL (library default 10) +Buffer=1000 + +#Bearer token used for authentication +#curl -H "Authorization: Bearer token" http://localhost:4242/api/messages +#OPTIONAL (no authorization if token is empty) +Token="mytoken" + +#extra label that can be used in the RemoteNickFormat +#optional (default empty) +Label="" + +#RemoteNickFormat defines how remote users appear on this bridge +#See [general] config section for default options +RemoteNickFormat="{NICK}" + + + +################################################################### +#General configuration +################################################################### +# Settings here are defaults that each protocol can override +[general] + +## RELOADABLE SETTINGS +## Settings below can be reloaded by editing the file + +#RemoteNickFormat defines how remote users appear on this bridge +#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. +#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge +#The string "{LABEL}" (case sensitive) will be replaced by label= field of the sending bridge +#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge +#The string "{GATEWAY}" (case sensitive) will be replaced by the origin gateway name that is replicating the message. +#The string "{CHANNEL}" (case sensitive) will be replaced by the origin channel name used by the bridge +#The string "{TENGO}" (case sensitive) will be replaced by the output of the RemoteNickFormat script under [tengo] +#OPTIONAL (default empty) +RemoteNickFormat="[{PROTOCOL}] <{NICK}> " + +#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 +#It will strip other characters from the nick +#OPTIONAL (default false) +StripNick=false + + +#MediaServerUpload (or MediaDownloadPath) and MediaServerDownload are used for uploading +#images/files/video to a remote "mediaserver" (a webserver like caddy for example). +#When configured images/files uploaded on bridges like mattermost, slack, telegram will be +#downloaded and uploaded again to MediaServerUpload URL +#MediaDownloadPath is the filesystem path where the media file will be placed, instead of uploaded, +#for if Matterbridge has write access to the directory your webserver is serving. +#It is an alternative to MediaServerUpload. +#The MediaServerDownload will be used so that bridges without native uploading support: +#gitter, irc and xmpp will be shown links to the files on MediaServerDownload +# +#More information https://github.com/42wim/matterbridge/wiki/Mediaserver-setup-%5Badvanced%5D +#OPTIONAL (default empty) +MediaServerUpload="https://user:pass@yourserver.com/upload" +#OPTIONAL (default empty) +MediaDownloadPath="/srv/http/yourserver.com/public/download" +#OPTIONAL (default empty) +MediaServerDownload="https://youserver.com/download" + +#MediaDownloadSize is the maximum size of attachments, videos, images +#matterbridge will download and upload this file to bridges that also support uploading files. +#eg downloading from slack to upload it to mattermost +# +#It will only download from bridges that don't have public links available, which are for the moment +#slack, telegram, matrix and mattermost +# +#OPTIONAL (default 1000000 (1 megabyte)) +MediaDownloadSize=1000000 + +#MediaDownloadBlacklist allows you to blacklist specific files from being downloaded. +#Filenames matching these regexp will not be download/uploaded to the mediaserver +#You can use regex for this, see https://regex-golang.appspot.com/assets/html/index.html for more regex info +#OPTIONAL (default empty) +MediaDownloadBlacklist=[".html$",".htm$"] + +#IgnoreFailureOnStart allows you to ignore failing bridges on startup. +#Matterbridge will disable the failed bridge and continue with the other ones. +#Context: https://github.com/42wim/matterbridge/issues/455 +#OPTIONAL (default false) +IgnoreFailureOnStart=false + +################################################################### +#Tengo configuration +################################################################### +#More information about tengo on: https://github.com/d5/tengo/blob/master/docs/tutorial.md and +#https://github.com/d5/tengo/blob/master/docs/stdlib.md + +[tengo] +#InMessage allows you to specify the location of a tengo (https://github.com/d5/tengo/) script. +#This script will receive every incoming message and can be used to modify the Username and the Text of that message. +#The script will have the following global variables: +#to modify: msgUsername and msgText +#to read: msgChannel and msgAccount +# +#The script is reloaded on every message, so you can modify the script on the fly. +# +#Example script can be found in https://github.com/42wim/matterbridge/tree/master/gateway/bench.tengo +#and https://github.com/42wim/matterbridge/tree/master/contrib/example.tengo +# +#The example below will check if the text contains blah and if so, it'll replace the text and the username of that message. +#text := import("text") +#if text.re_match("blah",msgText) { +# msgText="replaced by this" +# msgUsername="fakeuser" +#} +#OPTIONAL (default empty) +InMessage="example.tengo" + +#OutMessage allows you to specify the location of the script that +#will be invoked on each message being sent to a bridge and can be used to modify the Username +#and the Text of that message. +# +#The script will have the following global variables: +#read-only: +#inAccount, inProtocol, inChannel, inGateway, inEvent +#outAccount, outProtocol, outChannel, outGateway, outEvent +# +#read-write: +#msgText, msgUsername +# +#The script is reloaded on every message, so you can modify the script on the fly. +# +#The default script in https://github.com/42wim/matterbridge/tree/master/internal/tengo/outmessage.tengo +#is compiled in and will be executed if no script is specified. +#OPTIONAL (default empty) +OutMessage="example.tengo" + + +#RemoteNickFormat allows you to specify the location of a tengo (https://github.com/d5/tengo/) script. +#The script will have the following global variables: +#to modify: result +#to read: channel, bridge, gateway, protocol, nick +# +#The result will be set in {TENGO} in the RemoteNickFormat key of every bridge where {TENGO} is specified +# +#The script is reloaded on every message, so you can modify the script on the fly. +# +#Example script can be found in https://github.com/42wim/matterbridge/tree/master/contrib/remotenickformat.tengo +# +#OPTIONAL (default empty) +RemoteNickFormat="remotenickformat.tengo" + +################################################################### +#Gateway configuration +################################################################### + +#You can specify multiple gateways using [[gateway]] +#Each gateway has a [[gateway.in]] and a [[gateway.out]] +#[[gateway.in]] specifies the account and channels we will receive messages from. +#[[gateway.out]] specifies the account and channels we will send the messages +#from [[gateway.in]] to. +# +#Most of the time [[gateway.in]] and [[gateway.out]] are the same if you +#want bidirectional bridging. You can then use [[gateway.inout]] +# + +[[gateway]] +#REQUIRED and UNIQUE +name="gateway1" +#Enable enables this gateway +##OPTIONAL (default false) +enable=true + + # [[gateway.in]] specifies the account and channels we will receive messages from. + # The following example bridges between mattermost and irc + [[gateway.in]] + + # account specified above + # REQUIRED + account="irc.freenode" + + # channel to connect on that account + # How to specify them for the different bridges: + # + # irc - #channel (# is required) (this needs to be lowercase!) + # mattermost - channel (the channel name as seen in the URL, not the displayname) + # gitter - username/room + # xmpp - channel + # slack - channel (without the #) + # - ID:C123456 (where C123456 is the channel ID) does not work with webhook + # discord - channel (without the #) + # - ID:123456789 (where 123456789 is the channel ID) + # (https://github.com/42wim/matterbridge/issues/57) + # - category/channel (without the #) if you're using discord categories to group your channels + # telegram - chatid (a large negative number, eg -123456789) + # see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau) + # hipchat - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel) + # rocketchat - #channel (# is required (also needed for private channels!) + # matrix - #channel:server (eg #yourchannel:matrix.org) + # - encrypted rooms are not supported in matrix + # steam - chatid (a large number). + # The number in the URL when you click "enter chat room" in the browser + # whatsapp - 48111222333-123455678999@g.us A unique group JID; + # if you specify an empty string bridge will list all the possibilities + # - "Group Name" if you specify a group name the bridge will hint its JID to specify + # as group names might change in time and contain weird emoticons + # zulip - stream/topic:topicname (without the #) + # + # REQUIRED + channel="#testing" + + #OPTIONAL - only used for IRC and XMPP protocols at the moment + [gateway.in.options] + #OPTIONAL - your irc / xmpp channel key + key="yourkey" + + + #[[gateway.out]] specifies the account and channels we will sent messages to. + [[gateway.out]] + account="irc.freenode" + channel="#testing" + + #OPTIONAL - only used for IRC and XMPP protocols at the moment + [gateway.out.options] + #OPTIONAL - your irc / xmpp channel key + key="yourkey" + + #[[gateway.inout]] can be used when then channel will be used to receive from + #and send messages to + [[gateway.inout]] + account="mattermost.work" + channel="off-topic" + + #OPTIONAL - only used for IRC and XMPP protocols at the moment + [gateway.inout.options] + #OPTIONAL - your irc / xmpp channel key + key="yourkey" + + [[gateway.inout]] + account="discord.game" + channel="mygreatgame" + + #OPTIONAL - webhookurl only works for discord (it needs a different URL for each cahnnel) + [gateway.inout.options] + webhookurl="https://discordapp.com/api/webhooks/123456789123456789/C9WPqExYWONPDZabcdef-def1434FGFjstasJX9pYht73y" + + [[gateway.inout]] + account="zulip.streamchat" + channel="general/topic:mytopic" + + #API example + #[[gateway.inout]] + #account="api.local" + #channel="api" + #To send data to the api: + #curl -XPOST -H 'Content-Type: application/json' -d '{"text":"test","username":"randomuser","gateway":"gateway1"}' http://localhost:4242/api/message + #To read from the api: + #curl http://localhost:4242/api/messages + +#If you want to do a 1:1 mapping between protocols where the channelnames are the same +#e.g. slack and mattermost you can use the samechannelgateway configuration +#the example configuration below send messages from channel testing on mattermost to +#channel testing on slack and vice versa. (and for the channel testing2 and testing3) + +[[samechannelgateway]] + name="samechannel1" + enable = false + accounts = [ "mattermost.work","slack.hobby" ] + channels = [ "testing","testing2","testing3"] \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf new file mode 100644 index 0000000..c42e7ea --- /dev/null +++ b/conf/nginx.conf @@ -0,0 +1,11 @@ +root __FINALPATH__/; +index index.php; + +location ~ \.php$ { + try_files $uri =404; + fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include /etc/nginx/fastcgi_params; + +} \ No newline at end of file diff --git a/conf/systemd.service b/conf/systemd.service new file mode 100644 index 0000000..d0c7120 --- /dev/null +++ b/conf/systemd.service @@ -0,0 +1,16 @@ +[Unit] +Description=Multi-protocols bridge for online communications +After=network.target + +[Service] +WorkingDirectory=__PATH__ +User=matterbridge +Group=users +Type=simple +UMask=000 +ExecStart=/opt/matterbridge/matterbridge -conf /opt/matterbridge/matterbridge.toml +RestartSec=30 +Restart=always + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..01f8af7 --- /dev/null +++ b/manifest.json @@ -0,0 +1,58 @@ +{ + "name": "matterbridge", + "id": "matterbridge", + "packaging_format": 1, + "description": { + "en": "matterbridge package for YunoHost.", + "fr": "matterbridge pour YunoHost." + }, + "version": "1.16.0", + "url": "https://github.com/42wim/matterbridge", + "license": "GPL-3.0", + "maintainer": { + "name": "liberodark", + "email": "liberodark@gmail.com" + }, + "requirements": { + "yunohost": ">= 2.7.2" + }, + "multi_instance": false, + "services": [ + "nginx", + "php5-fpm", + "mysql" + ], + "arguments": { + "install": [{ + "name": "domain", + "type": "domain", + "ask": { + "en": "Choose a domain name for matterbridge", + "fr": "Choisissez un nom de domaine pour matterbridge" + }, + "example": "example.com" + }, + + { + "name": "path", + "type": "path", + "ask": { + "en": "Choose a path for matterbridge /matterbridge is accepted", + "fr": "Choisissez un chemin pour matterbridge /matterbridge est accepté" + }, + "example": "/matterbridge", + "default": "/matterbridge" + }, + + { + "name": "is_public", + "type": "boolean", + "ask": { + "en": "Is it a public site ?", + "fr": "Est-ce un site public ?" + }, + "default": "true" + } + ] + } +} diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..0f53f77 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# ============================================================================= +# YUNOHOST 2.7 FORTHCOMING HELPERS +# ============================================================================= + +# Create a dedicated nginx config +# +# usage: ynh_add_nginx_config +ynh_add_nginx_config () { + finalnginxconf="/etc/nginx/conf.d/$domain.d/$app.conf" + ynh_backup_if_checksum_is_different "$finalnginxconf" + sudo cp ../conf/nginx.conf "$finalnginxconf" + + # To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable. + # Substitute in a nginx config file only if the variable is not empty + if test -n "${path_url:-}"; then + ynh_replace_string "__PATH__" "$path_url" "$finalnginxconf" + fi + if test -n "${domain:-}"; then + ynh_replace_string "__DOMAIN__" "$domain" "$finalnginxconf" + fi + if test -n "${port:-}"; then + ynh_replace_string "__PORT__" "$port" "$finalnginxconf" + fi + if test -n "${app:-}"; then + ynh_replace_string "__NAME__" "$app" "$finalnginxconf" + fi + if test -n "${final_path:-}"; then + ynh_replace_string "__FINALPATH__" "$final_path" "$finalnginxconf" + fi + ynh_store_file_checksum "$finalnginxconf" + + sudo systemctl reload nginx +} + +# Remove the dedicated nginx config +# +# usage: ynh_remove_nginx_config +ynh_remove_nginx_config () { + ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf" + sudo systemctl reload nginx +} + +# Create a dedicated php-fpm config +# +# usage: ynh_add_fpm_config +ynh_add_fpm_config () { + finalphpconf="/etc/php5/fpm/pool.d/$app.conf" + ynh_backup_if_checksum_is_different "$finalphpconf" + sudo cp ../conf/php-fpm.conf "$finalphpconf" + ynh_replace_string "__NAMETOCHANGE__" "$app" "$finalphpconf" + ynh_replace_string "__FINALPATH__" "$final_path" "$finalphpconf" + ynh_replace_string "__USER__" "$app" "$finalphpconf" + sudo chown root: "$finalphpconf" + ynh_store_file_checksum "$finalphpconf" + + if [ -e "../conf/php-fpm.ini" ] + then + finalphpini="/etc/php5/fpm/conf.d/20-$app.ini" + ynh_backup_if_checksum_is_different "$finalphpini" + sudo cp ../conf/php-fpm.ini "$finalphpini" + sudo chown root: "$finalphpini" + ynh_store_file_checksum "$finalphpini" + fi + + sudo systemctl reload php5-fpm +} + +# Remove the dedicated php-fpm config +# +# usage: ynh_remove_fpm_config +ynh_remove_fpm_config () { + ynh_secure_remove "/etc/php5/fpm/pool.d/$app.conf" + ynh_secure_remove "/etc/php5/fpm/conf.d/20-$app.ini" 2>&1 + sudo systemctl reload php5-fpm +} + +# Create a dedicated systemd config +# +# usage: ynh_add_systemd_config +ynh_add_systemd_config () { + finalsystemdconf="/etc/systemd/system/$app.service" + ynh_backup_if_checksum_is_different "$finalsystemdconf" + sudo cp ../conf/systemd.service "$finalsystemdconf" + + # To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable. + # Substitute in a nginx config file only if the variable is not empty + if test -n "${final_path:-}"; then + ynh_replace_string "__FINALPATH__" "$final_path" "$finalsystemdconf" + fi + if test -n "${app:-}"; then + ynh_replace_string "__APP__" "$app" "$finalsystemdconf" + fi + ynh_store_file_checksum "$finalsystemdconf" + + sudo chown root: "$finalsystemdconf" + sudo systemctl enable $app + sudo systemctl daemon-reload +} + +# Remove the dedicated systemd config +# +# usage: ynh_remove_systemd_config +ynh_remove_systemd_config () { + finalsystemdconf="/etc/systemd/system/$app.service" + if [ -e "$finalsystemdconf" ]; then + sudo systemctl stop $app + sudo systemctl disable $app + ynh_secure_remove "$finalsystemdconf" + fi +} diff --git a/scripts/backup b/scripts/backup new file mode 100644 index 0000000..af8ccd9 --- /dev/null +++ b/scripts/backup @@ -0,0 +1,33 @@ +#!/bin/bash + +# Exit on command errors and treat unset variables as an error +set -eu + +# See comments in install script +app=$YNH_APP_INSTANCE_NAME + +# Source YunoHost helpers +source /usr/share/yunohost/helpers + +# Backup sources & data +# Note: the last argument is where to save this path, see the restore script. +ynh_backup "/var/www/${app}" "sources" + +### MySQL (remove if not used) ### +# If a MySQL database is used: +# # Dump the database +# dbname=$app +# dbuser=$app +# dbpass=$(ynh_app_setting_get "$app" mysqlpwd) +# mysqldump -u "$dbuser" -p"$dbpass" --no-create-db "$dbname" > ./dump.sql +### MySQL end ### + +# Copy NGINX configuration +domain=$(ynh_app_setting_get "$app" domain) +ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" "nginx.conf" + +### PHP (remove if not used) ### +# If a dedicated php-fpm process is used: +# # Copy PHP-FPM pool configuration +# ynh_backup "/etc/php5/fpm/pool.d/${app}.conf" "php-fpm.conf" +### PHP end ### diff --git a/scripts/install b/scripts/install new file mode 100644 index 0000000..ea7067b --- /dev/null +++ b/scripts/install @@ -0,0 +1,160 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + ### Remove this function if there's nothing to clean before calling the remove script. + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + +# Retrieve arguments +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +is_public=$YNH_APP_ARG_IS_PUBLIC + +### If it's a multi-instance app, meaning it can be installed several times independently +### The id of the app as stated in the manifest is available as $YNH_APP_ID +### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) +### The app instance name is available as $YNH_APP_INSTANCE_NAME +### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample +### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 +### - ynhexample__{N} for the subsequent installations, with N=3,4, ... +### The app instance name is probably what interests you most, since this is +### guaranteed to be unique. This is a good unique identifier to define installation path, +### db names, ... +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= + +### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". +### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" +final_path=/opt/$app +test ! -e "$final_path" || ynh_die "This path already contains a folder" + +# Normalize the url path syntax +path_url=$(ynh_normalize_url_path $path_url) + +# Check web path availability +ynh_webpath_available $domain $path_url +# Register (book) web path +ynh_webpath_register $app $domain $path_url + +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= + +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url +ynh_app_setting_set $app is_public $is_public + + +#================================================= +# INSTALL DEPENDENCIES +#================================================= + +ynh_print_info "Installing dependencies..." + +### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. +### Those deb packages will be installed as dependencies of this package. +### If you're not using this helper: +### - Remove the section "REMOVE DEPENDENCIES" in the remove script +### - As well as the section "REINSTALL DEPENDENCIES" in the restore script +### - And the section "UPGRADE DEPENDENCIES" in the upgrade script + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +ynh_app_setting_set $app final_path $final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= + +# Create a dedicated nginx config +#ynh_add_nginx_config + +#================================================= +# CREATE DEDICATED USER +#================================================= + +# Create a system user +ynh_system_user_create $app + +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +cp -a ../conf/matterbridge.toml $final_path/matterbridge.toml + +#ynh_replace_string "yunouser" "$db_name" "$final_path/config/config_inc.php.sample" +#ynh_replace_string "yunopass" "$db_pwd" "$final_path/config/config_inc.php.sample" +#ynh_replace_string "yunobase" "$db_name" "$final_path/config/config_inc.php.sample" + +#================================================= +# SETUP SYSTEMD +#================================================= + +ynh_add_systemd_config +systemctl enable $app.service + +#================================================= +# STORE THE CONFIG FILE CHECKSUM +#================================================= + +### `ynh_store_file_checksum` is used to store the checksum of a file. +### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, +### you can make a backup of this file before modifying it again if the admin had modified it. + +# Calculate and store the config file checksum into the app settings +#ynh_store_file_checksum "/etc/onlyoffice/documentserver/nginx/onlyoffice-documentserver.conf" + + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +### For security reason, any app should set the permissions to root: before anything else. +### Then, if write authorization is needed, any access should be given only to directories +### that really need such authorization. + +# Set permissions to app files +chown -R $app: $final_path + + +#================================================= +# SETUP SSOWAT +#================================================= + +# If app is public, add url to SSOWat conf as skipped_uris +if [ $is_public -eq 1 ]; then + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set "$app" unprotected_uris "/" +fi + +# Reload services +#systemctl reload nginx +systemctl restart $app diff --git a/scripts/remove b/scripts/remove new file mode 100644 index 0000000..b87380c --- /dev/null +++ b/scripts/remove @@ -0,0 +1,133 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info "Loading installation settings..." + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get $app domain) +port=$(ynh_app_setting_get $app port) +db_name=$(ynh_app_setting_get $app db_name) +db_user=$db_name +final_path=$(ynh_app_setting_get $app final_path) + +#================================================= +# STANDARD REMOVE +#================================================= +# REMOVE SERVICE FROM ADMIN PANEL +#================================================= + +# Remove a service from the admin panel, added by `yunohost service add` +if yunohost service status $app >/dev/null 2>&1 +then + ynh_print_info "Removing $app service" + yunohost service remove $app +fi + +#================================================= +# STOP AND REMOVE SERVICE +#================================================= +ynh_print_info "Stopping and removing the systemd service" + +# Remove the dedicated systemd config +ynh_remove_systemd_config + +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= +ynh_print_info "Removing the MySQL database" + +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db $db_user $db_name + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_print_info "Removing dependencies" + +# Remove metapackage and its dependencies +ynh_remove_app_dependencies + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_print_info "Removing app main directory" + +# Remove the app directory securely +ynh_secure_remove "$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_print_info "Removing nginx web server configuration" + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +#ynh_print_info "Removing php-fpm configuration" + +# Remove the dedicated php-fpm config +#ynh_remove_fpm_config + +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_print_info "Removing logrotate configuration" + +# Remove the app-specific logrotate config +ynh_remove_logrotate + +#================================================= +# CLOSE A PORT +#================================================= + +if yunohost firewall list | grep -q "\- $port$" +then + ynh_print_info "Closing port $port" + ynh_exec_warn_less yunohost firewall disallow TCP $port +fi + +#================================================= +# SPECIFIC REMOVE +#================================================= +# REMOVE THE CRON FILE +#================================================= + +# Remove a cron file +ynh_secure_remove "/etc/cron.d/$app" + +# Remove a directory securely +ynh_secure_remove "/etc/$app/" + +# Remove the log files +ynh_secure_remove "/var/log/$app/" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_print_info "Removing the dedicated system user" + +# Delete a system user +ynh_system_user_delete $app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Removal of $app completed" diff --git a/scripts/restore b/scripts/restore new file mode 100644 index 0000000..93169e9 --- /dev/null +++ b/scripts/restore @@ -0,0 +1,52 @@ +#!/bin/bash + +# Note: each files and directories you've saved using the ynh_backup helper +# will be located in the current directory, regarding the last argument. + +# Exit on command errors and treat unset variables as an error +set -eu + +# See comments in install script +app=$YNH_APP_INSTANCE_NAME + +# Source YunoHost helpers +source /usr/share/yunohost/helpers + +# Retrieve old app settings +domain=$(ynh_app_setting_get "$app" domain) +path_url=$(ynh_app_setting_get "$app" path_url) + +# Check domain/path availability +sudo yunohost app checkurl "${domain}${path_url}" -a "$app" \ + || ynh_die "Path not available: ${domain}${path_url}" + +# Restore sources & data +src_path="/var/www/${app}" +sudo cp -a ./sources "$src_path" + +# Restore permissions to app files +# you may need to make some file and/or directory writeable by www-data (nginx user) +sudo chown -R root: "$src_path" + +### MySQL (remove if not used) ### +# If a MySQL database is used: +# # Create and restore the database +# dbname=$app +# dbuser=$app +# dbpass=$(ynh_app_setting_get "$app" mysqlpwd) +# ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" +# ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ./dump.sql +### MySQL end ### + +# Restore NGINX configuration +sudo cp -a ./nginx.conf "/etc/nginx/conf.d/${domain}.d/${app}.conf" + +### PHP (remove if not used) ### +# If a dedicated php-fpm process is used: +# # Copy PHP-FPM pool configuration and reload the service +# sudo cp -a ./php-fpm.conf "/etc/php5/fpm/pool.d/${app}.conf" +# sudo service php5-fpm reload +### PHP end ### + +# Restart webserver +sudo service nginx reload diff --git a/scripts/upgrade b/scripts/upgrade new file mode 100644 index 0000000..3ad3f7a --- /dev/null +++ b/scripts/upgrade @@ -0,0 +1,56 @@ +#!/bin/bash + +# Exit on command errors and treat unset variables as an error +set -eu + +# See comments in install script +app=$YNH_APP_INSTANCE_NAME +final_path=/opt/yunohost/$app + +# Source YunoHost helpers +source /usr/share/yunohost/helpers + +# Stop emby-server service +systemctl stop emby-server + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +ynh_app_setting_set $app final_path $final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" + +#============================================== +# INSTALL PLEX +#============================================== + +dpkg --install $final_path/emby-server-deb* + +#================================================= +# NGINX CONFIGURATION +#================================================= + +# Create a dedicated nginx config +#ynh_add_nginx_config + + +#================================================= +# UPGRADE CONFIG +#================================================= +#cp -a ../conf/loolwsd.xml /etc/loolwsd +#ynh_replace_string "__NEXTCLOUDDOMAIN__" "$nextcloud_domain" "/etc/loolwsd/loolwsd.xml" +#ynh_replace_string "__PASSWORD__" "$password" "/etc/loolwsd/loolwsd.xml" +#systemctl restart loolwsd + + + +# If app is public, add url to SSOWat conf as skipped_uris +#if [[ $is_public -eq 1 ]]; then + # See install script +# ynh_app_setting_set "$app" unprotected_uris "/" +#fi + +# Start emby-server service +systemctl start emby-server +