def password_change(request): template_name = 'accounts/password-change.html' url = settings.API_BASE_URL + '/accounts/password/change/' if request.POST: log.debug("POST dictionary contains :: " + str(request.POST)) password1 = request.POST.get('password1') password2 = request.POST.get('password2') api_data = { 'new_password1': password1, 'new_password2': password2, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data, is_authenticated=True) log.debug("password change returned :: " + str(results)) if results is not None: if results.status_code == 200: return redirect('password-change-done') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return handle_error(request, results.status_code) else: return render(request, template_name)
def register(request): template_name = 'accounts/register.html' url = settings.API_BASE_URL + '/accounts/register/' if request.POST: log.debug("POST dictionary contains :: " + str(request.POST)) email = request.POST.get('email') password = request.POST.get('password') api_data = {'username': email, 'email': email, 'password': password} results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data, is_authenticated=False) log.debug("register returned :: " + str(results)) if results is not None: if results.status_code == 200: return redirect('login') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return handle_error(request, results.status_code) else: return render(request, template_name)
def password_reset_confirm(request): template_name = 'accounts/password-reset-confirm.html' reset_template_name = 'accounts/password-reset.html' url = settings.API_BASE_URL + '/accounts/password/reset/confirm/' if request.POST: password1 = request.POST.get('password1') password2 = request.POST.get('password2') api_data = { 'new_password1': password1, 'new_password2': password2, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return redirect('password-reset-done') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return render(request, reset_template_name) else: return render(request, template_name)
def password_reset_token(request): reset_template_name = 'accounts/password-reset.html' url = settings.API_BASE_URL + '/accounts/password/reset/confirm/' if request.GET: token = request.GET.get('token') uid = request.GET.get('uid') api_data = { 'token': token, 'uid': uid, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return redirect('password-reset-confirm') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return render(request, reset_template_name) else: return redirect('password-reset')
def is_valid_token(self): url = settings.API_BASE_URL + '/api-token-verify/' try: token = None session_objects = Session.objects.all() for objects in session_objects: if not token: # log.debug("Examining session with pk :" + str(objects.pk)) # log.debug("Object :: " + str(objects.session_data)) session_data = objects.get_decoded() # log.debug("Session data :: " + str(session_data)) token = session_data['token'] api_data = {'token': token} response = csrf_request(request=None, url=url, api_data=api_data, request_type='POST', is_authenticated=False) log.debug("get_user_from_token returned response " + str(response)) if response.status_code is 200: return True else: return False except Exception as e: log.debug("Exception in is_valid_token = " + str(e)) pass return False
def verify_email(request): template_name = 'accounts/verify.html' url = settings.API_BASE_URL + '/accounts/verify-email/' if request.GET: key = request.GET.get('key') api_data = { 'key': key, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return render(request, template_name) else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return handle_error(request, results.status_code) else: return redirect('login')
def get_user_from_token(self, token, request): url = settings.API_BASE_URL + '/accounts/user/token/' api_data = {'token': token} try: response = csrf_request(request=request, url=url, api_data=api_data, request_type='POST', is_authenticated=True) # log.debug("get_user_from_token returned response " + str(response)) if response.status_code is 200: objects = response.json() user_data = objects['user'] user_data = json.loads(user_data) # log.debug(" user_data :: " + str(user_data)) try: user = User.objects.get(username=user_data['username']) # update the permissions on the user in case they have changed user.is_staff = user_data['is_staff'] user.is_active = user_data['is_active'] user.is_superuser = user_data['is_superuser'] user.save() except User.DoesNotExist: # Create a new user. Note that we can set password # to anything, because it won't be checked; the password # from settings.py will. user = User(username=user_data['username'], password='******') user.is_staff = user_data['is_staff'] user.is_active = user_data['is_active'] user.is_superuser = user_data['is_superuser'] user.save() return user except Exception as e: log.debug("Exception in get_user_from_token = " + str(e)) pass return None
def authenticate(self, username=None, password=None, request=None): url = settings.API_BASE_URL + '/login/' api_data = {'username': username, 'password': password, } response = csrf_request(request=request, url=url, request_type='POST', api_data=api_data, is_authenticated=False) #log.debug("Authenticate returned response " + str(response.status_code)) if response.status_code is 200: content = response.json() #log.debug("Authenticate returned " + str(response.text)) if request: request.session['token'] = content['token'] # log.debug("Token returned from authenticate :: " + str(request.session['token'])) return self.get_user_from_token(content['token'], request) return None
def password_reset(request): template_name = 'accounts/password-reset.html' url = settings.API_BASE_URL + '/accounts/password/reset/' if request.POST: email = request.POST.get('email') api_data = {'email': email} results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return redirect(settings.LOGIN_REDIRECT_URL) else: return handle_error(request, results.status_code) else: return HttpResponseRedirect('login') else: return render(request, template_name)
def verify_email(request): template_name = 'accounts/verify.html' url = settings.API_BASE_URL + '/accounts/verify-email/' if request.GET: key = request.GET.get('key') api_data = {'key': key, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return render(request, template_name) else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return handle_error(request, results.status_code) else: return redirect('login')
def authenticate(self, username=None, password=None, request=None): url = settings.API_BASE_URL + '/login/' api_data = { 'username': username, 'password': password, } response = csrf_request(request=request, url=url, request_type='POST', api_data=api_data, is_authenticated=False) #log.debug("Authenticate returned response " + str(response.status_code)) if response.status_code is 200: content = response.json() #log.debug("Authenticate returned " + str(response.text)) if request: request.session['token'] = content['token'] # log.debug("Token returned from authenticate :: " + str(request.session['token'])) return self.get_user_from_token(content['token'], request) return None
def password_reset_token(request): reset_template_name = 'accounts/password-reset.html' url = settings.API_BASE_URL + '/accounts/password/reset/confirm/' if request.GET: token = request.GET.get('token') uid = request.GET.get('uid') api_data = {'token': token, 'uid': uid, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return redirect('password-reset-confirm') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return render(request, reset_template_name) else: return redirect('password-reset')
def password_change(request): template_name = 'accounts/password-change.html' url = settings.API_BASE_URL + '/accounts/password/change/' if request.POST: log.debug("POST dictionary contains :: " + str(request.POST)) password1 = request.POST.get('password1') password2 = request.POST.get('password2') api_data = {'new_password1': password1, 'new_password2': password2, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data, is_authenticated=True) log.debug("password change returned :: " + str(results)) if results is not None: if results.status_code == 200: return redirect('password-change-done') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return handle_error(request, results.status_code) else: return render(request, template_name)
def password_reset_confirm(request): template_name = 'accounts/password-reset-confirm.html' reset_template_name = 'accounts/password-reset.html' url = settings.API_BASE_URL + '/accounts/password/reset/confirm/' if request.POST: password1 = request.POST.get('password1') password2 = request.POST.get('password2') api_data = {'new_password1': password1, 'new_password2': password2, } results = csrf_request(request=request, request_type='POST', url=url, api_data=api_data) if results is not None: if results.status_code == 200: return redirect('password-reset-done') else: return handle_error(request, results.status_code) else: # TODO is this the right template to send this to? return render(request, reset_template_name) else: return render(request, template_name)