From 7628941a2adde4da2ffa222672aa1564f54e5c93 Mon Sep 17 00:00:00 2001 From: Raynaldo Rivera Date: Sun, 19 Oct 2014 02:30:08 -0700 Subject: [PATCH] Added jabber broadcast, --- README.md | 2 ++ alliance_auth/settings.py | 7 +++- alliance_auth/urls.py | 1 + services/forms.py | 11 +++++++ services/managers/jabber_manager.py | 40 ++++++++++++++++++++++- services/views.py | 19 +++++++++++ templates/public/base.html | 6 ++++ templates/registered/jabberbroadcast.html | 30 +++++++++++++++++ util/__init__.py | 4 +-- 9 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 services/forms.py create mode 100644 templates/registered/jabberbroadcast.html diff --git a/README.md b/README.md index 83650030..7fddba6f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Requirments: python-passlib python-evelink python-openfire + python-xmpp + python-dnspython # Needed Apps rabbitmq diff --git a/alliance_auth/settings.py b/alliance_auth/settings.py index 9ce39b9e..9067c91f 100644 --- a/alliance_auth/settings.py +++ b/alliance_auth/settings.py @@ -157,10 +157,15 @@ ALLIANCE_ID = '0' ALLIANCE_NAME = 'Somealliance' # Jabber Prosody Info -JABBER_URL = "@someaddress.com" +JABBER_URL = "someaddress.com" +JABBER_PORT = 5223 +JABBER_SERVER = "someadddress.com" OPENFIRE_ADDRESS = "http://someaddress.com:9090/" OPENFIRE_SECRET_KEY = "somekey" +BROADCAST_USER = "broadcast@"+JABBER_URL +BROADCAST_USER_PASSWORD = "somepassword" + # Mumble settings MUMBLE_SERVER_ID = 1 diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 339fce63..9306d3d1 100644 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -49,6 +49,7 @@ urlpatterns = patterns('', # Service Urls url(r'^services/', 'services.views.services_view', name='auth_services'), + url(r'^serivces/jabber_broadcast/$', 'services.views.jabber_broadcast_view', name='auth_jabber_broadcast_view'), # Forum Service Control url(r'^activate_forum/$', 'services.views.activate_forum', name='auth_activate_forum'), diff --git a/services/forms.py b/services/forms.py new file mode 100644 index 00000000..48701969 --- /dev/null +++ b/services/forms.py @@ -0,0 +1,11 @@ +from django import forms +from django.contrib.auth.models import Group + + +class JabberBroadcastForm(forms.Form): + allchoices = [] + allchoices.append(('all', 'all')) + for group in Group.objects.all(): + allchoices.append((str(group.name), str(group.name))) + group = forms.ChoiceField(choices=allchoices, widget=forms.Select) + message = forms.CharField(widget = forms.Textarea) \ No newline at end of file diff --git a/services/managers/jabber_manager.py b/services/managers/jabber_manager.py index 13aee378..f275e9b3 100644 --- a/services/managers/jabber_manager.py +++ b/services/managers/jabber_manager.py @@ -1,9 +1,15 @@ import os +import time +import xmpp +from django.contrib.auth.models import User +from django.contrib.auth.models import Group from django.conf import settings from openfire import exception from openfire import UserService from urlparse import urlparse +from authentication.managers import AuthServicesInfoManager +from eveonline.managers import EveManager class JabberManager: @@ -77,4 +83,36 @@ class JabberManager: @staticmethod def delete_user_groups(username, groups): api = UserService(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY) - api.delete_group(username,groups) \ No newline at end of file + api.delete_group(username,groups) + + @staticmethod + def send_broadcast_message(group_name, message): + # create to address + client = xmpp.Client(settings.JABBER_URL) + client.connect(server=(settings.JABBER_SERVER, settings.JABBER_PORT)) + client.auth(settings.BROADCAST_USER, settings.BROADCAST_USER_PASSWORD, 'broadcast') + + if group_name != 'all': + group = Group.objects.get(name=group_name) + for user in group.user_set.all(): + auth_info = AuthServicesInfoManager.get_auth_service_info(user) + if auth_info: + if auth_info.jabber_username != "": + to_address = auth_info.jabber_username+'@'+settings.JABBER_URL + message = xmpp.Message(to_address, message) + message.setAttr('type', 'chat') + client.send(message) + client.Process(1) + else: + for user in User.objects.all(): + auth_info = AuthServicesInfoManager.get_auth_service_info(user) + if auth_info: + if auth_info.jabber_username != "": + to_address = auth_info.jabber_username+'@'+settings.JABBER_URL + message = xmpp.Message(to_address, message) + message.setAttr('type', 'chat') + client.send(message) + client.Process(1) + print to_address + + client.disconnect() \ No newline at end of file diff --git a/services/views.py b/services/views.py index 705eda51..2d0b92e5 100644 --- a/services/views.py +++ b/services/views.py @@ -16,6 +16,24 @@ from celerytask.tasks import update_jabber_groups from celerytask.tasks import update_mumble_groups from celerytask.tasks import update_forum_groups +from forms import JabberBroadcastForm + + +@login_required +@permission_required('auth.jabber_broadcast') +def jabber_broadcast_view(request): + success = False + if request.method == 'POST': + form = JabberBroadcastForm(request.POST) + if form.is_valid(): + JabberManager.send_broadcast_message(form.cleaned_data['group'], form.cleaned_data['message']) + success = True + else: + form = JabberBroadcastForm() + + context = {'form': form, 'success': success} + return render_to_response('registered/jabberbroadcast.html', context, context_instance=RequestContext(request)) + @login_required def services_view(request): @@ -23,6 +41,7 @@ def services_view(request): return render_to_response('registered/services.html', {'authinfo': authinfo}, context_instance=RequestContext(request)) + @login_required @permission_required('auth.alliance_member') def activate_forum(request): diff --git a/templates/public/base.html b/templates/public/base.html index 54c3ca0b..12790364 100644 --- a/templates/public/base.html +++ b/templates/public/base.html @@ -87,6 +87,12 @@ {% endif %} + {% if perms.auth.jabber_broadcast %} +
  • + Jabber Broadcast +
  • + {% endif %} + diff --git a/templates/registered/jabberbroadcast.html b/templates/registered/jabberbroadcast.html new file mode 100644 index 00000000..adf9df47 --- /dev/null +++ b/templates/registered/jabberbroadcast.html @@ -0,0 +1,30 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} + +{% block title %}Alliance Auth{% endblock %} + +{% block page_title %}Jabber Broadcast{% endblock page_title %} +{% block extra_css %}{% endblock extra_css %} + +{% block content %} +
    +

    Jabber Broadcast

    +
    +
    +
    + {% if success %} + + {% endif %} + +
    +
    +
    +
    + +{% endblock content %} diff --git a/util/__init__.py b/util/__init__.py index e18ac2cc..8c6ddeb5 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -5,8 +5,8 @@ from django.contrib.auth.models import Permission def bootstrap_permissions(): ct = ContentType.objects.get_for_model(User) - stored_permission, created = Permission.objects.get_or_create(codename="group_management", - content_type=ct, name="group_management") + Permission.objects.get_or_create(codename="group_management", content_type=ct, name="group_management") + Permission.objects.get_or_create(codename="jabber_broadcast", content_type=ct, name="jabber_broadcast") def add_member_permission(user, permission):