Example #1
0
 def reactivation_email(self, user):
     """
     Send the reactivation email to the specified user,
     and return the response as json data.
     """
     return json.loads(reactivation_email_for_user(user).content)
Example #2
0
 def reactivation_email(self, user):
     """
     Send the reactivation email to the specified user,
     and return the response as json data.
     """
     return json.loads(reactivation_email_for_user(user).content)
Example #3
0
def ensure_user_information(
    strategy, auth_entry, backend=None, user=None, social=None, allow_inactive_user=False, *args, **kwargs
):
    """
    Ensure that we have the necessary information about a user (either an
    existing account or registration data) to proceed with the pipeline.
    """

    response = {}
    data = kwargs["response"]

    def dispatch_to_register():
        """Force user creation on login or register"""

        request = strategy.request
        data["terms_of_service"] = True
        data["honor_code"] = True
        data["password"] = make_random_password()
        # force name creation if it is empty in sso-profile
        data["name"] = " ".join([data.get("firstname", ""), data.get("lastname", "")]).strip() or data["username"]
        data["provider"] = backend.name

        if request.session.get("ExternalAuthMap"):
            del request.session["ExternalAuthMap"]

        try:
            user = User.objects.get(email=data["email"])
        except User.DoesNotExist:
            create_account_with_params(request, data)
            user = request.user
            user.is_active = True
            user.save()

        return {"user": user}

    if not user:
        if auth_entry in [AUTH_ENTRY_LOGIN_API, AUTH_ENTRY_REGISTER_API]:
            return HttpResponseBadRequest()
        elif auth_entry in [AUTH_ENTRY_LOGIN, AUTH_ENTRY_LOGIN_2]:
            response = dispatch_to_register()
        elif auth_entry in [AUTH_ENTRY_REGISTER, AUTH_ENTRY_REGISTER_2]:
            response = dispatch_to_register()
        elif auth_entry == AUTH_ENTRY_ACCOUNT_SETTINGS:
            raise AuthEntryError(backend, "auth_entry is wrong. Settings requires a user.")
        else:
            raise AuthEntryError(backend, "auth_entry invalid")
    else:
        user.email = data["email"]
        user.username = data["username"]
        user.first_name = data["firstname"]
        user.last_name = data["lastname"]
        user.save()

        try:
            user_profile = UserProfile.objects.get(user=user)
        except User.DoesNotExist:
            user_profile = None
        except User.MultipleObjectsReturned:
            user_profile = UserProfile.objects.filter(user=user)[0]

        if user_profile:
            user_profile.name = " ".join([data["firstname"], data["lastname"]]).strip() or data["username"]

    user = user or response.get("user")
    if user and not user.is_active:
        if allow_inactive_user:
            pass
        elif social is not None:
            reactivation_email_for_user(user)
            raise NotActivatedException(backend, user.email)

    # add roles for User
    permissions = kwargs.get("response", {}).get("permissions")
    if permissions is not None:
        try:
            set_roles_for_edx_users(user, permissions, strategy)
        except Exception as e:
            log.error(u"set_roles_for_edx_users error: {}".format(e))

    return response
Example #4
0
def ensure_user_information(strategy,
                            auth_entry,
                            backend=None,
                            user=None,
                            social=None,
                            allow_inactive_user=False,
                            *args,
                            **kwargs):
    """
    Ensure that we have the necessary information about a user (either an
    existing account or registration data) to proceed with the pipeline.
    """
    response = {}
    data = kwargs['response']
    try:
        data['firstname'] = data['Firstname']
    except KeyError:
        raise Exception("First name is required")

    try:
        data['email'] = data['Email']
    except KeyError:
        raise Exception("Email field is required")

    data['lastname'] = data.pop('Lastname') if data.get('Lastname') else ''

    data['username'] = re.sub('[\W_]', '', data['email'])

    def dispatch_to_register():
        """Force user creation on login or register"""

        request = strategy.request
        data['terms_of_service'] = True
        data['honor_code'] = True
        data['password'] = make_random_password()
        # force name creation if it is empty in sso-profile
        data['name'] = ' '.join([data['firstname'], data['lastname']
                                 ]).strip() or data['username']
        data['provider'] = backend.name

        if request.session.get('ExternalAuthMap'):
            del request.session['ExternalAuthMap']

        try:
            user = User.objects.get(email=data['email'])
        except User.DoesNotExist:
            try:
                create_account_with_params(request, data)
            except AccountValidationError:
                data['username'] = data['email']
                create_account_with_params(request, data)
            user = request.user
            user.is_active = True
            user.set_unusable_password()
            user.save()

        del data['password']

        return {'user': user}

    if not user:
        if auth_entry in [AUTH_ENTRY_LOGIN_API, AUTH_ENTRY_REGISTER_API]:
            return HttpResponseBadRequest()
        elif auth_entry in [AUTH_ENTRY_LOGIN, AUTH_ENTRY_LOGIN_2]:
            response = dispatch_to_register()
        elif auth_entry in [AUTH_ENTRY_REGISTER, AUTH_ENTRY_REGISTER_2]:
            response = dispatch_to_register()
        elif auth_entry == AUTH_ENTRY_ACCOUNT_SETTINGS:
            raise AuthEntryError(
                backend, 'auth_entry is wrong. Settings requires a user.')
        else:
            raise AuthEntryError(backend, 'auth_entry invalid')
    else:
        try:
            user = User.objects.get(username=data['username'],
                                    email=data['email'])
        except User.DoesNotExist:
            user.username = data['username']
            user.first_name = data['firstname']
            user.last_name = data['lastname']
            user.save()

        try:
            user_profile = UserProfile.objects.get(user=user)
        except User.DoesNotExist:
            user_profile = None
        except User.MultipleObjectsReturned:
            user_profile = UserProfile.objects.filter(user=user)[0]

        if user_profile:
            user_profile.name = ' '.join([data['firstname'], data['lastname']
                                          ]).strip() or data['username']

    user = user or response.get('user')
    if user and not user.is_active:
        if allow_inactive_user:
            pass
        elif social is not None:
            reactivation_email_for_user(user)
            raise NotActivatedException(backend, user.email)

    # add roles for User
    permissions = kwargs.get('response', {}).get('permissions')
    if permissions is not None:
        try:
            set_roles_for_edx_users(user, permissions, strategy)
        except Exception as e:
            log.error(u'set_roles_for_edx_users error: {}'.format(e))

    return response
Example #5
0
 def reactivation_email(self):
     """Send the reactivation email, and return the response as json data"""
     return json.loads(reactivation_email_for_user(self.user).content)
Example #6
0
 def reactivation_email(self):
     """Send the reactivation email, and return the response as json data"""
     return json.loads(reactivation_email_for_user(self.user).content)
def ensure_user_information(
    strategy, auth_entry, backend=None, user=None, social=None,
    allow_inactive_user=False, *args, **kwargs):
    """
    Ensure that we have the necessary information about a user (either an
    existing account or registration data) to proceed with the pipeline.
    """

    response = {}
    data = kwargs['response']

    def dispatch_to_register():
        """Force user creation on login or register"""

        request = strategy.request
        data['terms_of_service'] = True
        data['honor_code'] = True
        data['password'] = make_random_password()
        # force name creation if it is empty in sso-profile
        data['name'] = ' '.join([data.get('firstname', ''),
                                 data.get('lastname', '')]).strip() or data['username']
        data['provider'] = backend.name

        if request.session.get('ExternalAuthMap'):
            del request.session['ExternalAuthMap']

        try:
            user = User.objects.get(email=data['email'])
        except User.DoesNotExist:
            create_account_with_params(request, data)
            user = request.user
            user.first_name = data.get('firstname')
            user.last_name = data.get('lastname')
            user.is_active = True
            user.save()

        return {'user': user}

    if not user:
        if auth_entry in [AUTH_ENTRY_LOGIN_API, AUTH_ENTRY_REGISTER_API]:
            return HttpResponseBadRequest()
        elif auth_entry in [AUTH_ENTRY_LOGIN, AUTH_ENTRY_LOGIN_2]:
            response = dispatch_to_register()
        elif auth_entry in [AUTH_ENTRY_REGISTER, AUTH_ENTRY_REGISTER_2]:
            response = dispatch_to_register()
        elif auth_entry == AUTH_ENTRY_ACCOUNT_SETTINGS:
            raise AuthEntryError(
                backend, 'auth_entry is wrong. Settings requires a user.')
        else:
            raise AuthEntryError(backend, 'auth_entry invalid')
    else:
        if user.id != 1:
            user.email = data['email']
            user.username = data['username']
            user.first_name = data['firstname']
            user.last_name = data['lastname']
            user.save()
            
        try:
            user_profile = UserProfile.objects.get(user=user)
        except User.DoesNotExist:
            user_profile = None
        except User.MultipleObjectsReturned:
            user_profile = UserProfile.objects.filter(user=user)[0]

        if user_profile:
            user_profile.name = user.get_full_name()
            user_profile.goals = json.dumps(data.get('meta', {}))
            user_profile.save()

    user = user or response.get('user')
    if user and not user.is_active:
        if allow_inactive_user:
            pass
        elif social is not None:
            reactivation_email_for_user(user)  # зачем это надо?
            raise NotActivatedException(backend, user.email)

    # add roles for User
    permissions = kwargs.get('response', {}).get('permissions')
    if permissions is not None:
        try:
            set_roles_for_edx_users(user, permissions, strategy)
        except Exception as e:
            log.error(u'set_roles_for_edx_users error: {}'.format(e))

    return response
