|
|
|
@ -24,6 +24,7 @@
|
|
|
|
|
# THE SOFTWARE. |
|
|
|
|
|
|
|
|
|
import re |
|
|
|
|
import six |
|
|
|
|
import requests |
|
|
|
|
from json import dumps |
|
|
|
|
|
|
|
|
@ -79,7 +80,11 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
'{schema}://{host}/{authtoken}', |
|
|
|
|
'{schema}://{host}/{authtoken}:{port}', |
|
|
|
|
'{schema}://{botname}@{host}/{authtoken}', |
|
|
|
|
'{schema}://{botname}@{host}/{authtoken}:{port}', |
|
|
|
|
'{schema}://{botname}@{host}:{port}/{authtoken}', |
|
|
|
|
'{schema}://{host}/{fullpath}/{authtoken}', |
|
|
|
|
'{schema}://{host}/{fullpath}{authtoken}:{port}', |
|
|
|
|
'{schema}://{botname}@{host}/{fullpath}/{authtoken}', |
|
|
|
|
'{schema}://{botname}@{host}:{port}/{fullpath}/{authtoken}', |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# Define our template tokens |
|
|
|
@ -96,6 +101,10 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
'private': True, |
|
|
|
|
'required': True, |
|
|
|
|
}, |
|
|
|
|
'fullpath': { |
|
|
|
|
'name': _('Path'), |
|
|
|
|
'type': 'string', |
|
|
|
|
}, |
|
|
|
|
'botname': { |
|
|
|
|
'name': _('Bot Name'), |
|
|
|
|
'type': 'string', |
|
|
|
@ -126,8 +135,8 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
def __init__(self, authtoken, channels=None, include_image=False, |
|
|
|
|
**kwargs): |
|
|
|
|
def __init__(self, authtoken, fullpath=None, channels=None, |
|
|
|
|
include_image=False, **kwargs): |
|
|
|
|
""" |
|
|
|
|
Initialize MatterMost Object |
|
|
|
|
""" |
|
|
|
@ -139,6 +148,10 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
else: |
|
|
|
|
self.schema = 'http' |
|
|
|
|
|
|
|
|
|
# our full path |
|
|
|
|
self.fullpath = '' if not isinstance( |
|
|
|
|
fullpath, six.string_types) else fullpath.strip() |
|
|
|
|
|
|
|
|
|
# Our Authorization Token |
|
|
|
|
self.authtoken = authtoken |
|
|
|
|
|
|
|
|
@ -204,8 +217,9 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
if channel: |
|
|
|
|
payload['channel'] = channel |
|
|
|
|
|
|
|
|
|
url = '%s://%s:%d' % (self.schema, self.host, self.port) |
|
|
|
|
url += '/hooks/%s' % self.authtoken |
|
|
|
|
url = '{}://{}:{}{}/hooks/{}'.format( |
|
|
|
|
self.schema, self.host, self.port, self.fullpath, |
|
|
|
|
self.authtoken) |
|
|
|
|
|
|
|
|
|
self.logger.debug('MatterMost POST URL: %s (cert_verify=%r)' % ( |
|
|
|
|
url, self.verify_certificate, |
|
|
|
@ -288,14 +302,17 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
default_port = 443 if self.secure else self.default_port |
|
|
|
|
default_schema = self.secure_protocol if self.secure else self.protocol |
|
|
|
|
|
|
|
|
|
return '{schema}://{hostname}{port}/{authtoken}/?{args}'.format( |
|
|
|
|
schema=default_schema, |
|
|
|
|
hostname=NotifyMatterMost.quote(self.host, safe=''), |
|
|
|
|
port='' if not self.port or self.port == default_port |
|
|
|
|
else ':{}'.format(self.port), |
|
|
|
|
authtoken=NotifyMatterMost.quote(self.authtoken, safe=''), |
|
|
|
|
args=NotifyMatterMost.urlencode(args), |
|
|
|
|
) |
|
|
|
|
return \ |
|
|
|
|
'{schema}://{hostname}{port}{fullpath}{authtoken}/?{args}'.format( |
|
|
|
|
schema=default_schema, |
|
|
|
|
hostname=NotifyMatterMost.quote(self.host, safe=''), |
|
|
|
|
port='' if not self.port or self.port == default_port |
|
|
|
|
else ':{}'.format(self.port), |
|
|
|
|
fullpath='/' if not self.fullpath else '{}/'.format( |
|
|
|
|
NotifyMatterMost.quote(self.fullpath, safe='/')), |
|
|
|
|
authtoken=NotifyMatterMost.quote(self.authtoken, safe=''), |
|
|
|
|
args=NotifyMatterMost.urlencode(args), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def parse_url(url): |
|
|
|
@ -310,14 +327,16 @@ class NotifyMatterMost(NotifyBase):
|
|
|
|
|
# We're done early as we couldn't load the results |
|
|
|
|
return results |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
# Apply our settings now |
|
|
|
|
results['authtoken'] = \ |
|
|
|
|
NotifyMatterMost.split_path(results['fullpath'])[0] |
|
|
|
|
# Acquire our tokens; the last one will always be our authtoken |
|
|
|
|
# all entries before it will be our path |
|
|
|
|
tokens = NotifyMatterMost.split_path(results['fullpath']) |
|
|
|
|
|
|
|
|
|
# Apply our settings now |
|
|
|
|
results['authtoken'] = None if not tokens else tokens.pop() |
|
|
|
|
|
|
|
|
|
except IndexError: |
|
|
|
|
# There was no Authorization Token specified |
|
|
|
|
results['authtoken'] = None |
|
|
|
|
# Store our path |
|
|
|
|
results['fullpath'] = '' if not tokens \ |
|
|
|
|
else '/{}'.format('/'.join(tokens)) |
|
|
|
|
|
|
|
|
|
# Define our optional list of channels to notify |
|
|
|
|
results['channels'] = list() |
|
|
|
|