Exemplo n.º 1
0
 def email_handler(self, request):
     email = request.data.get('email')
     invalid_email_error = get_email_validation_error(email)
     email_exists_error = get_email_existence_validation_error(email)
     # We prefer seeing for invalidity first.
     # Some invalid emails (like a blank one for superusers) may exist.
     return invalid_email_error or email_exists_error
Exemplo n.º 2
0
def validate_secondary_email(account_recovery, new_email):
    """
    Enforce valid email addresses.
    """

    from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error, \
        get_secondary_email_validation_error

    if get_email_validation_error(new_email):
        raise ValueError(_('Valid e-mail address required.'))

    if new_email == account_recovery.secondary_email:
        raise ValueError(_('Old email is the same as the new email.'))

    # Make sure that secondary email address is not same as user's primary email.
    if new_email == account_recovery.user.email:
        raise ValueError(_('Cannot be same as your sign in email address.'))

    # Make sure that secondary email address is not same as any of the primary emails currently in use or retired
    if email_exists_or_retired(new_email):
        raise ValueError(
            _("It looks like {email} belongs to an existing account. Try again with a different email address."
              ).format(email=new_email))

    message = get_secondary_email_validation_error(new_email)
    if message:
        raise ValueError(message)
Exemplo n.º 3
0
 def email_handler(self, request):
     email = request.data.get('email')
     invalid_email_error = get_email_validation_error(email)
     email_exists_error = get_email_existence_validation_error(email)
     # We prefer seeing for invalidity first.
     # Some invalid emails (like a blank one for superusers) may exist.
     return invalid_email_error or email_exists_error
Exemplo n.º 4
0
def validate_secondary_email(account_recovery, new_email):
    """
    Enforce valid email addresses.
    """
    from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error, \
        get_email_existence_validation_error, get_secondary_email_validation_error

    if get_email_validation_error(new_email):
        raise ValueError(_('Valid e-mail address required.'))

    if new_email == account_recovery.secondary_email:
        raise ValueError(_('Old email is the same as the new email.'))

    # Make sure that secondary email address is not same as user's primary email.
    if new_email == account_recovery.user.email:
        raise ValueError(_('Cannot be same as your sign in email address.'))

    # Make sure that secondary email address is not same as any of the primary emails.
    message = get_email_existence_validation_error(new_email)
    if message:
        raise ValueError(message)

    message = get_secondary_email_validation_error(new_email)
    if message:
        raise ValueError(message)
Exemplo n.º 5
0
def validate_secondary_email(account_recovery, new_email):
    """
    Enforce valid email addresses.
    """

    from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error, \
        get_secondary_email_validation_error

    if get_email_validation_error(new_email):
        raise ValueError(_('Valid e-mail address required.'))

    if new_email == account_recovery.secondary_email:
        raise ValueError(_('Old email is the same as the new email.'))

    # Make sure that secondary email address is not same as user's primary email.
    if new_email == account_recovery.user.email:
        raise ValueError(_('Cannot be same as your sign in email address.'))

    # Make sure that secondary email address is not same as any of the primary emails currently in use or retired
    if email_exists_or_retired(new_email):
        raise ValueError(
            _("It looks like {email} belongs to an existing account. Try again with a different email address.").format(
                email=new_email
            )
        )

    message = get_secondary_email_validation_error(new_email)
    if message:
        raise ValueError(message)
Exemplo n.º 6
0
 def email_handler(self, request):
     """ Validates whether the email address is valid. """
     email = request.data.get('email')
     invalid_email_error = get_email_validation_error(email, self.api_version)
     email_exists_error = get_email_existence_validation_error(email, self.api_version)
     # We prefer seeing for invalidity first.
     # Some invalid emails (like a blank one for superusers) may exist.
     return invalid_email_error or email_exists_error
Exemplo n.º 7
0
    def post(self, request):
        """
        **Use Case**

            * Send favorite program through email to user for later learning.

        **Example Request for program**

            POST /api/v1/save/program/

        **Example POST Request for program**

            {
                "email": "*****@*****.**",
                "program_uuid": "587f6abe-bfa4-4125-9fbe-4789bf3f97f1"
            }
        """
        user = request.user
        data = request.data
        program_uuid = data.get('program_uuid')
        email = data.get('email')
        user_id = request.user.id
        pref_lang = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME, 'en')
        send_to_self = bool(not request.user.is_anonymous
                            and request.user.email == email)

        if getattr(request, 'limited', False):
            return Response({'error_code': 'rate-limited'}, status=403)

        if get_email_validation_error(email):
            return Response({'error_code': 'incorrect-email'}, status=400)

        if not program_uuid:
            return Response({'error_code': 'program-uuid-missing'}, status=400)

        program = get_programs(uuid=program_uuid)
        SavedProgram.objects.update_or_create(email=email,
                                              program_uuid=program_uuid,
                                              defaults={
                                                  'user_id': user.id,
                                                  'reminder_email_sent': False,
                                              })
        if program:
            program_data = {
                'program': program,
                'send_to_self': send_to_self,
                'user_id': user_id,
                'pref-lang': pref_lang,
                'type': 'program',
                'reminder': False,
                'braze_event': USER_SEND_SAVE_FOR_LATER_EMAIL,
            }
            if send_email(email, program_data):
                return Response({'result': 'success'}, status=200)
            else:
                return Response({'error_code': 'email-not-send'}, status=400)

        return Response({'error_code': 'program-not-found'}, status=404)
