Skip to content

Commit 26d12f8

Browse files
committed
Hook up delete release modal
1 parent 4c8854e commit 26d12f8

File tree

2 files changed

+76
-15
lines changed

2 files changed

+76
-15
lines changed

warehouse/manage/views.py

+70-8
Original file line numberDiff line numberDiff line change
@@ -109,20 +109,82 @@ def manage_project_releases(project, request):
109109
return {"project": project}
110110

111111

112-
@view_config(
112+
@view_defaults(
113113
route_name="manage.project.release",
114114
renderer="manage/release.html",
115115
uses_session=True,
116+
require_csrf=True,
117+
require_methods=False,
116118
permission="manage",
117119
effective_principals=Authenticated,
118120
)
119-
def manage_project_release(release, request):
120-
project = release.project
121-
return {
122-
"project": project,
123-
"release": release,
124-
"files": release.files.all(),
125-
}
121+
class ManageProjectRelease:
122+
def __init__(self, release, request):
123+
self.release = release
124+
self.request = request
125+
126+
@view_config(request_method="GET")
127+
def manage_project_release(self):
128+
return {
129+
"project": self.release.project,
130+
"release": self.release,
131+
"files": self.release.files.all(),
132+
}
133+
134+
@view_config(
135+
request_method="POST",
136+
request_param=["confirm"]
137+
)
138+
def delete_project_release(self):
139+
confirm = self.request.POST.get('confirm')
140+
if not confirm:
141+
self.request.session.flash(
142+
"Must confirm the request.", queue='error'
143+
)
144+
return HTTPSeeOther(
145+
self.request.route_path(
146+
'manage.project.release',
147+
project_name=self.release.project.name,
148+
version=self.release.version,
149+
)
150+
)
151+
152+
if confirm != self.release.version:
153+
self.request.session.flash(
154+
f"{confirm!r} is not the same as {self.release.version!r}",
155+
queue="error",
156+
)
157+
return HTTPSeeOther(
158+
self.request.route_path(
159+
'manage.project.release',
160+
project_name=self.release.project.name,
161+
version=self.release.version,
162+
)
163+
)
164+
165+
self.request.db.add(
166+
JournalEntry(
167+
name=self.release.project.name,
168+
action="remove",
169+
version=self.release.version,
170+
submitted_by=self.request.user,
171+
submitted_from=self.request.remote_addr,
172+
),
173+
)
174+
175+
self.request.db.delete(self.release)
176+
177+
self.request.session.flash(
178+
f"Successfully deleted release {self.release.version!r}.",
179+
queue="success",
180+
)
181+
182+
return HTTPSeeOther(
183+
self.request.route_path(
184+
'manage.project.releases',
185+
project_name=self.release.project.name,
186+
)
187+
)
126188

127189

128190
@view_config(

warehouse/templates/manage/release.html

+6-7
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ <h3>Delete Release</h3>
110110
</div>
111111

112112
<div id="delete-release-modal" class="modal">
113-
{% set project_name = project.normalized_name %}
114113
<div class="modal__content" role="dialog">
115-
<form method="POST" action="" class="modal__form">
114+
<form method="POST" class="modal__form">
115+
<input name="csrf_token" type="hidden" value="{{ request.session.get_csrf_token() }}">
116116
<a href="#modal-close" title="Close" class="modal__close">
117117
<i class="fa fa-times" aria-hidden="true"></i>
118118
<span class="sr-only">close</span>
@@ -122,10 +122,9 @@ <h3 class="modal__title">Delete Release {{ release.version }}?</h3>
122122
<div class="callout-block callout-block--danger callout-block--bottom-margin no-top-margin">
123123
<p>Warning: This action cannot be undone!</p>
124124
</div>
125-
<p>Confirm the project name to continue.</p>
126-
<input name="csrf_token" type="hidden" value="{{ request.session.get_csrf_token() }}">
127-
<label for="project-name">Project Name</label>
128-
<input name="confirm" type="text" placeholder="Confirm project name" autocomplete="off" autocorrect="off" autocapitalize="off">
125+
<p>Confirm the release version to continue.</p>
126+
<label for="confirm">Release version</label>
127+
<input name="confirm" type="text" placeholder="Confirm version" autocomplete="off" autocorrect="off" autocapitalize="off">
129128
</div>
130129
<div class="modal__footer">
131130
<a href="#modal-close" class="button modal__action">Cancel</a>
@@ -152,7 +151,7 @@ <h3 class="modal__title">Delete {{ file.filename }}?</h3>
152151
</div>
153152
<p>Confirm the project name to continue.</p>
154153
<input name="csrf_token" type="hidden" value="{{ request.session.get_csrf_token() }}">
155-
<label for="project-name">Project Name</label>
154+
<label for="confirm">Project Name</label>
156155
<input name="confirm" type="text" placeholder="Confirm project name" autocomplete="off" autocorrect="off" autocapitalize="off">
157156
</div>
158157
<div class="modal__footer">

0 commit comments

Comments
 (0)