From dedfb9f47b675aac2916e851d1c641b5eba48e29 Mon Sep 17 00:00:00 2001 From: "Maksim A. Boyko" Date: Sat, 25 Aug 2012 07:17:38 -0400 Subject: Backend: Refactoring Add api_room_settings view --- backend/views.py | 109 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 44 deletions(-) (limited to 'backend/views.py') 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) -- cgit v1.2.3-70-g09d2