def logBookHistory(book = None, version = None, chapter = None, chapter_history = None, args = {}, user=None, kind = 'unknown'): """ Creates history record for book change. @type book: C{booki.editor.models.Book} @param book: Book object @type version: C{booki.editor.models.BookVersion} @param version: Book version object @type chapter: C{booki.editor.models.Chapter} @param chapter: Chapter object @type chapter_history: C{booki.editor.models.ChapterHistory} @param chapter_history: Chapter history object @type args: C{dict} @param args: Additional arguments @type user: C{django.contrib.auth.models.User} @param user: User who did modifications @type kind: C{string} @param kind: What kind of modification was done """ history = models.BookHistory(book = book, version = version, chapter = chapter, chapter_history = chapter_history, args = simplejson.dumps(args), user = user, kind = models.HISTORY_CHOICES.get(kind, 0)) history.save()
def logBookHistory(book=None, version=None, chapter=None, chapter_history=None, args={}, user=None, kind='unknown'): """ Creates history record for book change. @type book: C{booki.editor.models.Book} @param book: Book object @type version: C{booki.editor.models.BookVersion} @param version: Book version object @type chapter: C{booki.editor.models.Chapter} @param chapter: Chapter object @type chapter_history: C{booki.editor.models.ChapterHistory} @param chapter_history: Chapter history object @type args: C{dict} @param args: Additional arguments @type user: C{django.contrib.auth.models.User} @param user: User who did modifications @type kind: C{string} @param kind: What kind of modification was done """ history = models.BookHistory(book=book, version=version, chapter=chapter, chapter_history=chapter_history, args=simplejson.dumps(args), user=user, kind=models.HISTORY_CHOICES.get(kind, 0)) history.save()
def forgotpasswordenter(request): """ Django View. Gets called when user clicks on the link he recieved over email. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson secretcode = request.GET.get('secretcode', '') from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth.models import User if request.POST.get("ajax", "") == "1": ret = {"result": 0} usr = None if request.POST.get("method", "") == "forgot_password_enter": def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("secretcode"): return 2 if _checkIfEmpty("password1"): return 3 if _checkIfEmpty("password2"): return 4 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: from booki.account import models as account_models allOK = True try: pswd = account_models.UserPassword.objects.get(secretcode=request.POST.get("secretcode", "")) except account_models.UserPassword.DoesNotExist: allOK = False if allOK: pswd.user.set_password(request.POST.get("password1", "")) pswd.user.save() else: ret["result"] = 5 transaction.commit() return HttpResponse(simplejson.dumps(ret), mimetype="text/json") try: return render_to_response('account/forgot_password_enter.html', {"request": request, "secretcode": secretcode}) except: transaction.rollback() finally: transaction.commit()
def logBookHistory(book = None, version = None, chapter = None, chapter_history = None, args = {}, user=None, kind = 'unknown'): history = models.BookHistory(book = book, version = version, chapter = chapter, chapter_history = chapter_history, args = simplejson.dumps(args), user = user, kind = models.HISTORY_CHOICES.get(kind, 0)) history.save()
def saveConfiguration(): """ Saves the configuration to file. Configuration data is taken from settings.BOOKTYPE_CONFIG variable. """ import tempfile import os import os.path if not hasattr(settings, 'BOOKTYPE_CONFIG'): return False writeLock.acquire() data = settings.BOOKTYPE_CONFIG configPath = '%s/configuration.json' % settings.BOOKI_ROOT # check for errors jsonData = simplejson.dumps(data) try: fh, fname = tempfile.mkstemp(suffix='', prefix='configuration', dir=settings.BOOKI_ROOT) f = open(fname, 'w+') f.write(jsonData.encode('utf8')) f.close() if os.path.exists(configPath): os.unlink(configPath) os.rename(fname, configPath) except IOError: raise ConfigurationError("Can't write to file %s." % configPath) except: raise ConfigurationError("Unknown error.") finally: writeLock.release()
def addMessageToChannel(request, channelName, message, myself = False ): """ Add message to specific channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type message: C{dict} @param message: Sputnik message. @type myself: C{bool} @keyword myself: Should client also recieve that message. """ import sputnik # TODO # not iterable try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = request.clientID for c in clnts: if not myself and c == request.sputnikID: continue if c.strip() != '': try: sputnik.push( "ses:%s:messages" % c, simplejson.dumps(message)) except: pass
def addMessageToChannel(request, channelName, message, myself=False): """ Add message to specific channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type message: C{dict} @param message: Sputnik message. @type myself: C{bool} @keyword myself: Should client also recieve that message. """ import sputnik # TODO # not iterable try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = request.clientID for c in clnts: if not myself and c == request.sputnikID: continue if c.strip() != '': try: sputnik.push("ses:%s:messages" % c, simplejson.dumps(message)) except: pass
def dispatcher(request, **sputnik_dict): """ Main Sputnik dispatcher. Every Sputnik request goes through this dispatcher. Input arguments are passed through C{request.POST}: - C{request.POST['messages']} List of messages client is sending to server. - C{request.POST['clientID']} Unique client ID for this connection. This is just another Django view. @todo: Change logging and error handling. @type request: C{django.http.HttpRequest} @param request: Client Request object @type sputnik_dict: C{dict} @param sputnik_dict: Mapping of channels with specific python modules. @rtype: C{HttpResponse} @return: Return C{django.http.HttpResponse} object. """ try: inp = request.POST except IOError: return HttpResponse(simplejson.dumps({"result": False, "messages": []}), mimetype="text/json") results = [] clientID = None messages = simplejson.loads(inp.get("messages", "[]")) if inp.has_key("clientID") and inp["clientID"]: clientID = inp["clientID"] for message in messages: ret = None for mpr in sputnik_dict['map']: mtch = re.match(mpr[0], message["channel"]) if mtch: a = mtch.groupdict() _m = __import__(mpr[1]) for nam in mpr[1].split('.')[1:]: _m = getattr(_m, nam) if _m: # should do hasattr first and then getattr fnc = getattr(_m, "remote_%s" % message['command']) if not hasattr(request, "sputnikID"): request.sputnikID = "%s:%s" % (request.session.session_key, clientID) request.clientID = clientID if fnc: ret = fnc(request, message, **a) if not ret: ret = {} ret["uid"] = message.get("uid") break else: import logging logging.getLogger("booki").error("Could not find function '%s' for Sputnik channel '%d'!" % (message['command'], message['channel'])) if ret: results.append(ret) else: import logging logging.getLogger("booki").error("Sputnik - %s." % simplejson.dumps(message)) n = 0 while True: v = None try: if clientID and clientID.find(' ') == -1: v = sputnik.rpop("ses:%s:%s:messages" % (request.session.session_key, clientID)) except: if n > 20: break import logging logging.getLogger("booki").debug("Sputnik - Coult not get the latest message from the queue session: %s clientID:%s" %(request.session.session_key, clientID)) # from booki.utils.log import printStack # printStack(None) n += 1 if not v: break try: results.append(simplejson.loads(v)) except: import logging logging.getLogger("booki").debug(v) # from booki.utils.log import printStack # printStack(None) import time, decimal try: if request.sputnikID and request.sputnikID.find(' ') == -1: sputnik.set("ses:%s:last_access" % request.sputnikID, time.time()) except: import logging logging.getLogger("booki").debug("Sputnik - CAN NOT SET TIMESTAMP.") # from booki.utils.log import printStack # printStack(None) # this should not be here! # timeout old edit locks locks = {} _now = time.time() try: for k in sputnik.rkeys("ses:*:last_access"): tm = sputnik.get(k) if type(tm) in [type(' '), type(u' ')]: try: tm = decimal.Decimal(tm) except: continue # timeout after 2 minute if tm and decimal.Decimal("%f" % _now) - tm > 60*2: sputnik.removeClient(request, k[4:-12]) except: import logging logging.getLogger("booki").debug("Sputnik - can not get all the last accesses") # from booki.utils.log import printStack # printStack(None) ret = {"result": True, "messages": results} try: return HttpResponse(simplejson.dumps(ret), mimetype="text/json") except: transaction.rollback() finally: transaction.commit()
def dispatcher(request, **sputnik_dict): """ Main Sputnik dispatcher. Every Sputnik request goes through this dispatcher. Input arguments are passed through C{request.POST}: - C{request.POST['messages']} List of messages client is sending to server. - C{request.POST['clientID']} Unique client ID for this connection. This is just another Django view. @todo: Change logging and error handling. @type request: C{django.http.HttpRequest} @param request: Client Request object @type sputnik_dict: C{dict} @param sputnik_dict: Mapping of channels with specific python modules. @rtype: C{HttpResponse} @return: Return C{django.http.HttpResponse} object. """ try: inp = request.POST except IOError: return HttpResponse(simplejson.dumps({"result": False, "messages": []}), mimetype="text/json") results = [] clientID = None try: messages = simplejson.loads(inp.get("messages", "[]")) except ValueError: return HttpResponse(simplejson.dumps({"result": False, "messages": []}), mimetype="text/json") if inp.has_key("clientID") and inp["clientID"]: clientID = inp["clientID"] for message in messages: ret = None for mpr in sputnik_dict['map']: mtch = re.match(mpr[0], message["channel"]) if mtch: a = mtch.groupdict() _m = __import__(mpr[1]) for nam in mpr[1].split('.')[1:]: _m = getattr(_m, nam) if _m: # should do hasattr first and then getattr fnc = getattr(_m, "remote_%s" % message['command']) if not hasattr(request, "sputnikID"): request.sputnikID = "%s:%s" % (request.session.session_key, clientID) request.clientID = clientID if fnc: ret = fnc(request, message, **a) if not ret: ret = {} ret["uid"] = message.get("uid") break else: import logging logging.getLogger("booki").error("Could not find function '%s' for Sputnik channel '%d'!" % (message['command'], message['channel'])) if ret: results.append(ret) else: import logging logging.getLogger("booki").error("Sputnik - %s." % simplejson.dumps(message)) n = 0 while True: v = None try: if clientID and clientID.find(' ') == -1: v = sputnik.rpop("ses:%s:%s:messages" % (request.session.session_key, clientID)) except: if n > 20: break import logging logging.getLogger("booki").debug("Sputnik - Coult not get the latest message from the queue session: %s clientID:%s" %(request.session.session_key, clientID)) # from booki.utils.log import printStack # printStack(None) n += 1 if not v: break try: results.append(simplejson.loads(v)) except: import logging logging.getLogger("booki").debug(v) # from booki.utils.log import printStack # printStack(None) import time, decimal try: if request.sputnikID and request.sputnikID.find(' ') == -1: sputnik.set("ses:%s:last_access" % request.sputnikID, time.time()) except: import logging logging.getLogger("booki").debug("Sputnik - CAN NOT SET TIMESTAMP.") # from booki.utils.log import printStack # printStack(None) # this should not be here! # timeout old edit locks locks = {} _now = time.time() try: for k in sputnik.rkeys("ses:*:last_access"): tm = sputnik.get(k) if type(tm) in [type(' '), type(u' ')]: try: tm = decimal.Decimal(tm) except: continue # timeout after 2 minute if tm and decimal.Decimal("%f" % _now) - tm > 60*2: sputnik.removeClient(request, k[4:-12]) except: import logging logging.getLogger("booki").debug("Sputnik - can not get all the last accesses") # from booki.utils.log import printStack # printStack(None) ret = {"result": True, "messages": results} try: return HttpResponse(simplejson.dumps(ret), mimetype="text/json") except: transaction.rollback() finally: transaction.commit()
def forgotpassword(request): """ Django View. Gets called when user wants to change password he managed to forget. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth.models import User if request.POST.get("ajax", "") == "1": ret = {"result": 0} usr = None if request.POST.get("method", "") == "forgot_password": def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("username"): return 2 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: allOK = True try: usr = User.objects.get(username=request.POST.get("username", "")) except User.DoesNotExist: pass if not usr: try: usr = User.objects.get(email=request.POST.get("username", "")) except User.DoesNotExist: allOK = False if allOK: from booki.account import models as account_models from django.core.mail import send_mail def generateSecretCode(): import string from random import choice return ''.join([choice(string.letters + string.digits) for i in range(30)]) secretcode = generateSecretCode() account_models = account_models.UserPassword() account_models.user = usr account_models.remote_useragent = request.META.get('HTTP_USER_AGENT','') account_models.remote_addr = request.META.get('REMOTE_ADDR','') account_models.remote_host = request.META.get('REMOTE_HOST','') account_models.secretcode = secretcode try: account_models.save() except: transaction.rollback() else: transaction.commit() # body = render_to_string('account/password_reset_email.txt', dict(secretcode=secretcode)) send_mail(_('Reset password'), body, 'info@' + THIS_BOOKI_SERVER, [usr.email], fail_silently=False) else: ret["result"] = 3 return HttpResponse(simplejson.dumps(ret), mimetype="text/json") try: return render_to_response('account/forgot_password.html', {"request": request}) except: transaction.rollback() finally: transaction.commit()
def forgotpassword(request): """ Django View. Gets called when user wants to change password he managed to forget. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth.models import User if request.POST.get("ajax", "") == "1": ret = {"result": 0} usr = None if request.POST.get("method", "") == "forgot_password": def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("username"): return 2 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: usersToEmail = list(User.objects.filter(Q(username=request.POST.get("username", "")) | Q(email=request.POST.get("username", "")))) for usr in usersToEmail: from booki.account import models as account_models def generateSecretCode(): import string from random import choice return ''.join([choice(string.letters + string.digits) for i in range(30)]) secretcode = generateSecretCode() account_models = account_models.UserPassword() account_models.user = usr account_models.remote_useragent = request.META.get('HTTP_USER_AGENT','') account_models.remote_addr = request.META.get('REMOTE_ADDR','') account_models.remote_host = request.META.get('REMOTE_HOST','') account_models.secretcode = secretcode # In case of an error we really should not send email to user and do rest of the procedure try: account_models.save() except: transaction.rollback() else: transaction.commit() THIS_BOOKI_SERVER = config.getConfiguration('THIS_BOOKI_SERVER') body = render_to_string('account/password_reset_email.html', dict(secretcode=secretcode, hostname=THIS_BOOKI_SERVER)) from django.core.mail import EmailMessage msg = EmailMessage(_('Reset password'), body, settings.REPORT_EMAIL_USER, [usr.email]) msg.content_subtype = 'html' try: msg.send() except: ret["result"] = 4 if len(usersToEmail) == 0: ret["result"] = 3 # Do we need rollback for this?! try: resp = HttpResponse(simplejson.dumps(ret), mimetype="text/json") except: transaction.rollback() raise else: transaction.commit() return resp # Do we need commit for this?! try: resp = render_to_response('account/forgot_password.html', {"request": request}) except: transaction.rollback() raise else: transaction.commit() return resp
def forgotpassword(request): """ Django View. Gets called when user wants to change password he managed to forget. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth.models import User if request.POST.get("ajax", "") == "1": ret = {"result": 0} usr = None if request.POST.get("method", "") == "forgot_password": def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("username"): return 2 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: usersToEmail = list( User.objects.filter( Q(username=request.POST.get("username", "")) | Q(email=request.POST.get("username", "")))) for usr in usersToEmail: from booki.account import models as account_models def generateSecretCode(): import string from random import choice return ''.join([ choice(string.letters + string.digits) for i in range(30) ]) secretcode = generateSecretCode() account_models = account_models.UserPassword() account_models.user = usr account_models.remote_useragent = request.META.get( 'HTTP_USER_AGENT', '') account_models.remote_addr = request.META.get( 'REMOTE_ADDR', '') account_models.remote_host = request.META.get( 'REMOTE_HOST', '') account_models.secretcode = secretcode # In case of an error we really should not send email to user and do rest of the procedure try: account_models.save() except: transaction.rollback() else: transaction.commit() THIS_BOOKI_SERVER = config.getConfiguration( 'THIS_BOOKI_SERVER') body = render_to_string( 'account/password_reset_email.html', dict(secretcode=secretcode, hostname=THIS_BOOKI_SERVER)) from django.core.mail import EmailMessage msg = EmailMessage(_('Reset password'), body, settings.REPORT_EMAIL_USER, [usr.email]) msg.content_subtype = 'html' try: msg.send() except: ret["result"] = 4 if len(usersToEmail) == 0: ret["result"] = 3 # Do we need rollback for this?! try: resp = HttpResponse(simplejson.dumps(ret), mimetype="text/json") except: transaction.rollback() raise else: transaction.commit() return resp # Do we need commit for this?! try: resp = render_to_response('account/forgot_password.html', {"request": request}) except: transaction.rollback() raise else: transaction.commit() return resp
def signin(request): """ Django View. Gets called when user wants to signin or create new account. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson from booki.utils.misc import isUserLimitReached from booki.editor.models import BookiGroup from django.core.exceptions import ObjectDoesNotExist from django.contrib import auth limitReached = isUserLimitReached() if request.POST.get("ajax", "") == "1": ret = {"result": 0} if request.POST.get("method", "") == "register" and config.getConfiguration( 'FREE_REGISTRATION') and not limitReached: def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("username"): return 2 if _checkIfEmpty("email"): return 3 if _checkIfEmpty("password") or _checkIfEmpty("password2"): return 4 if _checkIfEmpty("fullname"): return 5 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: # if there was no errors import re def _doCheckValid(): # check if it is valid username # - from 2 to 20 characters long # - word, number, ., _, - mtch = re.match('^[\w\d\_\.\-]{2,20}$', request.POST.get("username", "").strip()) if not mtch: return 6 # check if it is valid email if not bool(email_re.match(request.POST["email"].strip())): return 7 if request.POST.get("password", "") != request.POST.get( "password2", "").strip(): return 8 if len(request.POST.get("password", "").strip()) < 6: return 9 if len(request.POST.get("fullname", "").strip()) > 30: return 11 # check if this user exists try: u = auth.models.User.objects.get( username=request.POST.get("username", "").strip()) return 10 except auth.models.User.DoesNotExist: pass return 0 ret["result"] = _doCheckValid() if ret["result"] == 0: ret["result"] = 1 user = None try: user = auth.models.User.objects.create_user( username=request.POST["username"].strip(), email=request.POST["email"].strip(), password=request.POST["password"].strip()) except IntegrityError: ret["result"] = 10 except: ret["result"] = 10 user = None # this is not a good place to fire signal, but i need password for now # should create function createUser for future use if user: user.first_name = request.POST["fullname"].strip() import booki.account.signals booki.account.signals.account_created.send( sender=user, password=request.POST["password"]) try: user.save() # groups for groupName in simplejson.loads( request.POST.get("groups")): if groupName.strip() != '': sid = transaction.savepoint() try: group = BookiGroup.objects.get( url_name=groupName) group.members.add(user) except: transaction.savepoint_rollback(sid) else: transaction.savepoint_commit(sid) user2 = auth.authenticate( username=request.POST["username"].strip(), password=request.POST["password"].strip()) auth.login(request, user2) except: transaction.rollback() ret["result"] = 666 else: transaction.commit() else: transaction.rollback() if request.POST.get("method", "") == "signin": user = auth.authenticate(username=request.POST["username"].strip(), password=request.POST["password"].strip()) if user: auth.login(request, user) ret["result"] = 1 from django.core.urlresolvers import reverse ret["redirect"] = reverse('view_profile', args=[user.username]) else: try: usr = auth.models.User.objects.get( username=request.POST["username"]) # User does exist. Must be wrong password then ret["result"] = 3 except auth.models.User.DoesNotExist: # User does not exist ret["result"] = 2 try: resp = HttpResponse(simplejson.dumps(ret), mimetype="text/json") except: transaction.rollback() raise else: transaction.commit() return resp from django.core.urlresolvers import reverse redirect = request.GET.get('redirect', '') if (redirect == reverse('frontpage')): redirect = '' if request.GET.get('next', None): redirect = request.GET.get('next') joinGroups = [] for groupName in request.GET.getlist("group"): try: joinGroups.append(BookiGroup.objects.get(url_name=groupName)) except BookiGroup.DoesNotExist: pass try: resp = render_to_response( 'account/signin.html', { 'request': request, 'redirect': redirect, 'joingroups': joinGroups, 'limit_reached': limitReached }) except: transaction.rollback() raise else: transaction.commit() return resp
def signin(request): """ Django View. Gets called when user wants to signin or create new account. @type request: C{django.http.HttpRequest} @param request: Django Request """ from booki.utils.json_wrapper import simplejson from booki.editor.models import BookiGroup from django.core.exceptions import ObjectDoesNotExist from django.contrib import auth if request.POST.get("ajax", "") == "1": ret = {"result": 0} if request.POST.get("method", "") == "register": def _checkIfEmpty(key): return request.POST.get(key, "").strip() == "" def _doChecksForEmpty(): if _checkIfEmpty("username"): return 2 if _checkIfEmpty("email"): return 3 if _checkIfEmpty("password") or _checkIfEmpty("password2"): return 4 if _checkIfEmpty("fullname"): return 5 return 0 ret["result"] = _doChecksForEmpty() if ret["result"] == 0: # if there was no errors import re def _doCheckValid(): # check if it is valid username # - from 2 to 20 characters long # - word, number, ., _, - mtch = re.match('^[\w\d\_\.\-]{2,20}$', request.POST.get("username", "").strip()) if not mtch: return 6 # check if it is valid email if not bool(email_re.match(request.POST["email"].strip())): return 7 if request.POST.get("password", "") != request.POST.get("password2", "").strip(): return 8 if len(request.POST.get("password", "").strip()) < 6: return 9 if len(request.POST.get("fullname", "").strip()) > 30: return 11 # check if this user exists try: u = auth.models.User.objects.get(username=request.POST.get("username", "").strip()) return 10 except auth.models.User.DoesNotExist: pass return 0 ret["result"] = _doCheckValid() if ret["result"] == 0: ret["result"] = 1 user = None try: user = auth.models.User.objects.create_user(username=request.POST["username"].strip(), email=request.POST["email"].strip(), password=request.POST["password"].strip()) except IntegrityError: ret["result"] = 10 # this is not a good place to fire signal, but i need password for now # should create function createUser for future use if user: import booki.account.signals booki.account.signals.account_created.send(sender = user, password = request.POST["password"]) user.first_name = request.POST["fullname"].strip() try: user.save() # groups for groupName in simplejson.loads(request.POST.get("groups")): if groupName.strip() != '': sid = transaction.savepoint() try: group = BookiGroup.objects.get(url_name=groupName) group.members.add(user) except: transaction.savepoint_rollback(sid) else: transaction.savepoint_commit(sid) user2 = auth.authenticate(username=request.POST["username"].strip(), password=request.POST["password"].strip()) auth.login(request, user2) except: transaction.rollback() ret["result"] = 666 else: transaction.commit() if request.POST.get("method", "") == "signin": user = auth.authenticate(username=request.POST["username"].strip(), password=request.POST["password"].strip()) if user: auth.login(request, user) ret["result"] = 1 from django.core.urlresolvers import reverse ret["redirect"] = reverse('view_profile', args=[user.username]) else: try: usr = auth.models.User.objects.get(username=request.POST["username"]) # User does exist. Must be wrong password then ret["result"] = 3 except auth.models.User.DoesNotExist: # User does not exist ret["result"] = 2 transaction.commit() return HttpResponse(simplejson.dumps(ret), mimetype="text/json") from django.core.urlresolvers import reverse redirect = request.GET.get('redirect', '') if(redirect == reverse('frontpage')): redirect = '' if request.GET.get('next', None): redirect = request.GET.get('next') joinGroups = [] for groupName in request.GET.getlist("group"): try: joinGroups.append(BookiGroup.objects.get(url_name=groupName)) except BookiGroup.DoesNotExist: pass try: return render_to_response('account/signin.html', {"request": request, 'redirect': redirect, 'joingroups': joinGroups}) except: transaction.rollback() finally: transaction.commit()