summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-07-02 15:25:01 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-07-02 15:25:01 -0400
commitc2ef693b393396ebf210d17ba70e9bc81f4ac4e2 (patch)
tree07e85095b503b0b80413dadb85a85de831d30795
parentd69176016b18212b03bcd18b4b42629e0816de0f (diff)
Backend:
Update check_form_field Add api_ok_headers Implement api_auth_available
-rw-r--r--backend/models.py7
-rw-r--r--backend/views.py147
2 files changed, 145 insertions, 9 deletions
diff --git a/backend/models.py b/backend/models.py
index 844f029..d3964af 100644
--- a/backend/models.py
+++ b/backend/models.py
@@ -10,7 +10,8 @@ class SJUserProfile(models.Model):
""" ScannerJammer user model """
user = models.OneToOneField(auth.models.User)
nickname = models.CharField(max_length=32, blank=True)
- score = models.IntegerField(default=0)
+ score = models.IntegerField(default=0, blank=True)
+ access = models.IntegerField(default=0, blank=True)
bio = models.TextField(blank=True)
settings = models.TextField(blank=True)
# Backward compatibility fields
@@ -23,7 +24,9 @@ class SJUserProfile(models.Model):
verbose_name = "SJ User Profile"
def __unicode__(self):
- return "%s(%s)" % (self.username or self.user.username, self.nickname)
+ if self.nickname:
+ return "%s (%s)" % (self.username or self.user.username, self.nickname)
+ return "%s" % (self.username or self.user.username)
class SJRoom(models.Model):
""" ScannerJammer room model """
diff --git a/backend/views.py b/backend/views.py
index 110aa7b..73dcd17 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -11,14 +11,55 @@ from django.conf import settings
from datetime import datetime
-API_HEADER = '#@scanjam 0.2\n'
+from backend.models import SJUserProfile
-def add_cors_headers(response):
+API_HEADER = '#@scanjam 0.3b\n'
+
+#
+# Common funtions
+#
+
+def set_cors_headers(response):
""" Setup additional headers for response """
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
response['Access-Control-Allow-Headers'] = 'x-requested-with'
response['Access-Control-Max-Age'] = '3628800'
+ response['Content-type'] = 'text/plain; charset=UTF-8'
+
+def api_error(error, response=None):
+ """ Add API error name to response """
+ if not response:
+ response = HttpResponse()
+ response.write(API_HEADER)
+ response.write('0\t%s\n' % error)
+ return response
+
+def api_error_headers(error, response=None):
+ """ Add API error name with setup headers to response """
+ if not response:
+ response = HttpResponse()
+ set_cors_headers(response)
+ return api_error(error, response)
+
+def api_ok_headers(response=None):
+ """ Add API OK with setup headers to response """
+ if not response:
+ response = HttpResponse()
+ set_cors_headers(response)
+ response.write(API_HEADER)
+ response.write('OK\n')
+ return response
+
+def check_form_fields(request, form_fields):
+ """ Check form fields presence """
+ for field, value in request.POST.iteritems():
+ print field, '= "%s"' % value
+ for field in form_fields:
+ if field not in request.POST:
+ return api_error_headers('incomplete form')
+ if not request.POST[field]:
+ return api_error_headers('no %s' % field)
#
# AUTH API
@@ -28,6 +69,9 @@ def add_cors_headers(response):
def api_auth_login(request):
""""""
form_fields = ['username', 'password']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
@@ -39,19 +83,51 @@ def api_auth_logout(request):
def api_auth_sneakin(request):
""""""
form_fields = ['userid', 'username']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_auth_register(request):
- """"""
+ """ Register new user """
form_fields = ['username', 'password']
- return HttpResponse('Not implemented yet!\n')
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
+ if auth.models.User.objects.filter(username=request.POST['username']):
+ return api_error_headers('user exists')
+ user = auth.models.User.objects.create_user(username=request.POST['username'],
+ email='default@noemail.com',
+ password=request.POST['password'])
+ user.is_active = True
+ try:
+ user.save()
+ except:
+ return api_error_headers('problem storing user')
+ user_profile = SJUserProfile(user=user,
+ username=request.POST['username'],
+ password=request.POST['password'],
+ joindate=user.date_joined,
+ seendate=user.date_joined)
+ try:
+ user_profile.save()
+ except:
+ return api_error_headers('problem storing user profile')
+ response = api_ok_headers()
+ response.write('%d\t%s\t%d' % (user.id, user.username, user_profile.access))
+ return response
@require_POST
def api_auth_available(request):
- """"""
+ """ Check if user exists"""
form_fields = ['username']
- return HttpResponse('Not implemented yet!\n')
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
+ if auth.models.User.objects.filter(username=request.POST['username']):
+ return api_error_headers('user exists')
+ return api_ok_headers()
@require_POST
def api_auth_checkin(request):
@@ -62,6 +138,9 @@ def api_auth_checkin(request):
def api_auth_password(request):
""""""
form_fields = ['username', 'password']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
#
@@ -72,24 +151,36 @@ def api_auth_password(request):
def api_user_videos(request):
""""""
form_fields = ['user', 'start']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_user_likes(request):
""""""
form_fields = ['user', 'start']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_user_top(request):
""""""
form_fields = ['user']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_user_settings(request):
""""""
form_fields = ['user', 'bio', 'settings']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
#
@@ -100,6 +191,9 @@ def api_user_settings(request):
def api_room_watch(request):
""""""
form_fields = ['room', 'last']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
@@ -111,42 +205,63 @@ def api_room_list(request):
def api_room_view(request):
""""""
form_fields = ['room', 'last']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_join(request):
""""""
form_fields = ['room', 'enqueue']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_read(request):
""""""
form_fields = ['room', 'enqueue']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_poll(request):
""""""
form_fields = ['room', 'last', 'cam']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_settings(request):
""""""
form_fields = ['room', 'settings']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_say(request):
""""""
form_fields = ['room', 'msg']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_room_video(request):
""""""
form_fields = ['room', 'msg']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
#
@@ -157,40 +272,58 @@ def api_room_video(request):
def api_video_date(request):
""""""
form_fields = ['day', 'month', 'year']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_video_view(request):
""""""
form_fields = ['video']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_video_like(request):
""""""
form_fields = ['video']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_video_unlike(request):
""""""
form_fields = ['video']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_video_remove(request):
""""""
form_fields = ['video', 'room']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
@require_POST
def api_video_search(request):
""""""
form_fields = ['q', 'start', 'limit']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
return HttpResponse('Not implemented yet!\n')
#
-#
+# Common views
#
def stats(request):