Added jabber broadcast,

This commit is contained in:
Raynaldo Rivera 2014-10-19 02:30:08 -07:00
parent 190947f18d
commit 7628941a2a
9 changed files with 116 additions and 4 deletions

View File

@ -17,6 +17,8 @@ Requirments:
python-passlib
python-evelink
python-openfire
python-xmpp
python-dnspython
# Needed Apps
rabbitmq

View File

@ -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

View File

@ -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'),

11
services/forms.py Normal file
View File

@ -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)

View File

@ -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)
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()

View File

@ -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):

View File

@ -87,6 +87,12 @@
</li>
{% endif %}
{% if perms.auth.jabber_broadcast %}
<li>
<a {% ifequal request.path "/serivces/jabber_broadcast/" %} class="active" {% endifequal %} href="{% url 'auth_jabber_broadcast_view' %}"><i class="fa fa-lock fa-bullhorn"></i> Jabber Broadcast</a>
</li>
{% endif %}
</ul>
</div>
<!-- /.sidebar-collapse -->

View File

@ -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 %}
<div class="col-lg-12">
<h1 class="page-header text-center">Jabber Broadcast</h1>
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
{% if success %}
<div class="alert alert-success" role="alert">Broadcast Sent!!</div>
{% endif %}
<form class="form-signin" role="form" action="" method="POST">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Broadcast</button>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -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):