예제 #1
0
파일: profile.py 프로젝트: maitbayev/oppia
 def get(self, username):
     user_id = user_services.get_user_id_from_username(username)
     if user_id is None:
         raise self.PageNotFoundException
     user_settings = user_services.get_user_settings(user_id)
     self.values.update({"profile_picture_data_url_for_username": user_settings.profile_picture_data_url})
     self.render_json(self.values)
예제 #2
0
    def test_get_user_id_from_username(self):
        user_id = "someUser"
        username = "******"
        user_email = "*****@*****.**"

        user_services._create_user(user_id, user_email)
        user_services.set_username(user_id, username)
        self.assertEquals(user_services.get_username(user_id), username)

        # Handle usernames that exist.
        self.assertEquals(user_services.get_user_id_from_username(username), user_id)

        # Handle usernames in the same equivalence class correctly.
        self.assertEquals(user_services.get_user_id_from_username("USERNAME"), user_id)

        # Return None for usernames which don't exist.
        self.assertIsNone(user_services.get_user_id_from_username("fakeUsername"))
예제 #3
0
    def test_get_user_id_from_username(self):
        user_id = 'someUser'
        username = '******'
        user_email = '*****@*****.**'

        user_services.get_or_create_user(user_id, user_email)
        user_services.set_username(user_id, username)
        self.assertEquals(user_services.get_username(user_id), username)

        # Handle usernames that exist.
        self.assertEquals(
            user_services.get_user_id_from_username(username), user_id)

        # Handle usernames in the same equivalence class correctly.
        self.assertEquals(
            user_services.get_user_id_from_username('USERNAME'), user_id)

        # Return None for usernames which don't exist.
        self.assertIsNone(
            user_services.get_user_id_from_username('fakeUsername'))
예제 #4
0
def update_admin_ids(committer_id, admin_usernames):
    """Refresh the list of admin user_ids based on the usernames entered."""
    admin_ids = []
    for username in admin_usernames:
        user_id = user_services.get_user_id_from_username(username)
        if user_id is not None:
            admin_ids.append(user_id)
        else:
            raise Exception('Bad admin username: %s' % username)

    Registry.get_config_property('admin_ids').set_value(
        committer_id, admin_ids)
예제 #5
0
파일: base_test.py 프로젝트: DSeanLaw/oppia
    def test_root_redirect_rules_for_users_with_no_user_contribution_model(
            self):
        self.login(self.TEST_LEARNER_EMAIL)
        # delete the UserContributionModel
        user_id = user_services.get_user_id_from_username(
            self.TEST_LEARNER_USERNAME)
        user_contribution_model = user_models.UserContributionsModel.get(
            user_id)
        user_contribution_model.delete()

        # Since no exploration has been created, going to '/' should redirect
        # to the library page.
        response = self.testapp.get('/')
        self.assertEqual(response.status_int, 302)
        self.assertIn('library', response.headers['location'])
        self.logout()
예제 #6
0
    def put(self, exploration_id):
        """Updates the editing rights for the given exploration."""
        exploration = exp_services.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        _require_valid_version(version, exploration.version)

        make_community_owned = self.payload.get('make_community_owned')
        new_member_username = self.payload.get('new_member_username')
        new_member_role = self.payload.get('new_member_role')
        viewable_if_private = self.payload.get('viewable_if_private')

        if new_member_username:
            new_member_id = user_services.get_user_id_from_username(
                new_member_username)
            if new_member_id is None:
                raise Exception(
                    'Sorry, we could not find the specified user.')

            rights_manager.assign_role_for_exploration(
                self.user, exploration_id, new_member_id, new_member_role)
            email_manager.send_role_notification_email(
                self.user_id, new_member_id, new_member_role, exploration_id,
                exploration.title)

        elif make_community_owned:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            try:
                exploration.validate(strict=True)
            except utils.ValidationError as e:
                raise self.InvalidInputException(e)

            rights_manager.release_ownership_of_exploration(
                self.user, exploration_id)

        elif viewable_if_private is not None:
            rights_manager.set_private_viewability_of_exploration(
                self.user, exploration_id, viewable_if_private)

        else:
            raise self.InvalidInputException(
                'No change was made to this exploration.')

        self.render_json({
            'rights': rights_manager.get_exploration_rights(
                exploration_id).to_dict()
        })
