From a0377a7993688e9ffb21fe73a3a2786cdc2ba43a Mon Sep 17 00:00:00 2001
From: Christian Dresen <c.dresen@fh-muenster.de>
Date: Tue, 11 Oct 2016 22:09:55 +0200
Subject: [PATCH] [WarpInfra] Added Mattermost incomming Webhook

---
 www/Dockerfile               |  1 +
 www/conf/config.example.ini  |  3 +++
 www/web/warpfood/views.py    |  5 ++++-
 www/web/warpzone/settings.py | 21 +++++++++++++++++++++
 www/web/warpzone/util.py     | 15 +++++++++++++++
 5 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/www/Dockerfile b/www/Dockerfile
index 4a487dd..931f8d8 100644
--- a/www/Dockerfile
+++ b/www/Dockerfile
@@ -30,6 +30,7 @@ RUN pip3 install \
     ldap3 \
     uwsgi \
     django-two-factor-auth \
+    matterhook \
     --upgrade
 
 RUN pip3 install git+https://github.com/nkunihiko/django-bootstrap3-datetimepicker.git
diff --git a/www/conf/config.example.ini b/www/conf/config.example.ini
index cf6b569..48e8fad 100644
--- a/www/conf/config.example.ini
+++ b/www/conf/config.example.ini
@@ -5,6 +5,9 @@ DEBUG = true
 SECRET_KEY = '4m4c(_$ubwued9p-insp!950g&r0yu851bp287$2a3ydj^y=0='
 PW_RESET_TOKEN_LIFETIME = 5
 
+[mattermost]
+API_KEY = bohtwe6zy7y43p5n36skph7ejy
+
 [ldap]
 LDAP_HOST = ldap
 LDAP_BIND_DN = cn=admin,dc=warpzone,dc=ms
diff --git a/www/web/warpfood/views.py b/www/web/warpfood/views.py
index 890692d..7d6dadf 100644
--- a/www/web/warpfood/views.py
+++ b/www/web/warpfood/views.py
@@ -3,6 +3,8 @@ from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAll
 from django.shortcuts import redirect
 from django.contrib.auth.decorators import login_required
 from warpfood.util import *
+from warpzone.util import send_to_mattermost
+from django.utils.translation import ugettext as _
 from warpfood.models import *
 from reportlab.pdfgen import canvas
 from django.http import HttpResponse
@@ -21,7 +23,8 @@ def index(request):
         if request.method == 'POST':
             form = FoodSheetForm(request.POST)
             if form.is_valid():
-                form.save()
+                sheet = form.save()
+                send_to_mattermost("PizzaSheet", "town-square",  _("pizza_sheet_opened_for_%(est_order_time)s_at_%(pizza_service)s") % ({'est_order_time': sheet.estimated_order_time, 'pizza_service':sheet.food_service}))
 
     time_threshold = datetime.now() - timedelta(days=1)
     FoodSheet.objects.filter(order_time__lte=time_threshold).delete()
diff --git a/www/web/warpzone/settings.py b/www/web/warpzone/settings.py
index f22beb6..78d88d7 100644
--- a/www/web/warpzone/settings.py
+++ b/www/web/warpzone/settings.py
@@ -39,6 +39,9 @@ EMAIL_SUBJECT_PREFIX = config.get('email','SUBJECT_PREFIX')
 PW_RESET_TOKEN_LIFETIME = config.get('security','PW_RESET_TOKEN_LIFETIME')
 SECRET_KEY = config.get('security','SECRET_KEY')
 
+# MATTERMOST
+API_KEY = config.get('mattermost','API_KEY')
+
 # DEBUG
 DEBUG = config.getboolean('debug','DEBUG')
 
@@ -185,6 +188,24 @@ AUTH_LDAP_FIND_GROUP_PERMS = True
 AUTH_LDAP_CACHE_GROUPS = True
 AUTH_LDAP_GROUP_CACHE_TIMEOUT = 10
 
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'file': {
+            'level': 'ERROR',
+            'class': 'logging.FileHandler',
+            'filename': '/opt/log/error.log',
+        },
+    },
+    'loggers': {
+        'django': {
+            'handlers': ['file'],
+            'level': 'ERROR',
+            'propagate': True,
+        },
+    },
+}
 logger = logging.getLogger('django_auth_ldap')
 logger.addHandler(logging.StreamHandler())
 hdlr = logging.FileHandler('/tmp/ldap.log')
diff --git a/www/web/warpzone/util.py b/www/web/warpzone/util.py
index f56b797..ee10da2 100644
--- a/www/web/warpzone/util.py
+++ b/www/web/warpzone/util.py
@@ -1,12 +1,27 @@
 from django.core.mail import send_mail
 from django.conf import settings
 from django.utils.translation import ugettext as _
+from matterhook import Webhook
+import logging
 
 page_context = {'pages': [
     {"link": "pizza", "name": _("pizza_sheet")},
     {"link": "about", "name": _("about")},
 ], 'debug': settings.DEBUG}
 
+
+
+def send_to_mattermost(username, channel, message):
+    try:
+        if settings.API_KEY:
+            hook = Webhook("https://mattermost.warpzone.ms", settings.API_KEY)
+            if settings.DEBUG:
+                username = "["+channel+"] "+username
+                channel = "warpinfradebug"
+            hook.send(message, channel=channel, username=username)
+    except Exception as e:
+        logging.getLogger("django").error(e)
+
 def send_email(to_address, subject, content):
     try:
         send_mail(
-- 
GitLab