Example #8
0
def ensure_user_information(
    strategy, auth_entry, backend=None, user=None, social=None,
    allow_inactive_user=False, *args, **kwargs):
    """
    Ensure that we have the necessary information about a user (either an
    existing account or registration data) to proceed with the pipeline.
    """

    response = {}
    data = kwargs['response']
    display_name = data.get('display_name').split(" ")
    data['first_name'] = display_name[0]
    data['last_name'] = display_name[1] if len(display_name) >= 2 else ''
    data['name'] = data.get('display_name')
    data['username'] = data['user_login']

    def dispatch_to_register():
        """Force user creation on login or register"""

        request = strategy.request
        data['terms_of_service'] = "True"
        data['honor_code'] = 'True'
        data['password'] = make_random_password()

        data['provider'] = backend.name

        if request.session.get('ExternalAuthMap'):
            del request.session['ExternalAuthMap']

        try:
            user = User.objects.get(email=data['email'])
        except User.DoesNotExist:
            create_account_with_params(request, data)
            user = request.user
            user.first_name = data['first_name']
            user.last_name = data['last_name']
            user.is_active = True
            user.save()
            CourseCreator.objects.get_or_create(
                user=user,
                state=CourseCreator.UNREQUESTED
            )
        return {'user': user}

    if not user:
        if auth_entry in [AUTH_ENTRY_LOGIN_API, AUTH_ENTRY_REGISTER_API]:
            return HttpResponseBadRequest()
        elif auth_entry in [AUTH_ENTRY_LOGIN, AUTH_ENTRY_LOGIN_2]:
            response = dispatch_to_register()
        elif auth_entry in [AUTH_ENTRY_REGISTER, AUTH_ENTRY_REGISTER_2]:
            response = dispatch_to_register()
        elif auth_entry == AUTH_ENTRY_ACCOUNT_SETTINGS:
            raise AuthEntryError(
                backend, 'auth_entry is wrong. Settings requires a user.')
        else:
            raise AuthEntryError(backend, 'auth_entry invalid')
    else:
        if user.id != 1:
            user.email = data['email']
            user.username = data['username']
            user.first_name = data['first_name']
            user.last_name = data['last_name']
            user.save()
            CourseCreator.objects.get_or_create(
                user=user,
                state=CourseCreator.UNREQUESTED
            )
        try:
            user_profile = UserProfile.objects.get(user=user)
        except User.DoesNotExist:
            user_profile = None
        except User.MultipleObjectsReturned:
            user_profile = UserProfile.objects.filter(user=user)[0]

        if user_profile:
            user_profile.name = user.get_full_name()
            user_profile.save()

    user = user or response.get('user')
    if user and not user.is_active:
        if allow_inactive_user:
            pass
        elif social is not None:
            reactivation_email_for_user(user)
            raise AuthEntryError(backend, user.email)

    return {'user': user}
def ensure_user_information(strategy,
                            auth_entry,
                            backend=None,
                            user=None,
                            social=None,
                            allow_inactive_user=False,
                            *args,
                            **kwargs):
    """
    Ensure that we have the necessary information about a user (either an
    existing account or registration data) to proceed with the pipeline.
    """

    response = {}
    data = kwargs['response']
    display_name = data.get('display_name').split(" ")
    data['first_name'] = display_name[0]
    data['last_name'] = display_name[1] if len(display_name) >= 2 else ''
    data['name'] = data.get('display_name')
    data['username'] = data['user_login']

    def dispatch_to_register():
        """Force user creation on login or register"""

        request = strategy.request
        data['terms_of_service'] = "True"
        data['honor_code'] = 'True'
        data['password'] = make_random_password()

        data['provider'] = backend.name

        if request.session.get('ExternalAuthMap'):
            del request.session['ExternalAuthMap']

        try:
            user = User.objects.get(email=data['email'])
        except User.DoesNotExist:
            create_account_with_params(request, data)
            user = request.user
            user.first_name = data['first_name']
            user.last_name = data['last_name']
            user.is_active = True
            user.save()
            CourseCreator.objects.get_or_create(
                user=user, state=CourseCreator.UNREQUESTED)
        return {'user': user}

    if not user:
        if auth_entry in [AUTH_ENTRY_LOGIN_API, AUTH_ENTRY_REGISTER_API]:
            return HttpResponseBadRequest()
        elif auth_entry in [AUTH_ENTRY_LOGIN, AUTH_ENTRY_LOGIN_2]:
            response = dispatch_to_register()
        elif auth_entry in [AUTH_ENTRY_REGISTER, AUTH_ENTRY_REGISTER_2]:
            response = dispatch_to_register()
        elif auth_entry == AUTH_ENTRY_ACCOUNT_SETTINGS:
            raise AuthEntryError(
                backend, 'auth_entry is wrong. Settings requires a user.')
        else:
            raise AuthEntryError(backend, 'auth_entry invalid')
    else:
        if user.id != 1:
            user.email = data['email']
            user.username = data['username']
            user.first_name = data['first_name']
            user.last_name = data['last_name']
            user.save()
            CourseCreator.objects.get_or_create(
                user=user, state=CourseCreator.UNREQUESTED)
        try:
            user_profile = UserProfile.objects.get(user=user)
        except User.DoesNotExist:
            user_profile = None
        except User.MultipleObjectsReturned:
            user_profile = UserProfile.objects.filter(user=user)[0]

        if user_profile:
            user_profile.name = user.get_full_name()
            user_profile.save()

    user = user or response.get('user')
    if user and not user.is_active:
        if allow_inactive_user:
            pass
        elif social is not None:
            reactivation_email_for_user(user)
            raise AuthEntryError(backend, user.email)

    return {'user': user}