Rewrite session handling URLs to make a little more sense

This commit is contained in:
Trever Fischer
2012-04-02 17:40:29 -04:00
parent 1edef53f65
commit 433bb7d8ca
3 changed files with 30 additions and 19 deletions

View File

@@ -62,22 +62,35 @@ class ServerHandler(AnonymousBaseHandler):
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
class NewPlayerSessionHandler(BaseHandler):
allowed_methods = ('POST',)
def create(self, request, playername):
ip = request.POST['ip']
try:
profile = MinecraftProfile.objects.all().filter(mc_username__iexact=playername)[0]
except IndexError, e:
return {'valid': False, 'error': 'User not found', 'permissions': []}
if profile.user.is_active:
perms = []
if profile.user.is_staff:
perms.append('bukkit.command.op.give')
ip = request.POST['ip']
server = request.server
profile = MinecraftProfile.objects.get(mc_username__exact=playername)
session = PlayerSession.objects.create(server=server, player=profile, ip=ip)
return {'success': True, 'error': '', 'permissions': perms, 'sessionId': session.id}
else:
return {'success': False, 'error': 'Your account is inactive.', 'permissions': []}
server = request.server
profile = MinecraftProfile.objects.get(mc_username__exact=playername)
session = PlayerSession.objects.create(server=server, player=profile, ip=ip)
return {'session':session.id}
class ClosePlayerSessionHandler(BaseHandler):
allowed_methods = ('GET',)
def update(self, request, playername):
session = PlayerSession.objects.get(id__exact=request.POST['session'])
session.end = datetime.now()
session.save()
def read(self, request, playername):
sessions = PlayerSession.objects.all().filter(player__mc_username__iexact=playername, end=None)
for session in sessions:
session.end = datetime.now()
session.save()
return {'success': True}
class EconomyHandler(BaseHandler):
allowed_methods = ('PUT','GET')

View File

@@ -90,18 +90,15 @@ class SessionTest(unittest.TestCase):
self.server.delete()
def testSessionStart(self):
resp = self.client.post('/api/server/session/%s'%(self.user.minecraftprofile.mc_username), {'hostname':self.server.hostname, 'ip': '127.0.0.1'}, HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
resp = self.client.post('/api/server/session/%s/new'%(self.user.minecraftprofile.mc_username), {'ip': '127.0.0.1'}, HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
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/server/session/%s'%(self.user.minecraftprofile.mc_username), {'hostname':self.server.hostname, 'ip': '127.0.0.1'}, HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
resp = self.client.post('/api/server/session/%s/new'%(self.user.minecraftprofile.mc_username), {'ip': '127.0.0.1'}, HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
session = json.loads(resp.content)
resp = self.client.put('/api/server/session/%s'%(self.user.minecraftprofile.mc_username), {'session':session['session']}, HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
resp = self.client.get('/api/server/session/%s/close'%(self.user.minecraftprofile.mc_username), HTTP_AUTHORIZATION="X-Caminus %s"%(self.token))
self.assertEqual(resp.status_code, 200)
sessionObj = PlayerSession.objects.get(id__exact=session['session'])
self.assertNotEqual(sessionObj.end, None)
class EconomyTest(unittest.TestCase):
def setUp(self):

View File

@@ -45,5 +45,6 @@ urlpatterns = patterns('api',
url(r'^server/whoami$', ServerResource(handlers.ServerPingHandler)),
url(r'^server/info/(?P<hostname>.*)$', Resource(handlers.ServerHandler)),
url(r'^server/economy/(?P<playername>.*)$', ServerResource(handlers.EconomyHandler)),
url(r'^server/session/(?P<playername>.*)$', ServerResource(handlers.PlayerSessionHandler)),
url(r'^server/session/(?P<playername>.*)/new$', ServerResource(handlers.NewPlayerSessionHandler)),
url(r'^server/session/(?P<playername>.*)/close$', ServerResource(handlers.ClosePlayerSessionHandler)),
)