예제 #7
0
파일: editor.py 프로젝트: sajalasati/oppia
    def delete(self, exploration_id):
        """Deletes user roles from the exploration."""
        username = self.normalized_request.get('username')
        user_id = user_services.get_user_id_from_username(username)
        if user_id is None:
            raise self.InvalidInputException(
                'Sorry, we could not find the specified user.')
        if self.user.user_id == user_id:
            raise self.InvalidInputException(
                'Sorry, users cannot remove their own roles.')

        rights_manager.deassign_role_for_exploration(self.user, exploration_id,
                                                     user_id)
        self.render_json({
            'rights':
            rights_manager.get_exploration_rights(exploration_id).to_dict()
        })
예제 #8
0
 def get(self):
     username = self.request.get('username', None)
     if username is None:
         raise self.InvalidInputException('Missing username param')
     user_id = user_services.get_user_id_from_username(username)
     if user_id is None:
         raise self.InvalidInputException(
             'Invalid username: %s' % username)
     user_rights = (
         user_services.get_user_contribution_rights(user_id))
     self.render_json({
         'can_review_translation_for_language_codes': (
             user_rights.can_review_translation_for_language_codes),
         'can_review_voiceover_for_language_codes': (
             user_rights.can_review_voiceover_for_language_codes),
         'can_review_questions': user_rights.can_review_questions
     })
예제 #9
0
    def test_root_redirect_rules_for_users_with_no_user_contribution_model(
            self):
        self.login(self.TEST_LEARNER_EMAIL)
        # delete the UserContributionModel.
        user_id = user_services.get_user_id_from_username(
            self.TEST_LEARNER_USERNAME)
        user_contribution_model = user_models.UserContributionsModel.get(
            user_id)
        user_contribution_model.delete()

        # Since by default the homepage for all logged in users is the
        # learner dashboard, going to '/' should redirect to the learner
        # dashboard page.
        response = self.testapp.get('/')
        self.assertEqual(response.status_int, 302)
        self.assertIn('learner_dashboard', response.headers['location'])
        self.logout()
예제 #10
0
    def delete(self):
        user_id = self.normalized_request.get('user_id')
        username = self.normalized_request.get('username')

        user_id_from_username = (
            user_services.get_user_id_from_username(username))
        if user_id_from_username is None:
            raise self.InvalidInputException(
                'The username doesn\'t belong to any user'
            )
        if user_id_from_username != user_id:
            raise self.InvalidInputException(
                'The user ID retrieved from the username and '
                'the user ID provided by admin differ.'
            )
        wipeout_service.pre_delete_user(user_id)
        self.render_json({'success': True})
예제 #11
0
파일: base_test.py 프로젝트: pydevsg/oppia
    def test_requests_for_invalid_paths(self):
        """Test that requests for invalid paths result in a 404 error."""
        user_id = user_services.get_user_id_from_username('learneruser')
        csrf_token = base.CsrfTokenManager.create_csrf_token(user_id)

        self.get_html_response(
            '/library/extra', expected_status_int=404)

        self.get_html_response(
            '/library/data/extra', expected_status_int=404)

        self.post_json(
            '/library/extra', payload={}, csrf_token=csrf_token,
            expected_status_int=404)

        self.put_json(
            '/library/extra', payload={}, csrf_token=csrf_token,
            expected_status_int=404)
예제 #12
0
    def delete(self, category):
        username = self.normalized_request.get('username', None)
        user_id = user_services.get_user_id_from_username(username)
        if user_id is None:
            raise self.InvalidInputException(
                'Invalid username: %s' % username)

        language_code = self.normalized_request.get('language_code', None)

        if (category ==
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION):
            if not user_services.can_review_translation_suggestions(
                    user_id, language_code=language_code):
                raise self.InvalidInputException(
                    '%s does not have rights to review translation in '
                    'language %s.' % (username, language_code))
            user_services.remove_translation_review_rights_in_language(
                user_id, language_code)
        elif category == (
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION):
            if not user_services.can_review_question_suggestions(user_id):
                raise self.InvalidInputException(
                    '%s does not have rights to review question.' % (
                        username))
            user_services.remove_question_review_rights(user_id)
        elif category == (
                constants.CONTRIBUTION_RIGHT_CATEGORY_SUBMIT_QUESTION):
            if not user_services.can_submit_question_suggestions(user_id):
                raise self.InvalidInputException(
                    '%s does not have rights to submit question.' % (
                        username))
            user_services.remove_question_submit_rights(user_id)

        if category in [
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION,
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_VOICEOVER,
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION
        ]:
            email_manager.send_email_to_removed_contribution_reviewer(
                user_id, category, language_code=language_code)

        self.render_json({})
