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)
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"))
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'))
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)
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()
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() })
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() })
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 })
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()
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})
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)
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({})
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({})
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)
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({})
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({})
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)
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() })
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() })
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)
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({})