Example #1
0
def attempt_registration(request):
    # Check that the password is long enough
    if len(request.POST['password']) < settings.USER_PASSWORD_LENGTH:
        return None, 'too_short_password'

    # Check that the email address is valid
    if not validator.email(request.POST['email']):
        return None, 'invalid_email'

    try:
        user = verify_memberid(
            ip_address=request.META['REMOTE_ADDR'],
            memberid=request.POST['memberid'],
            country_code=request.POST['country'],
            zipcode=request.POST['zipcode'],
        )

        if not user.is_inactive:
            return None, 'user_exists'

        user.set_contact_info({'email': request.POST['email'].strip()})
        user.is_inactive = False
        user.activated = datetime.now()
        user.set_consent_accepted_privacy_policy_date(None, False)
        user.set_password(request.POST['password'])
        user.save()

        authenticate(user=user)
        log_user_in(request, user)

        try:
            message = render_to_string('common/user/login/registered_email.txt', request=request)
            send_mail(EMAIL_REGISTERED_SUBJECT, message, settings.DEFAULT_FROM_EMAIL, [user.get_email()])
        except (SMTPException, SSLError, UnicodeEncodeError):
            # Silently log and ignore this error. Consider warning the user that the email wasn't sent?
            logger.warning(
                "Klarte ikke å sende registreringskvitteringepost",
                exc_info=sys.exc_info(),
                extra={'request': request}
            )

        return user, None

    except MemberidLookupsExceeded:
        return None, 'memberid_lookups_exceeded'

    except CountryDoesNotExist:
        raise PermissionDenied

    except (NoMatchingMemberid, ActorIsNotPersonalMember, ValueError):
        return None, 'invalid_memberid'
Example #2
0
def search_for_existing_member(request):
    if not request.is_ajax() or request.method != 'POST':
        raise PermissionDenied

    post_data = json.loads(request.POST['data'])
    if not all([q in post_data for q in ['memberid', 'country_code', 'zipcode']]):
        # Some clients seem to send empty query dicts
        raise PermissionDenied

    context = {
        'adult_age': settings.MEMBERSHIP['AGES']['MAIN'],
    }

    try:
        context['user_result'] = verify_memberid(
            ip_address=request.META['REMOTE_ADDR'],
            memberid=post_data['memberid'],
            country_code=post_data['country_code'],
            zipcode=post_data['zipcode'],
        )
        success = True

    except MemberidLookupsExceeded:
        context['memberid_lookups_exceeded'] = True
        success = False

    except CountryDoesNotExist:
        raise PermissionDenied

    except ActorIsNotPersonalMember:
        context['actor_is_not_member'] = True
        success = False

    except (NoMatchingMemberid, ValueError):
        context['no_match'] = True
        success = False

    return HttpResponse(json.dumps({
        'html': render_to_string('common/user/account/family/add_members_search_result.html', context, request=request),
        'success': success,
    }))
Example #3
0
def register_membership(request):
    """This view should reuse the standard registration logic in user/login/util and still merge the user objects
    instead of reimplementing the logic."""
    if request.user.is_member():
        return redirect('user:home')

    if request.method == 'GET':
        context = {
            'memberid_lookups_limit': settings.MEMBERID_LOOKUPS_LIMIT,
            'countries': FocusCountry.get_sorted()
        }
        return render(request, 'common/user/account/register_membership.html', context)
    elif request.method == 'POST':
        try:
            user = request.user
            verified_user = verify_memberid(
                ip_address=request.META['REMOTE_ADDR'],
                memberid=request.POST['memberid'],
                country_code=request.POST['country'],
                zipcode=request.POST['zipcode'],
            )

            if request.POST['email-equal'] == 'true':
                # Focus-email is empty, or equal to this email, so just use it
                chosen_email = user.get_email()
            elif request.POST['email-choice'] == 'sherpa':
                chosen_email = user.get_email()
            elif request.POST['email-choice'] == 'focus':
                chosen_email = verified_user.get_email()
            elif request.POST['email-choice'] == 'custom':
                # Check that the email address is valid
                if not validator.email(request.POST['email']):
                    messages.error(request, 'invalid_email')
                    return redirect('user:register_membership')
                chosen_email = request.POST['email']
            else:
                raise Exception("Missing email-equal / email-choise-parameters")

            # Check that the user doesn't already have an account
            if not verified_user.is_inactive:
                messages.error(request, 'user_exists')
                return redirect('user:register_membership')

            # Ok, registration successful, update the user

            # The verified user might be pending. The merge method only merges related objects, so if that's the case,
            # set the new user's state to pending.
            if verified_user.is_pending:
                user.is_pending = True
                user.save()

            # The verification lookup will ensure there's already an inactive user, pending or not, so merge them
            user.merge_with(verified_user, move_password=True) # This will delete the other user

            # Point the user to its corresponding memberid and clear other personal information
            user.identifier = request.POST['memberid']
            user.memberid = request.POST['memberid']
            user.first_name = ''
            user.last_name = ''
            user.email = ''
            user.save()

            # Save the chosen email in Focus
            user.set_contact_info({'email': chosen_email})

            return redirect('user:home')

        except MemberidLookupsExceeded:
            messages.error(request, 'memberid_lookups_exceeded')
            return redirect('user:register_membership')

        except CountryDoesNotExist:
            raise PermissionDenied

        except (NoMatchingMemberid, ActorIsNotPersonalMember, ValueError):
            messages.error(request, 'invalid_memberid')
            return redirect('user:register_membership')