예제 #13
0
파일: admin.py 프로젝트: yudhik11/oppia
    def post(self):
        username = self.payload.get('username')
        role = self.payload.get('role')
        topic_id = self.payload.get('topic_id')
        user_id = user_services.get_user_id_from_username(username)
        if user_id is None:
            raise self.InvalidInputException(
                'User with given username does not exist.')
        user_services.update_user_role(user_id, role)
        role_services.log_role_query(self.user_id,
                                     feconf.ROLE_ACTION_UPDATE,
                                     role=role,
                                     username=username)

        if topic_id:
            user = user_services.UserActionsInfo(user_id)
            topic_services.assign_role(user_services.get_system_user(), user,
                                       topic_domain.ROLE_MANAGER, topic_id)

        self.render_json({})
예제 #14
0
 def get(self):
     username = self.normalized_request.get('username', None)
     user_id = user_services.get_user_id_from_username(username)
     if user_id is None:
         raise self.InvalidInputException('Invalid username: %s' % username)
     user_rights = (user_services.get_user_contribution_rights(user_id))
     response = {}
     if feconf.ROLE_ID_TRANSLATION_ADMIN in self.roles:
         response = {
             'can_review_translation_for_language_codes':
             (user_rights.can_review_translation_for_language_codes)
         }
     if feconf.ROLE_ID_QUESTION_ADMIN in self.roles:
         response.update({
             'can_review_questions':
             user_rights.can_review_questions,
             'can_submit_questions':
             user_rights.can_submit_questions
         })
     self.render_json(response)
예제 #15
0
파일: admin.py 프로젝트: pengcheng95/oppia
    def put(self):
        old_username = self.payload.get('old_username', None)
        new_username = self.payload.get('new_username', None)

        if old_username is None:
            raise self.InvalidInputException(
                'Invalid request: The old username must be specified.')

        if new_username is None:
            raise self.InvalidInputException(
                'Invalid request: A new username must be specified.')

        if not isinstance(old_username, python_utils.UNICODE):
            raise self.InvalidInputException(
                'Expected old username to be a unicode string, received %s' %
                old_username)

        if not isinstance(new_username, python_utils.UNICODE):
            raise self.InvalidInputException(
                'Expected new username to be a unicode string, received %s' %
                new_username)

        user_id = user_services.get_user_id_from_username(old_username)
        if user_id is None:
            raise self.InvalidInputException('Invalid username: %s' %
                                             old_username)

        if len(new_username) > constants.MAX_USERNAME_LENGTH:
            raise self.InvalidInputException(
                'Expected new username to be less than %s characters, '
                'received %s' % (constants.MAX_USERNAME_LENGTH, new_username))

        if user_services.is_username_taken(new_username):
            raise self.InvalidInputException('Username already taken.')

        user_services.set_username(user_id, new_username)
        user_services.log_username_change(self.user_id, old_username,
                                          new_username)
        self.render_json({})
예제 #16
0
    def post(self, category):
        username = self.normalized_payload.get('username')
        user_id = user_services.get_user_id_from_username(username)

        if user_id is None:
            raise self.InvalidInputException('Invalid username: %s' % username)

        language_code = self.normalized_payload.get('language_code', None)

        if category == constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION:
            if user_services.can_review_translation_suggestions(
                    user_id, language_code=language_code):
                raise self.InvalidInputException(
                    'User %s already has rights to review translation in '
                    'language code %s' % (username, language_code))
            user_services.allow_user_to_review_translation_in_language(
                user_id, language_code)
        elif category == constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION:
            if user_services.can_review_question_suggestions(user_id):
                raise self.InvalidInputException(
                    'User %s already has rights to review question.' %
                    (username))
            user_services.allow_user_to_review_question(user_id)
        elif category == constants.CONTRIBUTION_RIGHT_CATEGORY_SUBMIT_QUESTION:
            if user_services.can_submit_question_suggestions(user_id):
                raise self.InvalidInputException(
                    'User %s already has rights to submit question.' %
                    (username))
            user_services.allow_user_to_submit_question(user_id)

        if category in [
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION,
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_VOICEOVER,
                constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION
        ]:
            email_manager.send_email_to_new_contribution_reviewer(
                user_id, category, language_code=language_code)
        self.render_json({})
