Add API to log player sessions. Fixes #2
This commit is contained in:
@@ -2,10 +2,11 @@ from piston.handler import AnonymousBaseHandler, BaseHandler
|
||||
from django.core.cache import cache
|
||||
from minecraft.models import MinecraftProfile
|
||||
from local.models import Quote
|
||||
from minecraft.models import MOTD, Server
|
||||
from minecraft.models import MOTD, Server, PlayerSession
|
||||
from django.http import HttpResponse
|
||||
from urllib2 import urlopen
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
class WhitelistHandler(AnonymousBaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
@@ -55,3 +56,22 @@ class ServerHandler(AnonymousBaseHandler):
|
||||
except Exception, e:
|
||||
serverTime = -1
|
||||
return {"hostname":hostname, "port":s.port, "players": playerList, "time":serverTime, "rules": s.ruleset.split('\n')}
|
||||
|
||||
class PlayerSessionHandler(BaseHandler):
|
||||
allowed_methods = ('POST', 'PUT')
|
||||
model = PlayerSession
|
||||
|
||||
def create(self, request):
|
||||
hostname = request.POST['hostname']
|
||||
playername = request.POST['player']
|
||||
ip = request.POST['ip']
|
||||
|
||||
server = Server.objects.get(hostname__exact=hostname)
|
||||
profile = MinecraftProfile.objects.get(mc_username__exact=playername)
|
||||
session = PlayerSession.objects.create(server=server, player=profile, ip=ip)
|
||||
return {'session':session.id}
|
||||
|
||||
def update(self, request):
|
||||
session = PlayerSession.objects.get(id__exact=request.POST['session'])
|
||||
session.end = datetime.now()
|
||||
session.save()
|
||||
|
27
api/tests.py
27
api/tests.py
@@ -2,7 +2,7 @@ from django.utils import unittest
|
||||
import json
|
||||
from django.test.client import Client
|
||||
from django.contrib.auth.models import User
|
||||
from minecraft.models import MinecraftProfile
|
||||
from minecraft.models import MinecraftProfile, Server, PlayerSession
|
||||
|
||||
class MOTDTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@@ -54,3 +54,28 @@ class WhitelistTest(unittest.TestCase):
|
||||
response = json.loads(self.client.get('/api/validate/InvalidUser').content)
|
||||
self.assertEqual(response['valid'], False)
|
||||
|
||||
class SessionTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.user = User.objects.create_user('ValidUsername', 'test@example.com')
|
||||
self.user.minecraftprofile.mc_username = "ValidUsername"
|
||||
self.user.minecraftprofile.save()
|
||||
self.server = Server.objects.create(hostname='localhost')
|
||||
|
||||
def tearDown(self):
|
||||
self.user.delete()
|
||||
self.server.delete()
|
||||
|
||||
def testSessionStart(self):
|
||||
resp = self.client.post('/api/session', {'hostname':self.server.hostname, 'player':self.user.minecraftprofile.mc_username, 'ip': '127.0.0.1'})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
session = json.loads(resp.content)
|
||||
sessionObj = PlayerSession.objects.get(id__exact=session['session'])
|
||||
|
||||
def testSessionEnd(self):
|
||||
resp = self.client.post('/api/session', {'hostname':self.server.hostname, 'player':self.user.minecraftprofile.mc_username, 'ip': '127.0.0.1'})
|
||||
session = json.loads(resp.content)
|
||||
resp = self.client.put('/api/session', {'session':session['session']})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
sessionObj = PlayerSession.objects.get(id__exact=session['session'])
|
||||
self.assertNotEqual(sessionObj.end, None)
|
||||
|
@@ -9,5 +9,6 @@ urlpatterns = patterns('api',
|
||||
url(r'^validate/(?P<username>.*)$', whitelistHandler),
|
||||
url(r'^motd/(?P<username>.*)$', motdHandler),
|
||||
url(r'^balance$', Resource(handlers.BalanceHandler)),
|
||||
url(r'^server/(?P<hostname>.*)$', Resource(handlers.ServerHandler))
|
||||
url(r'^server/(?P<hostname>.*)$', Resource(handlers.ServerHandler)),
|
||||
url(r'^session$', Resource(handlers.PlayerSessionHandler)),
|
||||
)
|
||||
|
Reference in New Issue
Block a user