def register(request, data=None, reg_form_model=UserRegistrationForm, reg_form_kwargs=None, auth_form_model=UsernameEmailAuthenticationForm, success_url_name='account_register_done', success_message=None, login_if_success=False, template='account/register.html', email_template=None, email_subject=None, email_sender=None, renderer=_r): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': if reg_form_kwargs is None: reg_form_kwargs = {} reg_form = reg_form_model(request.POST, **reg_form_kwargs) if reg_form.is_valid(): domain = request.get_host() new_user = reg_form.save(domain=domain, email_template=email_template, email_subject=email_subject, email_sender=email_sender) if login_if_success: username = new_user.username password = reg_form.cleaned_data.get( 'password1') # new_user.password is a hashed value auth_user = authenticate(username=username, password=password) login_authenticated_user(request, auth_user) else: pass success = True else: for error in reg_form.non_field_errors(): data['errors'].append(error) # might be tempted to do this, but it might display too many errors/multiple errors per field # so we will just handle it in the form's clean() method #for error in reg_form._errors.values(): #data['errors'].append(error) else: reg_form = reg_form_model(None) data['reg_form'] = reg_form if auth_form_model: # register page also has an auth form auth_form = auth_form_model(None) data['auth_form'] = auth_form if success: if success_message is not None: messages.success(request, success_message) response = redirect(reverse(success_url_name)) else: response = renderer(request, template, data=data) return response
def login_view(request, data=None, resend_confirmation_url_name='account_resend_confirmation', auth_form_model=UsernameEmailAuthenticationForm, default_next_url_name='account_login_redirect', template='account/login.html', renderer=_r): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': recaptcha_success = True google_recaptcha_response_token = request.POST.get('recaptcha', None) if google_recaptcha_response_token: from htk.lib.google.recaptcha.utils import google_recaptcha_site_verification request_ip = extract_request_ip(request) recaptcha_data = google_recaptcha_site_verification( google_recaptcha_response_token, request_ip) recaptcha_success = recaptcha_data.get('success', False) auth_form = auth_form_model(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() if not recaptcha_success: from htk.apps.accounts.events import failed_recaptcha_on_login failed_recaptcha_on_login(user, request=request) else: pass login_authenticated_user(request, user) success = True default_next_uri = reverse(default_next_url_name) next_uri = request.GET.get('next', default_next_uri) else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: msg = get_resend_confirmation_help_message( resend_confirmation_url_name, email=auth_user.email) data['errors'].append(msg) resend_confirmation_form = ResendConfirmationForm( {'email': auth_user.email}) data['resend_confirmation_form'] = resend_confirmation_form else: pass else: auth_form = auth_form_model(None) if success: response = redirect(next_uri) else: data['auth_form'] = auth_form response = renderer(request, template, data=data) return response
def register( request, data=None, reg_form_model=UserRegistrationForm, reg_form_kwargs=None, auth_form_model=UsernameEmailAuthenticationForm, success_url_name='account_register_done', success_message=None, login_if_success=False, template='account/register.html', email_template=None, email_subject=None, email_sender=None, renderer=_r ): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': if reg_form_kwargs is None: reg_form_kwargs = {} reg_form = reg_form_model(request.POST, **reg_form_kwargs) if reg_form.is_valid(): domain = request.get_host() new_user = reg_form.save(domain=domain, email_template=email_template, email_subject=email_subject, email_sender=email_sender) if login_if_success: username = new_user.username password = reg_form.cleaned_data.get('password1') # new_user.password is a hashed value auth_user = authenticate(username=username, password=password) login_authenticated_user(request, auth_user) else: pass success = True else: for error in reg_form.non_field_errors(): data['errors'].append(error) # might be tempted to do this, but it might display too many errors/multiple errors per field # so we will just handle it in the form's clean() method #for error in reg_form._errors.values(): #data['errors'].append(error) else: reg_form = reg_form_model(None) data['reg_form'] = reg_form if auth_form_model: # register page also has an auth form auth_form = auth_form_model(None) data['auth_form'] = auth_form if success: if success_message is not None: messages.success(request, success_message) response = redirect(reverse(success_url_name)) else: response = renderer(request, template, data=data) return response
def login_view(request): from htk.apps.accounts.forms.auth import UsernameEmailAuthenticationForm auth_form = UsernameEmailAuthenticationForm(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) response = json_response_okay() else: response = json_response_error() return response
def process_request(self, request): already_logged_in_user = request.user if hasattr(request, 'user') and request.user.is_authenticated() else None token = request.GET.get('token', None) token_user = authenticate(request=request, token=token) if token else None if token_user: if already_logged_in_user and token_user != already_logged_in_user: # mismatch between logged-in user and token user logout(request) else: login_authenticated_user(request, token_user) else: # no valid user found from token pass
def process_request(self, request): already_logged_in_user = request.user if hasattr( request, 'user') and request.user.is_authenticated() else None token = request.GET.get('token', None) token_user = authenticate(request=request, token=token) if token else None if token_user: if already_logged_in_user and token_user != already_logged_in_user: # mismatch between logged-in user and token user logout(request) else: login_authenticated_user(request, token_user) else: # no valid user found from token pass
def login_view( request, data=None, resend_confirmation_url_name='account_resend_confirmation', auth_form_model=UsernameEmailAuthenticationForm, default_next_url_name='account_login_redirect', template='account/login.html', renderer=_r ): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': auth_form = auth_form_model(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True default_next_uri = reverse(default_next_url_name) next_uri = request.GET.get('next', default_next_uri) else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: msg = get_resend_confirmation_help_message(resend_confirmation_url_name, email=auth_user.email) data['errors'].append(msg) resend_confirmation_form = ResendConfirmationForm({'email': auth_user.email}) data['resend_confirmation_form'] = resend_confirmation_form else: pass else: auth_form = auth_form_model(None) if success: response = redirect(next_uri) else: data['auth_form'] = auth_form response = renderer(request, template, data=data) return response
def login_view(request, data=None, resend_confirmation_url_name='account_resend_confirmation', auth_form_model=UsernameEmailAuthenticationForm, default_next_url_name='account_login_redirect', template='account/login.html', renderer=_r): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': auth_form = auth_form_model(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True default_next_uri = reverse(default_next_url_name) next_uri = request.GET.get('next', default_next_uri) else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: msg = get_resend_confirmation_help_message( resend_confirmation_url_name, email=auth_user.email) data['errors'].append(msg) resend_confirmation_form = ResendConfirmationForm( {'email': auth_user.email}) data['resend_confirmation_form'] = resend_confirmation_form else: pass else: auth_form = auth_form_model(None) if success: response = redirect(next_uri) else: data['auth_form'] = auth_form response = renderer(request, template, data=data) return response
def register_social_login( request, data=None, resend_confirmation_url_name='account_resend_confirmation', template='account/register_social_login.html', renderer=_r): """For when a user is already associated with this email and has a usable password set """ from htk.apps.accounts.forms.auth import SocialRegistrationAuthenticationForm if data is None: data = wrap_data(request) email = request.session.get(SOCIAL_REGISTRATION_SETTING_EMAIL) data['email'] = email data.update(csrf(request)) success = False if request.method == 'POST': auth_form = SocialRegistrationAuthenticationForm(email, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: msg = get_resend_confirmation_help_message( resend_confirmation_url_name, email=auth_user.email) data['errors'].append(msg) else: auth_form = SocialRegistrationAuthenticationForm(email) if success: response = redirect_to_social_auth_complete(request) else: data['auth_form'] = auth_form response = renderer(request, template, data=data) return response
def login_view(request, data=None, auth_form_model=UsernameEmailAuthenticationForm, default_next_url_name='account_login_redirect', template='account/login.html', renderer=_r): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': auth_form = auth_form_model(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True default_next_uri = reverse(default_next_url_name) next_uri = request.GET.get('next', default_next_uri) else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: data['errors'].append( 'Have you confirmed your email address yet? <a id="resend_confirmation" href="javascript:void(0);">Resend confirmation ></a>' ) resend_confirmation_form = ResendConfirmationForm( {'email': auth_user.email}) data['resend_confirmation_form'] = resend_confirmation_form else: pass else: auth_form = auth_form_model(None) if success: response = redirect(next_uri) else: data['auth_form'] = auth_form response = renderer(template, data) return response
def register_social_login( request, data=None, resend_confirmation_url_name='account_resend_confirmation', template='account/register_social_login.html', renderer=_r ): """For when a user is already associated with this email and has a usable password set """ from htk.apps.accounts.forms.auth import SocialRegistrationAuthenticationForm if data is None: data = wrap_data(request) email = request.session.get(SOCIAL_REGISTRATION_SETTING_EMAIL) data['email'] = email data.update(csrf(request)) success = False if request.method == 'POST': auth_form = SocialRegistrationAuthenticationForm(email, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: msg = get_resend_confirmation_help_message(resend_confirmation_url_name, email=auth_user.email) data['errors'].append(msg) else: auth_form = SocialRegistrationAuthenticationForm(email) if success: response = redirect_to_social_auth_complete(request) else: data['auth_form'] = auth_form response = renderer(request, template, data=data) return response
def login_view( request, data=None, auth_form_model=UsernameEmailAuthenticationForm, default_next_url_name='account_login_redirect', template='account/login.html', renderer=_r ): if data is None: data = wrap_data(request) data.update(csrf(request)) success = False if request.method == 'POST': auth_form = auth_form_model(None, request.POST) if auth_form.is_valid(): user = auth_form.get_user() login_authenticated_user(request, user) success = True default_next_uri = reverse(default_next_url_name) next_uri = request.GET.get('next', default_next_uri) else: for error in auth_form.non_field_errors(): data['errors'].append(error) auth_user = auth_form.get_user() if auth_user and not auth_user.is_active: data['errors'].append('Have you confirmed your email address yet? <a id="resend_confirmation" href="javascript:void(0);">Resend confirmation ></a>') resend_confirmation_form = ResendConfirmationForm({'email': auth_user.email}) data['resend_confirmation_form'] = resend_confirmation_form else: pass else: auth_form = auth_form_model(None) if success: response = redirect(next_uri) else: data['auth_form'] = auth_form response = renderer(template, data) return response