@@ -10,6 +10,21 @@ import json
|
||||
from datetime import datetime
|
||||
from models import cachePlayerList
|
||||
|
||||
class WhitelistHandler(AnonymousBaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
|
||||
def read(self, request, username):
|
||||
try:
|
||||
profile = MinecraftProfile.objects.all().filter(mc_username__iexact=username)[0]
|
||||
except IndexError, e:
|
||||
return {'valid': False, 'error': 'User not found', 'permissions': []}
|
||||
if profile.user.is_active:
|
||||
if profile.isBanned():
|
||||
return {'valid': False, 'error': 'Your account is banned.', 'permissions': []}
|
||||
return {'valid': True, 'error': '', 'permissions': profile.serverPermissions()}
|
||||
else:
|
||||
return {'valid': False, 'error': 'Your account is inactive.', 'permissions': []}
|
||||
|
||||
class MOTDHandler(AnonymousBaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
|
||||
@@ -23,6 +38,31 @@ class MOTDHandler(AnonymousBaseHandler):
|
||||
motd += "\n"+'"'+quote[0].text+'"'
|
||||
return {"motd":motd.split('\n')}
|
||||
|
||||
class BalanceHandler(BaseHandler):
|
||||
def read(self, request):
|
||||
user = request.user
|
||||
if user.is_anonymous():
|
||||
return HttpResponse(status=403)
|
||||
else:
|
||||
return {"balance":user.minecraftprofile.currencyaccount.balance}
|
||||
|
||||
class ServerHandler(AnonymousBaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
|
||||
def read(self, request, hostname):
|
||||
s = Server.objects.get(hostname__exact=hostname)
|
||||
serverTime = cache.get('minecraftServerTime-%s:%s'%(s.hostname, s.port))
|
||||
playerList = []
|
||||
if serverTime is None:
|
||||
try:
|
||||
dynMapJS = json.load(urlopen("http://%s/map/up/world/world/0"%(hostname)))
|
||||
serverTime = dynMapJS["servertime"]
|
||||
playerList = dynMapJS["players"]
|
||||
cache.set('minecraftServerTime-%s:%s'%(s.hostname, s.port), serverTime, 120)
|
||||
except Exception, e:
|
||||
serverTime = -1
|
||||
return {"hostname":hostname, "port":s.port, "players": playerList, "time":serverTime, "rules": s.ruleset.split('\n')}
|
||||
|
||||
class NewPlayerSessionHandler(BaseHandler):
|
||||
allowed_methods = ('POST',)
|
||||
|
||||
|
42
api/tests.py
42
api/tests.py
@@ -32,6 +32,48 @@ class MOTDTest(unittest.TestCase):
|
||||
response = json.loads(self.client.get('/api/motd/NewUser').content)
|
||||
self.assertIsInstance(response['motd'], list)
|
||||
|
||||
class BalanceTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.user = User.objects.create_user('ValidUsername', 'test@example.com')
|
||||
self.user.set_password('password')
|
||||
self.user.save()
|
||||
self.user.minecraftprofile.mc_username = "ValidUsername"
|
||||
self.user.minecraftprofile.save()
|
||||
self.user.minecraftprofile.currencyaccount.balance = 1000
|
||||
self.user.minecraftprofile.currencyaccount.save()
|
||||
|
||||
def tearDown(self):
|
||||
self.user.delete()
|
||||
|
||||
def testWithoutLogin(self):
|
||||
result = self.client.get('/api/balance').content
|
||||
self.assertEqual(result, "")
|
||||
|
||||
def testWithLogin(self):
|
||||
self.client.login(username=self.user.username, password='password')
|
||||
response = json.loads(self.client.get('/api/balance').content)
|
||||
self.assertEqual(response['balance'], 1000)
|
||||
|
||||
|
||||
class WhitelistTest(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()
|
||||
|
||||
def tearDown(self):
|
||||
self.user.delete()
|
||||
|
||||
def testValidProfile(self):
|
||||
response = json.loads(self.client.get('/api/validate/ValidUsername').content)
|
||||
self.assertEqual(response['valid'], True)
|
||||
|
||||
def testInvalidProfile(self):
|
||||
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()
|
||||
|
@@ -39,8 +39,11 @@ class ServerResource(Resource):
|
||||
super(ServerResource, self).__init__(handler, ServerAuther())
|
||||
|
||||
urlpatterns = patterns('api',
|
||||
url(r'^validate/(?P<username>.*)$', whitelistHandler),
|
||||
url(r'^motd/(?P<username>.*)$', motdHandler),
|
||||
url(r'^balance$', Resource(handlers.BalanceHandler)),
|
||||
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>.*)/new$', ServerResource(handlers.NewPlayerSessionHandler)),
|
||||
url(r'^server/session/(?P<playername>.*)/close$', ServerResource(handlers.ClosePlayerSessionHandler)),
|
||||
|
Reference in New Issue
Block a user