From 8e8fb6237e335d899687c366610fce445a8f0fc8 Mon Sep 17 00:00:00 2001 From: Michael Ziegler Date: Sun, 28 Feb 2010 20:07:10 +0100 Subject: [PATCH] implement basic kicking of users. todo: banning/moving. see #81 --- pyweb/mumble/MumbleCtlIce.py | 12 ++++++++++++ pyweb/mumble/forms.py | 6 ++++++ pyweb/mumble/models.py | 3 +++ pyweb/mumble/templates/mumble/mumble.html | 20 ++++++++++++++++++++ pyweb/mumble/views.py | 8 +++++++- 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pyweb/mumble/MumbleCtlIce.py b/pyweb/mumble/MumbleCtlIce.py index 2f2dbc7..6da5339 100644 --- a/pyweb/mumble/MumbleCtlIce.py +++ b/pyweb/mumble/MumbleCtlIce.py @@ -501,6 +501,18 @@ class MumbleCtlIce_120(MumbleCtlIce_118): @protectDjangoErrPage def setACL(self, srvid, channelid, acls, groups, inherit): return self._getIceServerObject(srvid).setACL( channelid, acls, groups, inherit ); + + @protectDjangoErrPage + def getBans(self, srvid): + return self._getIceServerObject(srvid).getBans(); + + @protectDjangoErrPage + def setBans(self, srvid, bans): + return self._getIceServerObject(srvid).setBans(bans); + + @protectDjangoErrPage + def kickUser(self, srvid, userid, reason=""): + return self._getIceServerObject(srvid).kickUser( userid, reason.encode("UTF-8") ); class MumbleCtlIce_122(MumbleCtlIce_120): diff --git a/pyweb/mumble/forms.py b/pyweb/mumble/forms.py index 6b53ef2..6c72f86 100644 --- a/pyweb/mumble/forms.py +++ b/pyweb/mumble/forms.py @@ -297,6 +297,12 @@ class MumbleUserAdminForm( PropertyModelForm ): model = Mumble; +class MumbleKickForm( Form ): + session = forms.IntegerField(); + ban = forms.BooleanField( required=False ); + reason = forms.CharField( required=False ); + + class MumbleTextureForm( Form ): """ The form used to upload a new image to be set as texture. """ texturefile = forms.ImageField(); diff --git a/pyweb/mumble/models.py b/pyweb/mumble/models.py index abe35ee..2d4109e 100644 --- a/pyweb/mumble/models.py +++ b/pyweb/mumble/models.py @@ -457,6 +457,9 @@ class Mumble( models.Model ): raise AttributeError( _( "This field must not be updated once the record has been saved." ) ); models.Model.__setattr__( self, name, value ); + + def kickUser( self, sessionid, reason="" ): + return self.ctl.kickUser( self.srvid, sessionid, reason ); diff --git a/pyweb/mumble/templates/mumble/mumble.html b/pyweb/mumble/templates/mumble/mumble.html index aabb8c9..d891853 100644 --- a/pyweb/mumble/templates/mumble/mumble.html +++ b/pyweb/mumble/templates/mumble/mumble.html @@ -137,6 +137,26 @@ user texture {% endif %} + {% if CurrentUserIsAdmin or user.is_staff %} +
+ {% trans "Kick user" %} +
+ + +
    +
  • + + +
  • +
  • + + +
  • +
+ +
+
+ {% endif %} {% else %}
diff --git a/pyweb/mumble/views.py b/pyweb/mumble/views.py index 2837fde..c0b6160 100644 --- a/pyweb/mumble/views.py +++ b/pyweb/mumble/views.py @@ -29,7 +29,7 @@ from django.contrib.auth import views as auth_views from models import Mumble, MumbleUser from forms import MumbleForm, MumbleUserForm, MumbleUserPasswordForm -from forms import MumbleUserLinkForm, MumbleTextureForm +from forms import MumbleUserLinkForm, MumbleTextureForm, MumbleKickForm def redir( request ): @@ -165,6 +165,12 @@ def show( request, server ): regform = None; textureform = None; + if isAdmin: + if request.method == 'POST' and 'mode' in request.POST and request.POST['mode'] == 'kick': + kickform = MumbleKickForm( request.POST ); + if kickform.is_valid(): + srv.kickUser( kickform.cleaned_data['session'], kickform.cleaned_data['reason'] ); + # ChannelTable is a somewhat misleading name, as it actually contains channels and players. channelTable = []; for cid in srv.channels: