コード例 #1
0
ファイル: base.py プロジェクト: vipulchhabra99/oppia
    def __init__(self, request, response):  # pylint: disable=super-init-not-called
        # Set self.request, self.response and self.app.
        self.initialize(request, response)

        self.start_time = datetime.datetime.utcnow()

        # Initializes the return dict for the handlers.
        self.values = {}

        self.gae_id = current_user_services.get_current_gae_id()
        self.user_id = None
        self.username = None
        self.partially_logged_in = False

        if self.gae_id:
            user_settings = user_services.get_user_settings_by_gae_id(
                self.gae_id, strict=False)
            if user_settings is None:
                email = current_user_services.get_current_user_email()
                user_settings = user_services.create_new_user(
                    self.gae_id, email)
            self.values['user_email'] = user_settings.email
            self.user_id = user_settings.user_id

            if (self.REDIRECT_UNFINISHED_SIGNUPS
                    and not user_services.has_fully_registered(
                        user_settings.user_id)):
                _clear_login_cookies(self.response.headers)
                self.partially_logged_in = True
            else:
                self.username = user_settings.username
                self.values['username'] = self.username
                # In order to avoid too many datastore writes, we do not bother
                # recording a log-in if the current time is sufficiently close
                # to the last log-in time.
                if (user_settings.last_logged_in is None
                        or not utils.are_datetimes_close(
                            datetime.datetime.utcnow(),
                            user_settings.last_logged_in)):
                    user_services.record_user_logged_in(self.user_id)

        self.role = (feconf.ROLE_ID_GUEST
                     if self.user_id is None else user_settings.role)
        self.user = user_services.UserActionsInfo(self.user_id)

        self.is_super_admin = (
            current_user_services.is_current_user_super_admin())

        self.values['iframed'] = False
        self.values['is_moderator'] = user_services.is_at_least_moderator(
            self.user_id)
        self.values['is_admin'] = user_services.is_admin(self.user_id)
        self.values['is_topic_manager'] = (user_services.is_topic_manager(
            self.user_id))
        self.values['is_super_admin'] = self.is_super_admin

        if self.request.get('payload'):
            self.payload = json.loads(self.request.get('payload'))
        else:
            self.payload = None
コード例 #2
0
    def _migrate_user_id(snapshot_model):
        """Fix the assignee_id in commit_cmds in snapshot metadata and commit
        log models. This is only run on models that have commit_cmds of length
        two. This is stuff that was missed in the user ID migration.

        Args:
            snapshot_model: BaseSnapshotMetadataModel. Snapshot metadata model
                to migrate.

        Returns:
            (str, str). Result info, first part is result message, second is
            additional info like IDs.
        """
        # Only commit_cmds of length 2 are processed by this method.
        assert len(snapshot_model.commit_cmds) == 2
        new_user_ids = [None, None]
        for i, commit_cmd in enumerate(snapshot_model.commit_cmds):
            assignee_id = commit_cmd['assignee_id']
            if (commit_cmd['cmd'] == rights_domain.CMD_CHANGE_ROLE
                    and not user_services.is_user_id_correct(assignee_id)):
                user_settings = user_services.get_user_settings_by_gae_id(
                    assignee_id)
                if user_settings is None:
                    return ('MIGRATION_FAILURE', (snapshot_model.id,
                                                  assignee_id))

                new_user_ids[i] = user_settings.user_id

        # This loop is used for setting the actual commit_cmds and is separate
        # because if the second commit results in MIGRATION_FAILURE we do not
        # want to set the first one either. We want to either set the correct
        # user IDs in both commits or we don't want to set it at all.
        for i in python_utils.RANGE(len(snapshot_model.commit_cmds)):
            if new_user_ids[i] is not None:
                snapshot_model.commit_cmds[i]['assignee_id'] = new_user_ids[i]

        commit_log_model = (
            exp_models.ExplorationCommitLogEntryModel.get_by_id(
                'rights-%s-%s' % (snapshot_model.get_unversioned_instance_id(),
                                  snapshot_model.get_version_string())))
        if commit_log_model is None:
            snapshot_model.put(update_last_updated_time=False)
            return ('MIGRATION_SUCCESS_MISSING_COMMIT_LOG', snapshot_model.id)

        commit_log_model.commit_cmds = snapshot_model.commit_cmds

        def _put_both_models():
            """Put both models into the datastore together."""
            snapshot_model.put(update_last_updated_time=False)
            commit_log_model.put(update_last_updated_time=False)

        transaction_services.run_in_transaction(_put_both_models)
        return ('MIGRATION_SUCCESS', snapshot_model.id)
