Skip to content

Commit

Permalink
Remove organization role (2/2)
Browse files Browse the repository at this point in the history
- Implement pypi#11077.
  • Loading branch information
divbzero committed May 3, 2022
1 parent 9c89cdb commit 2c68b44
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 45 deletions.
16 changes: 8 additions & 8 deletions warehouse/locale/messages.pot
Original file line number Diff line number Diff line change
Expand Up @@ -307,43 +307,43 @@ msgid ""
"cannot be added as a ${role_name} for organization"
msgstr ""

#: warehouse/manage/views.py:1269 warehouse/manage/views.py:2413
#: warehouse/manage/views.py:1269 warehouse/manage/views.py:2478
msgid "User '${username}' already has an active invite. Please try again later."
msgstr ""

#: warehouse/manage/views.py:1311 warehouse/manage/views.py:2471
#: warehouse/manage/views.py:1311 warehouse/manage/views.py:2536
msgid "Invitation sent to '${username}'"
msgstr ""

#: warehouse/manage/views.py:1367
msgid "Could not find organization invitation."
msgstr ""

#: warehouse/manage/views.py:1380 warehouse/manage/views.py:2529
#: warehouse/manage/views.py:1380 warehouse/manage/views.py:2594
msgid "Invitation already expired."
msgstr ""

#: warehouse/manage/views.py:1398 warehouse/manage/views.py:2553
#: warehouse/manage/views.py:1398 warehouse/manage/views.py:2618
msgid "Invitation revoked from '${username}'."
msgstr ""

#: warehouse/manage/views.py:1708
#: warehouse/manage/views.py:1773
msgid ""
"There have been too many attempted OpenID Connect registrations. Try "
"again later."
msgstr ""

#: warehouse/manage/views.py:2389
#: warehouse/manage/views.py:2454
msgid "User '${username}' already has ${role_name} role for project"
msgstr ""

#: warehouse/manage/views.py:2400
#: warehouse/manage/views.py:2465
msgid ""
"User '${username}' does not have a verified primary email address and "
"cannot be added as a ${role_name} for project"
msgstr ""

#: warehouse/manage/views.py:2518
#: warehouse/manage/views.py:2583
msgid "Could not find role invitation."
msgstr ""

Expand Down
71 changes: 35 additions & 36 deletions warehouse/manage/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1487,68 +1487,67 @@ def change_organization_role(


@view_config(
route_name="manage.project.delete_role",
context=Project,
route_name="manage.organization.delete_role",
context=Organization,
uses_session=True,
require_methods=["POST"],
permission="manage:project",
# permission="manage:organization",
has_translations=True,
require_reauth=True,
)
def delete_project_role(project, request):
def delete_organization_role(organization, request):
try:
role = (
request.db.query(Role)
request.db.query(OrganizationRole)
.join(User)
.filter(Role.project == project)
.filter(Role.id == request.POST["role_id"])
.filter(OrganizationRole.organization == organization)
.filter(OrganizationRole.id == request.POST["role_id"])
.one()
)
removing_self = role.role_name == "Owner" and role.user == request.user
removing_self = (
role.role_name == OrganizationRoleType.Owner and role.user == request.user
)
if removing_self:
request.session.flash("Cannot remove yourself as Owner", queue="error")
else:
request.db.delete(role)
request.db.add(
JournalEntry(
name=project.name,
action=f"remove {role.role_name} {role.user.username}",
submitted_by=request.user,
submitted_from=request.remote_addr,
)
)
project.record_event(
tag="project:role:delete",
organization.record_event(
tag="organization:role:delete",
ip_address=request.remote_addr,
additional={
"submitted_by": request.user.username,
"role_name": role.role_name,
"target_user": role.user.username,
"submitted_by_user_id": str(request.user.id),
"role_name": role.role_name.value,
"target_user_id": str(role.user.id),
},
)

owner_users = set(project_owners(request, project))
owner_users = set(organization_owners(request, organization))

# Don't send owner notification email to new user
# if they are now an owner
owner_users.discard(role.user)
send_collaborator_removed_email(
request,
owner_users,
user=role.user,
submitter=request.user,
project_name=project.name,
)

send_removed_as_collaborator_email(
request, role.user, submitter=request.user, project_name=project.name
)

request.session.flash("Removed role", queue="success")
# TODO: Send notification emails.
# send_member_removed_email(
# request,
# owner_users,
# user=role.user,
# submitter=request.user,
# organization_name=organization.name,
# )
#
# send_removed_as_member_email(
# request, role.user, submitter=request.user, organization_name=organization.name
# )

request.session.flash("Removed member", queue="success")
except NoResultFound:
request.session.flash("Could not find role", queue="error")
request.session.flash("Could not find member", queue="error")

return HTTPSeeOther(
request.route_path("manage.project.roles", project_name=project.name)
request.route_path(
"manage.organization.roles", organization_name=organization.name
)
)


Expand Down
7 changes: 7 additions & 0 deletions warehouse/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,13 @@ def includeme(config):
traverse="/{organization_name}",
domain=warehouse,
)
config.add_route(
"manage.organization.delete_role",
"/manage/organization/{organization_name}/people/delete/",
factory="warehouse.organizations.models:OrganizationFactory",
traverse="/{organization_name}",
domain=warehouse,
)
config.add_route("manage.projects", "/manage/projects/", domain=warehouse)
config.add_route(
"manage.project.settings",
Expand Down
2 changes: 1 addition & 1 deletion warehouse/templates/manage/organization/roles.html
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ <h2>{% trans %}People{% endtrans %}</h2>
</td>
<td>{{ two_factor_badge(role.user) }}</td>
<td class="table__align-right">
<form method="POST" action="#" {# TODO action="{{ request.route_path('manage.organization.delete_role', organization_name=organization.name) }}" #}>
<form method="POST" action="{{ request.route_path('manage.organization.delete_role', organization_name=organization.name) }}">
<input name="csrf_token" type="hidden" value="{{ request.session.get_csrf_token() }}">
<input type="hidden" name="role_id" value="{{ role.id }}">
<button
Expand Down

0 comments on commit 2c68b44

Please sign in to comment.