@@ -109,20 +109,82 @@ def manage_project_releases(project, request):
109
109
return {"project" : project }
110
110
111
111
112
- @view_config (
112
+ @view_defaults (
113
113
route_name = "manage.project.release" ,
114
114
renderer = "manage/release.html" ,
115
115
uses_session = True ,
116
+ require_csrf = True ,
117
+ require_methods = False ,
116
118
permission = "manage" ,
117
119
effective_principals = Authenticated ,
118
120
)
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
+ )
126
188
127
189
128
190
@view_config (
0 commit comments