예제 #17
0
파일: admin.py 프로젝트: ReshuKumari/oppia
    def get(self):
        filter_criterion = self.normalized_request.get(
            'filter_criterion')
        if filter_criterion == feconf.USER_FILTER_CRITERION_ROLE:
            role = self.normalized_request.get(
                feconf.USER_FILTER_CRITERION_ROLE)
            users_by_role = {
                username: role
                for username in user_services.get_usernames_by_role(role)
            }
            role_services.log_role_query(
                self.user_id, feconf.ROLE_ACTION_VIEW_BY_ROLE,
                role=role)
            self.render_json(users_by_role)
        elif filter_criterion == feconf.USER_FILTER_CRITERION_USERNAME:
            username = self.normalized_request.get(
                feconf.USER_FILTER_CRITERION_USERNAME)
            user_id = user_services.get_user_id_from_username(username)
            role_services.log_role_query(
                self.user_id, feconf.ROLE_ACTION_VIEW_BY_USERNAME,
                username=username)
            if user_id is None:
                raise self.InvalidInputException(
                    'User with given username does not exist.')

            user_settings = user_services.get_user_settings(user_id)
            user_roles = user_settings.roles
            managed_topic_ids = []
            if feconf.ROLE_ID_TOPIC_MANAGER in user_roles:
                managed_topic_ids = [
                    rights.id for rights in
                    topic_fetchers.get_topic_rights_with_user(user_id)]
            user_roles_dict = {
                'roles': user_roles,
                'managed_topic_ids': managed_topic_ids,
                'banned': user_settings.banned
            }
            self.render_json(user_roles_dict)
예제 #18
0
파일: editor.py 프로젝트: okchip/oppia
    def put(self, exploration_id):
        """Updates the editing rights for the given exploration."""
        exploration = exp_services.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        _require_valid_version(version, exploration.version)

        is_public = self.payload.get('is_public')
        is_publicized = self.payload.get('is_publicized')
        is_community_owned = self.payload.get('is_community_owned')
        new_member_username = self.payload.get('new_member_username')
        new_member_role = self.payload.get('new_member_role')
        viewable_if_private = self.payload.get('viewable_if_private')

        if new_member_username:
            if not rights_manager.Actor(self.user_id).can_modify_roles(
                    rights_manager.ACTIVITY_TYPE_EXPLORATION, exploration_id):
                raise self.UnauthorizedUserException(
                    'Only an owner of this exploration can add or change '
                    'roles.')

            new_member_id = user_services.get_user_id_from_username(
                new_member_username)
            if new_member_id is None:
                raise Exception('Sorry, we could not find the specified user.')

            rights_manager.assign_role_for_exploration(self.user_id,
                                                       exploration_id,
                                                       new_member_id,
                                                       new_member_role)

        elif is_public is not None:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            if is_public:
                try:
                    exploration.validate(strict=True)
                except utils.ValidationError as e:
                    raise self.InvalidInputException(e)

                exp_services.publish_exploration_and_update_user_profiles(
                    self.user_id, exploration_id)
                exp_services.index_explorations_given_ids([exploration_id])
            else:
                rights_manager.unpublish_exploration(self.user_id,
                                                     exploration_id)
                exp_services.delete_documents_from_search_index(
                    [exploration_id])

        elif is_publicized is not None:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            if is_publicized:
                try:
                    exploration.validate(strict=True)
                except utils.ValidationError as e:
                    raise self.InvalidInputException(e)

                rights_manager.publicize_exploration(self.user_id,
                                                     exploration_id)
            else:
                rights_manager.unpublicize_exploration(self.user_id,
                                                       exploration_id)

        elif is_community_owned:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            try:
                exploration.validate(strict=True)
            except utils.ValidationError as e:
                raise self.InvalidInputException(e)

            rights_manager.release_ownership_of_exploration(
                self.user_id, exploration_id)

        elif viewable_if_private is not None:
            rights_manager.set_private_viewability_of_exploration(
                self.user_id, exploration_id, viewable_if_private)

        else:
            raise self.InvalidInputException(
                'No change was made to this exploration.')

        self.render_json({
            'rights':
            rights_manager.get_exploration_rights(exploration_id).to_dict()
        })
