Check that all users with changed data are app users before updating env roles

This commit is contained in:
Montana
2019-04-29 14:07:17 -04:00
parent 0736b229bf
commit 60b4c50819
5 changed files with 75 additions and 24 deletions

View File

@@ -7,6 +7,7 @@ from atst.domain.applications import Applications
from atst.forms.application import ApplicationForm
from atst.forms.app_settings import EnvironmentRolesForm
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.exceptions import NotFoundError
from atst.models.permissions import Permissions
from atst.utils.flash import formatted_flash as flash
@@ -43,6 +44,13 @@ def serialize_env_member_form_data(application):
return environments_list
def check_users_are_in_application(user_ids, application):
for user_id in user_ids:
if not application.has_member(user_id):
raise NotFoundError("application user {}".format(user_id))
return True
@applications_bp.route("/applications/<application_id>/settings")
@user_can(Permissions.VIEW_APPLICATION, message="view application edit form")
def settings(application_id):
@@ -101,6 +109,19 @@ def update_env_roles(environment_id):
env_roles_form = EnvironmentRolesForm(http_request.form)
if env_roles_form.validate():
try:
user_ids = [user["user_id"] for user in env_roles_form.data["team_roles"]]
check_users_are_in_application(user_ids, application)
except NotFoundError as err:
app.logger.warning(
"Security violation for user {}, {} {}".format(
g.current_user.id, request.method, request.path
),
extra={"tags": ["update", "failure"], "security_warning": True},
)
raise (err)
env_data = env_roles_form.data
Environments.update_env_roles_by_environment(
environment_id=environment_id, team_roles=env_data["team_roles"]