Added a plugin to search through a Mediawiki instance
This commit is contained in:
parent
9e139a0f3e
commit
09dd17c9f2
1
plugins/mediawiki_search/README.md
Normal file
1
plugins/mediawiki_search/README.md
Normal file
@ -0,0 +1 @@
|
||||
|
9
plugins/mediawiki_search/config.hjson.template
Normal file
9
plugins/mediawiki_search/config.hjson.template
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"htpasswd": {
|
||||
"enabled": true,
|
||||
"username": "",
|
||||
"password": ""
|
||||
},
|
||||
|
||||
"base_url": "https://"
|
||||
}
|
88
plugins/mediawiki_search/mediawiki_search.py
Normal file
88
plugins/mediawiki_search/mediawiki_search.py
Normal file
@ -0,0 +1,88 @@
|
||||
__author__ = "Dennis Potter"
|
||||
__copyright__ = "Copyright 2019, Dennis Potter"
|
||||
__credits__ = ["Dennis Potter"]
|
||||
__license__ = "GPL-3.0"
|
||||
__version__ = "0.5.0"
|
||||
__maintainer__ = "Dennis Potter"
|
||||
__email__ = "dennis@dennispotter.eu"
|
||||
|
||||
from matrix_bot_api.mregex_handler import MRegexHandler
|
||||
import os
|
||||
import re
|
||||
import hjson
|
||||
|
||||
MESSAGE_DIR = os.path.join(os.path.dirname(__file__), 'messages')
|
||||
CONFIG_LOCATION = os.path.join(os.path.dirname(__file__), 'config.hjson')
|
||||
|
||||
HELP_LOCATION = MESSAGE_DIR + '/help'
|
||||
MESSAGES_LOCATION = MESSAGE_DIR + '/messages.dutch.hjson'
|
||||
|
||||
class Plugin:
|
||||
""" This plugins searches in a Mediawiki instance. If the wiki
|
||||
is protected by an .htpasswd, this password can be returned by the
|
||||
bot, and will also be included in search queries.
|
||||
"""
|
||||
|
||||
def __init__(self, bot):
|
||||
# Load the configuration
|
||||
with open(CONFIG_LOCATION) as hjson_data:
|
||||
self.config = hjson.load(hjson_data)
|
||||
|
||||
# Load all messages for this plugin
|
||||
with open(MESSAGES_LOCATION) as hjson_data:
|
||||
self.messages = hjson.load(hjson_data)
|
||||
|
||||
# Define sensitivity
|
||||
self.handler = []
|
||||
|
||||
self.handler.append(MRegexHandler("Peter wiki search", self.search))
|
||||
|
||||
self.handler.append(MRegexHandler("Peter wiki login", self.login))
|
||||
|
||||
|
||||
# Save parent bot
|
||||
self.bot = bot
|
||||
|
||||
def search(self, room, event):
|
||||
try:
|
||||
searchMatchObj = re.match(
|
||||
r'.*wiki search (.*)',
|
||||
event['content']['body'],
|
||||
re.M|re.I)
|
||||
|
||||
if self.config['htpasswd']['enabled']:
|
||||
urlMatchObj = re.match(
|
||||
r'(http://|https://)(.*)',
|
||||
self.config['base_url'],
|
||||
re.M|re.I)
|
||||
|
||||
url = "{}{}:{}@{}/index.php?search={}".format(
|
||||
urlMatchObj.group(1), # http:// or https://
|
||||
self.config['htpasswd']['username'],
|
||||
self.config['htpasswd']['password'],
|
||||
urlMatchObj.group(2), # remainder of base url
|
||||
searchMatchObj.group(1))
|
||||
else:
|
||||
url = "{}/index.php?search={}".format(
|
||||
self.config['base_url'],
|
||||
searchMatchObj.group(1))
|
||||
|
||||
room.send_html(self.messages['search_query'].format(
|
||||
searchMatchObj.group(1),
|
||||
url))
|
||||
except AttributeError:
|
||||
room.send_html(self.messages['invalid_query'])
|
||||
|
||||
def login(self, room, event):
|
||||
if self.config['htpasswd']['enabled']:
|
||||
room.send_html(self.messages['login_message_htpasswd'].format(
|
||||
self.config['base_url'],
|
||||
self.config['base_url'],
|
||||
self.config['htpasswd']['username'],
|
||||
self.config['htpasswd']['password']))
|
||||
else:
|
||||
room.send_html(self.messages['login_message'].format(
|
||||
self.config['base_url']))
|
||||
|
||||
def help(self):
|
||||
return open(HELP_LOCATION, mode="r").read()
|
6
plugins/mediawiki_search/messages/help
Normal file
6
plugins/mediawiki_search/messages/help
Normal file
@ -0,0 +1,6 @@
|
||||
<h5><i>wiki</i></h5>
|
||||
De Alcuinus wiki page verleend algemene informatie over de vereniging en over verschillende aflopen binnen de vereniging.
|
||||
<ul>
|
||||
<li><i>search <string></i>: dit commando laat je een zoekopdracht uitvoeren in de wiki. De inloggegevens zullen al voor je ingevuld zijn. Wil je bijvoorbeeld zoeken naar het reglement? Gebruik dan dan <i>wiki search reglement</i>.</li>
|
||||
<li><i>login</i>: dit commando resulteert in de link naar de interne wiki en de inloggegevens.</li>
|
||||
</ul>
|
26
plugins/mediawiki_search/messages/messages.dutch.hjson
Normal file
26
plugins/mediawiki_search/messages/messages.dutch.hjson
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"login_message_htpasswd":
|
||||
'''
|
||||
De interne wiki bevindt zich op <a href="{}">{}</a> en is van de
|
||||
buitenwereld afgeschermd met een wachtwoord. Je kunt inloggen op
|
||||
de wiki met de gebruikersnaam <strong>{}</strong> en het
|
||||
wachtwoord <strong>{}</strong>.
|
||||
'''
|
||||
|
||||
"login_message":
|
||||
'''
|
||||
De interne wiki bevindt zich op <a href="{}">{}</a>.
|
||||
'''
|
||||
|
||||
"search_query":
|
||||
'''
|
||||
Je kunt de resultaten voor je zoekopdracht "{}" <a href="{}">onder
|
||||
deze link bekijken</a>!
|
||||
'''
|
||||
|
||||
"invalid_query":
|
||||
'''
|
||||
Je hebt geen geldige zoekopdracht gedefinieerd. Probeer het nog een
|
||||
keer 🤷♂️.
|
||||
'''
|
||||
}
|
0
plugins/mediawiki_search/requirements.txt
Normal file
0
plugins/mediawiki_search/requirements.txt
Normal file
Loading…
Reference in New Issue
Block a user