def index(request): """Main login view""" #TODO: whatif the seafile password change? # the user should with it's old password, and should be able to # enter its new password and resync justlogout = False autherror = False # if authenticated, redirect to /private and no public forms if not settings.ALLOW_PUBLIC and request.user.is_authenticated(): return HttpResponseRedirect(reverse('private')) # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = LoginForm(request.POST) # check whether it's valid: if form.is_valid(): email = form.cleaned_data['email'] password = form.cleaned_data['password'] nextstep = ( 'index' if (settings.ALLOW_PUBLIC and settings.PUBLIC_NEED_AUTH) else 'private' ) try: return _log(request, email, password, nextstep) except AuthError: autherror = True # if a GET (or any other method) we'll create a blank form else: form = LoginForm() if 'action' in request.GET: justlogout = (request.GET['action'] == 'logout') return render(request, 'seafform/index.html', { 'loginform': form, 'autherror': autherror, 'justlogout': justlogout, 'seaf_root': settings.SEAFILE_ROOT, 'allow_public': settings.ALLOW_PUBLIC, 'public_needauth': settings.PUBLIC_NEED_AUTH, 'authenticated': request.user.is_authenticated(), 'public_forms': Form.objects.filter(public=True).\ order_by('-creation_datetime'), 'show_public': ( settings.ALLOW_PUBLIC and ( request.user.is_authenticated() or not settings.PUBLIC_NEED_AUTH )), })
def index(request): """Main login view""" #TODO: whatif the seafile password change? # the user should with it's old password, and should be able to # enter its new password and resync justlogout = False autherror = False seaf_root = settings.SEAFILE_ROOT # if authenticated, redirect to /private if request.user.is_authenticated(): return HttpResponseRedirect(reverse('private')) # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = LoginForm(request.POST) # check whether it's valid: if form.is_valid(): email = form.cleaned_data['email'] password = form.cleaned_data['password'] user = authenticate(username=email, password=password) # if known user: if user is not None and user.is_active: login(request, user) # login, -> /private/ return HttpResponseRedirect(reverse('private')) elif user is not None: # not active autherror = True else: # try to connect to seafile using credentials seaf = Seafile(seaf_root) try: seaf.authenticate(email, password) except AuthError: autherror = True else: token = seaf.token # create new user, save the token user = User.objects.create_user(email, email, password) user.save() seafuser = SeafileUser(user=user, seafroot=seaf_root, seaftoken=token) seafuser.save() # login user2 = authenticate(username=email, password=password) login(request, user2) # -> /private/ return HttpResponseRedirect(reverse('private')) # if a GET (or any other method) we'll create a blank form else: form = LoginForm() if 'action' in request.GET: justlogout = (request.GET['action'] == 'logout') return render(request, 'seafform/index.html', { 'loginform': form, 'autherror': autherror, 'justlogout': justlogout, 'seaf_root': seaf_root, })