コード例 #3
0
def is_feature_enabled(feature_name):
    """A short-form method for server-side usage. This method evaluates and
    returns the values of the feature flag, using context from the server only.

    Args:
        feature_name: str. The name of the feature flag that needs to
            be evaluated.

    Returns:
        bool. The value of the feature flag, True if it's enabled.
    """
    user_settings = user_services.get_user_settings_by_gae_id(
        current_user_services.get_current_gae_id())
    return _evaluate_feature_flag_value_for_server(feature_name, user_settings)
コード例 #4
0
    def test_pre_delete_user_without_activities(self):
        user_models.UserSubscriptionsModel(id=self.user_1_id,
                                           activity_ids=[],
                                           collection_ids=[]).put()

        user_settings = user_services.get_user_settings(self.user_1_id)
        self.assertFalse(user_settings.deleted)

        wipeout_service.pre_delete_user(self.user_1_id)

        user_settings = user_services.get_user_settings_by_gae_id(
            self.user_1_gae_id)
        self.assertTrue(user_settings.deleted)

        pending_deletion_model = (
            user_models.PendingDeletionRequestModel.get_by_id(self.user_1_id))
        self.assertEqual(pending_deletion_model.exploration_ids, [])
        self.assertEqual(pending_deletion_model.collection_ids, [])
コード例 #5
0
    def __init__(self, request, response):  # pylint: disable=super-init-not-called
        # Set self.request, self.response and self.app.
        self.initialize(request, response)

        self.start_time = datetime.datetime.utcnow()

        # Initializes the return dict for the handlers.
        self.values = {}

        if self.request.get('payload'):
            self.payload = json.loads(self.request.get('payload'))
        else:
            self.payload = None
        self.iframed = False

        self.is_super_admin = (
            current_user_services.is_current_user_super_admin())
        if feconf.ENABLE_MAINTENANCE_MODE and not self.is_super_admin:
            return

        self.gae_id = current_user_services.get_current_gae_id()
        self.user_id = None
        self.username = None
        self.partially_logged_in = False
        self.user_is_scheduled_for_deletion = False

        if self.gae_id:
            user_settings = user_services.get_user_settings_by_gae_id(
                self.gae_id, strict=False)
            if user_settings is None:
                # If the user settings are not yet created and the request leads
                # to signup page create a new user settings. Otherwise logout
                # the not-fully registered user.
                email = current_user_services.get_current_user_email()
                if 'signup?' in self.request.uri:
                    user_settings = user_services.create_new_user(
                        self.gae_id, email)
                else:
                    logging.error(
                        'Cannot find user %s with email %s on page %s' %
                        (self.gae_id, email, self.request.uri))
                    _clear_login_cookies(self.response.headers)
                    return

            self.values['user_email'] = user_settings.email
            self.user_id = user_settings.user_id

            if user_settings.deleted:
                self.user_is_scheduled_for_deletion = user_settings.deleted
            elif (self.REDIRECT_UNFINISHED_SIGNUPS
                  and not user_services.has_fully_registered_account(
                      user_settings.user_id)):
                self.partially_logged_in = True
            else:
                self.username = user_settings.username
                self.values['username'] = self.username
                # In order to avoid too many datastore writes, we do not bother
                # recording a log-in if the current time is sufficiently close
                # to the last log-in time.
                if (user_settings.last_logged_in is None
                        or not utils.are_datetimes_close(
                            datetime.datetime.utcnow(),
                            user_settings.last_logged_in)):
                    user_services.record_user_logged_in(self.user_id)

        self.role = (feconf.ROLE_ID_GUEST
                     if self.user_id is None else user_settings.role)
        self.user = user_services.UserActionsInfo(self.user_id)

        self.values['is_moderator'] = user_services.is_at_least_moderator(
            self.user_id)
        self.values['is_admin'] = user_services.is_admin(self.user_id)
        self.values['is_topic_manager'] = (user_services.is_topic_manager(
            self.user_id))
        self.values['is_super_admin'] = self.is_super_admin