summaryrefslogtreecommitdiff
path: root/backend/views.py
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-25 07:17:38 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-25 07:17:38 -0400
commitdedfb9f47b675aac2916e851d1c641b5eba48e29 (patch)
tree089cc5736b070f5e717aed0132c78b1ab4541036 /backend/views.py
parent836acff49c8d41e8d13aba4f1810366814251588 (diff)
Backend:
Refactoring Add api_room_settings view
Diffstat (limited to 'backend/views.py')
-rw-r--r--backend/views.py109
1 files changed, 65 insertions, 44 deletions
diff --git a/backend/views.py b/backend/views.py
index afd21f0..854e935 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -21,6 +21,8 @@ from backend.models import SJRoom
from backend.models import SJContent
from backend.models import SJUserProfile
+from browser import Browser
+
API_HEADER = '#@scanjam 0.3b\n'
ROOM_CHAT_LOG_SIZE = 50
ROOM_VIDEO_LOG_SIZE = 50
@@ -28,6 +30,7 @@ ACCESS_USER = 0
ACCESS_MODERATOR = 1
ACCESS_ADMIN = 9
LASTSEEN_TIMEOUT= 7
+MAX_BG_SIZE = 400 * 1024
#
# Common funtions
@@ -70,9 +73,9 @@ def check_form_fields(request, form_fields):
print field, '= "%s"' % value
for field in form_fields:
if field not in request.POST:
- return response_error('incomplete form')
+ return response_error('INCOMPLETE FORM')
if not request.POST[field]:
- return response_error('no %s' % field)
+ return response_error('NO %s' % field)
def user_response_str(request, user=None):
""" Return API response string for user
@@ -184,12 +187,12 @@ def api_auth_login(request):
response.write(user_response_str(request))
return response
else:
- return response_error('user disabled')
+ return response_error('USER DISABLED')
else:
if auth.models.User.objects.filter(username=request.POST['username']):
- return response_error('wrong password')
+ return response_error('WRONG PASSWORD')
else:
- return response_error('no such user')
+ return response_error('NO SUCH USER')
@require_POST
def api_auth_logout(request):
@@ -209,9 +212,9 @@ def api_auth_sneakin(request):
try:
user = auth.models.User.objects.get(username=request.POST['username'])
if user.id != int(request.POST['userid']):
- return response_error('no match')
+ return response_error('NO MATCH')
except:
- return response_error('no such user')
+ return response_error('NO SUCH USER')
# Hack to authenticate user manually
for backend in auth.get_backends():
user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
@@ -230,7 +233,7 @@ def api_auth_register(request):
if response:
return response
if auth.models.User.objects.filter(username=request.POST['username']):
- return response_error('user exists')
+ return response_error('USER EXISTS')
user = auth.models.User.objects.create_user(username=request.POST['username'],
email='default@noemail.com',
password=request.POST['password'])
@@ -238,12 +241,12 @@ def api_auth_register(request):
try:
user.save()
except:
- return response_error('db error')
+ return response_error('DB ERROR')
user_profile = SJUserProfile(user=user)
try:
user_profile.save()
except:
- return response_error('db error')
+ return response_error('DB ERROR')
response = response_success()
response.write(user_response_str(request, user))
return response
@@ -257,7 +260,7 @@ def api_auth_available(request):
if response:
return response
if auth.models.User.objects.filter(username=request.POST['username']):
- return response_error('user exists')
+ return response_error('USER EXISTS')
return response_success()
@require_POST
@@ -286,9 +289,9 @@ def api_auth_password(request):
user_profile = user.get_profile()
user_profile.save()
except auth.models.User.DoesNotExist:
- return response_error('no such user')
+ return response_error('NO SUCH USER')
except:
- return response_error('db error')
+ return response_error('DB ERROR')
return response_success()
return HttpResponse()
@@ -307,9 +310,9 @@ def api_user_videos(request):
try:
query = Q(user=auth.models.User.objects.get(id=request.POST['user']))
except auth.models.User.DoesNotExist:
- return response_error('no such user')
+ return response_error('NO SUCH USER')
except:
- return response_error('db error')
+ return response_error('DB ERROR')
if 'start' in request.POST:
try:
timestamp = float(request.POST['start'])
@@ -318,7 +321,7 @@ def api_user_videos(request):
pass
videos = SJContent.objects.filter(content_type='video').filter(query).order_by('-datetime')[0:ROOM_VIDEO_LOG_SIZE]
if not videos:
- return response_error('no videos')
+ return response_error('NO VIDEOS')
response = response_success()
for v in videos:
s = v.settings
@@ -344,9 +347,9 @@ def api_user_likes(request):
try:
query = Q(sjlike__user=auth.models.User.objects.get(id=request.POST['user']))
except auth.models.User.DoesNotExist:
- return response_error('no such user')
+ return response_error('NO SUCH USER')
except:
- return response_error('db error')
+ return response_error('DB ERROR')
if 'start' in request.POST:
try:
timestamp = float(request.POST['start'])
@@ -355,7 +358,7 @@ def api_user_likes(request):
pass
videos = SJContent.objects.filter(content_type='video').filter(query).order_by('-datetime')[0:ROOM_VIDEO_LOG_SIZE]
if not videos:
- return response_error('no videos')
+ return response_error('NO VIDEOS')
response = response_success()
for v in videos:
l = '\t'.join([str(v.user.id), str(v.id), str(v.datetime)])
@@ -378,14 +381,14 @@ def api_user_settings(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['userid', 'bio', 'settings']
response = check_form_fields(request, form_fields)
if response:
return response
if (user.id != int(request.POST['userid'])) and (user_profile.access < ACCESS_ADMIN):
- return response_error('you can only edit yourself man')
+ return response_error('YOU CAN ONLY EDIT YOURSELF MAN')
settings = user_profile.settings
settings.update(thraw(request.POST['settings']))
user_profile.settings = settings
@@ -407,7 +410,7 @@ def api_room_watch(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
response = response_success(str(now_timestamp()))
last = 0
if 'last' in request.POST:
@@ -440,7 +443,7 @@ def api_room_view(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room']
response = check_form_fields(request, form_fields)
@@ -449,7 +452,7 @@ def api_room_view(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
user_profile.lastseen_chat = datetime.now()
user_profile.save()
response = response_success('\t'.join([u.username for u in room.users.all()]))
@@ -466,7 +469,7 @@ def api_room_join(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room']
response = check_form_fields(request, form_fields)
@@ -479,7 +482,7 @@ def api_room_join(request):
#print '--> New room', request.POST['room']
room = SJRoom.objects.create(user=user, datetime=datetime.now(), name=request.POST['room'])
else:
- return response_error('no room')
+ return response_error('NO ROOM')
if user not in room.users.all():
room.users.add(user)
room.save()
@@ -504,7 +507,7 @@ def api_room_read(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room']
response = check_form_fields(request, form_fields)
@@ -513,7 +516,7 @@ def api_room_read(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
response = response_success(str(datetime_to_timestamp(datetime.now())))
response.write('%s\n' % '\t'.join([u.username for u in room.users.all()]))
last = 0
@@ -531,11 +534,11 @@ def api_room_read(request):
@require_POST
def api_room_poll(request):
- """ Private API
+ """ View room poll. Private API
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room']
response = check_form_fields(request, form_fields)
@@ -544,7 +547,7 @@ def api_room_poll(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
nowtime = datetime.now()
lastseentime = lastseen_datetime()
if user not in room.users.all():
@@ -578,11 +581,11 @@ def api_room_poll(request):
@require_POST
def api_room_settings(request):
- """ Private API
+ """ Update room settings. Private API
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room', 'settings']
response = check_form_fields(request, form_fields)
@@ -591,8 +594,26 @@ def api_room_settings(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
- return HttpResponse('Not implemented yet!\n')
+ return response_error('NO ROOM')
+ settings = room.settings
+ new_settings = thraw(request.POST['settings'])
+ if 'bg' in new_settings and 'bg' in settings and new_settings['bg'] != settings['bg']:
+ try:
+ url = new_settings['bg']
+ browser = Browser()
+ req = browser.get(url)
+ data = req.read()
+ if len(data) > MAX_BG_SIZE:
+ return response_error('BG_DATA\t%d\t%d\n' % (len(data), MAX_BG_SIZE))
+ bg = SJContent(room=room, content_type='background', user=user, datetime=datetime.now())
+ bg.settings = {'url': url}
+ bg.save()
+ except:
+ return response_error('BG_DATA')
+ settings.update(new_settings)
+ room.settings = settings
+ room.save()
+ return response_success()
@require_POST
def api_room_say(request):
@@ -600,7 +621,7 @@ def api_room_say(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room', 'msg']
response = check_form_fields(request, form_fields)
@@ -609,7 +630,7 @@ def api_room_say(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
return HttpResponse('Not implemented yet!\n')
@require_POST
@@ -618,7 +639,7 @@ def api_room_video(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['room', 'msg']
response = check_form_fields(request, form_fields)
@@ -627,7 +648,7 @@ def api_room_video(request):
try:
room = SJRoom.objects.get(name=request.POST['room'])
except:
- return response_error('no room')
+ return response_error('NO ROOM')
return HttpResponse('Not implemented yet!\n')
#
@@ -650,7 +671,7 @@ def api_video_view(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['video']
response = check_form_fields(request, form_fields)
@@ -664,7 +685,7 @@ def api_video_like(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['video']
response = check_form_fields(request, form_fields)
@@ -678,7 +699,7 @@ def api_video_unlike(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['video']
response = check_form_fields(request, form_fields)
@@ -692,7 +713,7 @@ def api_video_remove(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['video', 'room']
response = check_form_fields(request, form_fields)
@@ -706,7 +727,7 @@ def api_video_search(request):
"""
user = request.user
if not user.is_authenticated():
- return response_error('no logged in')
+ return response_error('NO LOGGED IN')
user_profile = user.get_profile()
form_fields = ['q', 'start', 'limit']
response = check_form_fields(request, form_fields)