예제 #19
0
    def put(self, exploration_id):
        """Updates the editing rights for the given exploration."""
        exploration = exp_services.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        _require_valid_version(version, exploration.version)

        is_public = self.payload.get('is_public')
        is_publicized = self.payload.get('is_publicized')
        is_community_owned = self.payload.get('is_community_owned')
        new_member_username = self.payload.get('new_member_username')
        new_member_role = self.payload.get('new_member_role')
        viewable_if_private = self.payload.get('viewable_if_private')

        if new_member_username:
            if not rights_manager.Actor(
                    self.user_id).can_modify_roles(
                        rights_manager.ACTIVITY_TYPE_EXPLORATION,
                        exploration_id):
                raise self.UnauthorizedUserException(
                    'Only an owner of this exploration can add or change '
                    'roles.')

            new_member_id = user_services.get_user_id_from_username(
                new_member_username)
            if new_member_id is None:
                raise Exception(
                    'Sorry, we could not find the specified user.')

            rights_manager.assign_role_for_exploration(
                self.user_id, exploration_id, new_member_id, new_member_role)

        elif is_public is not None:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            if is_public:
                try:
                    exploration.validate(strict=True)
                except utils.ValidationError as e:
                    raise self.InvalidInputException(e)

                exp_services.publish_exploration_and_update_user_profiles(
                    self.user_id, exploration_id)
                exp_services.index_explorations_given_ids([exploration_id])
            else:
                rights_manager.unpublish_exploration(
                    self.user_id, exploration_id)
                exp_services.delete_documents_from_search_index([
                    exploration_id])

        elif is_publicized is not None:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            if is_publicized:
                try:
                    exploration.validate(strict=True)
                except utils.ValidationError as e:
                    raise self.InvalidInputException(e)

                rights_manager.publicize_exploration(
                    self.user_id, exploration_id)
            else:
                rights_manager.unpublicize_exploration(
                    self.user_id, exploration_id)

        elif is_community_owned:
            exploration = exp_services.get_exploration_by_id(exploration_id)
            try:
                exploration.validate(strict=True)
            except utils.ValidationError as e:
                raise self.InvalidInputException(e)

            rights_manager.release_ownership_of_exploration(
                self.user_id, exploration_id)

        elif viewable_if_private is not None:
            rights_manager.set_private_viewability_of_exploration(
                self.user_id, exploration_id, viewable_if_private)

        else:
            raise self.InvalidInputException(
                'No change was made to this exploration.')

        self.render_json({
            'rights': rights_manager.get_exploration_rights(
                exploration_id).to_dict()
        })
예제 #20
0
 def post(self):
     creator_id = user_services.get_user_id_from_username(
         self.payload.get('creator_username'))
     subscription_services.unsubscribe_from_creator(self.user_id,
                                                    creator_id)
     self.render_json(self.values)
예제 #21
0
    def put(self):
        username = self.payload.get('username', None)
        if username is None:
            raise self.InvalidInputException('Missing username param')
        user_id = user_services.get_user_id_from_username(username)
        if user_id is None:
            raise self.InvalidInputException(
                'Invalid username: %s' % username)

        language_code = self.payload.get('language_code', None)
        if language_code is not None and not (
                utils.is_supported_audio_language_code(language_code)):
            raise self.InvalidInputException(
                'Invalid language_code: %s' % language_code)

        removal_type = self.payload.get('removal_type')
        if removal_type == constants.ACTION_REMOVE_ALL_REVIEW_RIGHTS:
            user_services.remove_contribution_reviewer(user_id)
        elif (removal_type ==
              constants.ACTION_REMOVE_SPECIFIC_CONTRIBUTION_RIGHTS):
            category = self.payload.get('category')
            if (category ==
                    constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION):
                if not user_services.can_review_translation_suggestions(
                        user_id, language_code=language_code):
                    raise self.InvalidInputException(
                        '%s does not have rights to review translation in '
                        'language %s.' % (username, language_code))
                user_services.remove_translation_review_rights_in_language(
                    user_id, language_code)
            elif (category ==
                  constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_VOICEOVER):
                if not user_services.can_review_voiceover_applications(
                        user_id, language_code=language_code):
                    raise self.InvalidInputException(
                        '%s does not have rights to review voiceover in '
                        'language %s.' % (username, language_code))
                user_services.remove_voiceover_review_rights_in_language(
                    user_id, language_code)
            elif (category ==
                  constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION):
                if not user_services.can_review_question_suggestions(user_id):
                    raise self.InvalidInputException(
                        '%s does not have rights to review question.' % (
                            username))
                user_services.remove_question_review_rights(user_id)
            elif (category ==
                  constants.CONTRIBUTION_RIGHT_CATEGORY_SUBMIT_QUESTION):
                if not user_services.can_submit_question_suggestions(user_id):
                    raise self.InvalidInputException(
                        '%s does not have rights to submit question.' % (
                            username))
                user_services.remove_question_submit_rights(user_id)
            else:
                raise self.InvalidInputException(
                    'Invalid category: %s' % category)

            if category in [
                    constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_TRANSLATION,
                    constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_VOICEOVER,
                    constants.CONTRIBUTION_RIGHT_CATEGORY_REVIEW_QUESTION
            ]:
                email_manager.send_email_to_removed_contribution_reviewer(
                    user_id, category, language_code=language_code)
        else:
            raise self.InvalidInputException(
                'Invalid removal_type: %s' % removal_type)

        self.render_json({})
예제 #22
0
 def post(self):
     creator_id = user_services.get_user_id_from_username(
         self.payload.get('creator_username'))
     subscription_services.unsubscribe_from_creator(self.user_id, creator_id)
     self.render_json(self.values)