Exemplo n.º 8
0
    def post(self, request):
        """
        **Use Case**

            * Send favorite course through email to user for later learning.

        **Example Request for course**

            POST /api/v1/save/course/

        **Example POST Request for course**

            {
                "email": "*****@*****.**",
                "course_id": "course-v1:edX+DemoX+2021",
                "marketing_url": "https://test.com",
                "org_img_url": "https://test.com/logo.png",
                "weeks_to_complete": 7,
                "min_effort": 4,
                "max_effort": 5,

            }
        """
        user = request.user
        data = request.data
        course_id = data.get('course_id')
        email = data.get('email')

        if getattr(request, 'limited', False):
            return Response({'error_code': 'rate-limited'}, status=403)

        if get_email_validation_error(email):
            return Response({'error_code': 'incorrect-email'}, status=400)

        try:
            course_key = CourseKey.from_string(course_id)
            course = CourseOverview.get_from_id(course_key)
        except InvalidKeyError:
            return Response({'error_code': 'invalid-course-key'}, status=400)
        except CourseOverview.DoesNotExist:
            return Response({'error_code': 'course-not-found'}, status=404)

        SavedCourse.objects.update_or_create(
            user_id=user.id,
            email=email,
            course_id=course_id,
        )
        course_data = {
            'course': course,
            'type': 'course',
        }
        if send_email(request, email, course_data):
            return Response({'result': 'success'}, status=200)
        else:
            return Response({'error_code': 'email-not-send'}, status=400)
Exemplo n.º 9
0
    def post(self, request):
        """
        **Use Case**

            * Send favorite program through email to user for later learning.

        **Example Request for program**

            POST /api/v1/save/program/

        **Example POST Request for program**

            {
                "email": "*****@*****.**",
                "program_uuid": "587f6abe-bfa4-4125-9fbe-4789bf3f97f1"
            }
        """
        user = request.user
        data = request.data
        program_uuid = data.get('program_uuid')
        email = data.get('email')

        if getattr(request, 'limited', False):
            return Response({'error_code': 'rate-limited'}, status=403)

        if get_email_validation_error(email):
            return Response({'error_code': 'incorrect-email'}, status=400)

        if not program_uuid:
            return Response({'error_code': 'program-uuid-missing'}, status=400)

        program = get_programs(uuid=program_uuid)
        SavedProgram.objects.update_or_create(
            user_id=user.id,
            email=email,
            program_uuid=program_uuid,
        )
        if program:
            program_data = {
                'program': program,
                'type': 'program',
            }
            if send_email(request, email, program_data):
                return Response({'result': 'success'}, status=200)
            else:
                return Response({'error_code': 'email-not-send'}, status=400)

        return Response({'error_code': 'program-not-found'}, status=404)
Exemplo n.º 10
0
def validate_secondary_email(user, new_email):
    """
    Enforce valid email addresses.
    """

    from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error, \
        get_secondary_email_validation_error

    if get_email_validation_error(new_email):
        raise ValueError(_('Valid e-mail address required.'))

    # Make sure that if there is an active recovery email address, that is not the same as the new one.
    if hasattr(user, "account_recovery"):
        if user.account_recovery.is_active and new_email == user.account_recovery.secondary_email:
            raise ValueError(_('Old email is the same as the new email.'))

    # Make sure that secondary email address is not same as user's primary email.
    if new_email == user.email:
        raise ValueError(_('Cannot be same as your sign in email address.'))

    message = get_secondary_email_validation_error(new_email)
    if message:
        raise ValueError(message)
Exemplo n.º 11
0
    def post(self, request):
        """
        **Use Case**

            * Send favorite course through email to user for later learning.

        **Example Request for course**

            POST /api/v1/save/course/

        **Example POST Request for course**

            {
                "email": "*****@*****.**",
                "course_id": "course-v1:edX+DemoX+2021",
                "marketing_url": "https://test.com",
                "org_img_url": "https://test.com/logo.png",
                "weeks_to_complete": 7,
                "min_effort": 4,
                "max_effort": 5,

            }
        """
        user = request.user
        data = request.data
        course_id = data.get('course_id')
        email = data.get('email')
        org_img_url = data.get('org_img_url')
        marketing_url = data.get('marketing_url')
        weeks_to_complete = data.get('weeks_to_complete', 0)
        min_effort = data.get('min_effort', 0)
        max_effort = data.get('max_effort', 0)
        user_id = request.user.id
        pref_lang = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME, 'en')
        send_to_self = bool(not request.user.is_anonymous
                            and request.user.email == email)

        if getattr(request, 'limited', False):
            return Response({'error_code': 'rate-limited'}, status=403)

        if get_email_validation_error(email):
            return Response({'error_code': 'incorrect-email'}, status=400)

        try:
            course_key = CourseKey.from_string(course_id)
            course = CourseOverview.get_from_id(course_key)
        except InvalidKeyError:
            return Response({'error_code': 'invalid-course-key'}, status=400)
        except CourseOverview.DoesNotExist:
            return Response({'error_code': 'course-not-found'}, status=404)

        SavedCourse.objects.update_or_create(
            user_id=user.id,
            email=email,
            course_id=course_id,
            org_img_url=org_img_url,
            marketing_url=marketing_url,
            weeks_to_complete=weeks_to_complete,
            min_effort=min_effort,
            max_effort=max_effort,
            reminder_email_sent=False,
        )
        course_data = {
            'course': course,
            'send_to_self': send_to_self,
            'user_id': user_id,
            'pref-lang': pref_lang,
            'org_img_url': org_img_url,
            'marketing_url': marketing_url,
            'weeks_to_complete': weeks_to_complete,
            'min_effort': min_effort,
            'max_effort': max_effort,
            'type': 'course',
            'reminder': False,
            'braze_event': USER_SEND_SAVE_FOR_LATER_EMAIL,
        }
        if send_email(email, course_data):
            return Response({'result': 'success'}, status=200)
        else:
            return Response({'error_code': 'email-not-send'}, status=400)