1
+ import hashlib
1
2
import random
2
3
import sys
3
4
6
7
from django .db .models import Q
7
8
from django .http import Http404 , HttpResponse , HttpResponseForbidden
8
9
from django .shortcuts import render , redirect , get_object_or_404
9
- from django .utils .hashcompat import sha_constructor
10
10
from django .views import static
11
11
12
12
from django .contrib import messages
@@ -37,34 +37,34 @@ def proposal_submit(request):
37
37
request .user .speaker_profile
38
38
except ObjectDoesNotExist :
39
39
return redirect ("dashboard" )
40
-
40
+
41
41
kinds = []
42
42
for proposal_section in ProposalSection .available ():
43
43
for kind in proposal_section .section .proposal_kinds .all ():
44
44
kinds .append (kind )
45
-
45
+
46
46
return render (request , "proposals/proposal_submit.html" , {
47
47
"kinds" : kinds ,
48
48
})
49
49
50
50
51
51
def proposal_submit_kind (request , kind_slug ):
52
-
52
+
53
53
kind = get_object_or_404 (ProposalKind , slug = kind_slug )
54
-
54
+
55
55
if not request .user .is_authenticated ():
56
56
return redirect ("home" ) # @@@ unauth'd speaker info page?
57
57
else :
58
58
try :
59
59
speaker_profile = request .user .speaker_profile
60
60
except ObjectDoesNotExist :
61
61
return redirect ("dashboard" )
62
-
62
+
63
63
if not kind .section .proposalsection .is_available ():
64
64
return redirect ("proposal_submit" )
65
-
65
+
66
66
form_class = get_form (settings .PROPOSAL_FORMS [kind_slug ])
67
-
67
+
68
68
if request .method == "POST" :
69
69
form = form_class (request .POST )
70
70
if form .is_valid ():
@@ -79,7 +79,7 @@ def proposal_submit_kind(request, kind_slug):
79
79
return redirect ("dashboard" )
80
80
else :
81
81
form = form_class ()
82
-
82
+
83
83
return render (request , "proposals/proposal_submit_kind.html" , {
84
84
"kind" : kind ,
85
85
"form" : form ,
@@ -91,17 +91,17 @@ def proposal_speaker_manage(request, pk):
91
91
queryset = ProposalBase .objects .select_related ("speaker" )
92
92
proposal = get_object_or_404 (queryset , pk = pk )
93
93
proposal = ProposalBase .objects .get_subclass (pk = proposal .pk )
94
-
94
+
95
95
if proposal .speaker != request .user .speaker_profile :
96
96
raise Http404 ()
97
-
97
+
98
98
if request .method == "POST" :
99
99
add_speaker_form = AddSpeakerForm (request .POST , proposal = proposal )
100
100
if add_speaker_form .is_valid ():
101
101
message_ctx = {
102
102
"proposal" : proposal ,
103
103
}
104
-
104
+
105
105
def create_speaker_token (email_address ):
106
106
# create token and look for an existing speaker to prevent
107
107
# duplicate tokens and confusing the pending speaker
@@ -110,8 +110,8 @@ def create_speaker_token(email_address):
110
110
Q (user = None , invite_email = email_address )
111
111
)
112
112
except Speaker .DoesNotExist :
113
- salt = sha_constructor (str (random .random ())).hexdigest ()[:5 ]
114
- token = sha_constructor (salt + email_address ).hexdigest ()
113
+ salt = hashlib . sha1 (str (random .random ())).hexdigest ()[:5 ]
114
+ token = hashlib . sha1 (salt + email_address ).hexdigest ()
115
115
pending = Speaker .objects .create (
116
116
invite_email = email_address ,
117
117
invite_token = token ,
@@ -173,14 +173,14 @@ def proposal_edit(request, pk):
173
173
174
174
if request .user != proposal .speaker .user :
175
175
raise Http404 ()
176
-
176
+
177
177
if not proposal .can_edit ():
178
178
ctx = {
179
179
"title" : "Proposal editing closed" ,
180
180
"body" : "Proposal editing is closed for this session type."
181
181
}
182
182
return render (request , "proposals/proposal_error.html" , ctx )
183
-
183
+
184
184
form_class = get_form (settings .PROPOSAL_FORMS [proposal .kind .slug ])
185
185
186
186
if request .method == "POST" :
@@ -206,7 +206,7 @@ def proposal_edit(request, pk):
206
206
return redirect ("proposal_detail" , proposal .pk )
207
207
else :
208
208
form = form_class (instance = proposal )
209
-
209
+
210
210
return render (request , "proposals/proposal_edit.html" , {
211
211
"proposal" : proposal ,
212
212
"form" : form ,
@@ -218,22 +218,22 @@ def proposal_detail(request, pk):
218
218
queryset = ProposalBase .objects .select_related ("speaker" , "speaker__user" )
219
219
proposal = get_object_or_404 (queryset , pk = pk )
220
220
proposal = ProposalBase .objects .get_subclass (pk = proposal .pk )
221
-
221
+
222
222
if request .user not in [p .user for p in proposal .speakers ()]:
223
223
raise Http404 ()
224
-
224
+
225
225
if "symposion.reviews" in settings .INSTALLED_APPS :
226
226
from symposion .reviews .forms import SpeakerCommentForm
227
227
message_form = SpeakerCommentForm ()
228
228
if request .method == "POST" :
229
229
message_form = SpeakerCommentForm (request .POST )
230
230
if message_form .is_valid ():
231
-
231
+
232
232
message = message_form .save (commit = False )
233
233
message .user = request .user
234
234
message .proposal = proposal
235
235
message .save ()
236
-
236
+
237
237
ProposalMessage = SpeakerCommentForm .Meta .model
238
238
reviewers = User .objects .filter (
239
239
id__in = ProposalMessage .objects .filter (
@@ -242,7 +242,7 @@ def proposal_detail(request, pk):
242
242
user = request .user
243
243
).distinct ().values_list ("user" , flat = True )
244
244
)
245
-
245
+
246
246
for reviewer in reviewers :
247
247
ctx = {
248
248
"proposal" : proposal ,
@@ -253,13 +253,13 @@ def proposal_detail(request, pk):
253
253
[reviewer .email ], "proposal_new_message" ,
254
254
context = ctx
255
255
)
256
-
256
+
257
257
return redirect (request .path )
258
258
else :
259
259
message_form = SpeakerCommentForm ()
260
260
else :
261
261
message_form = None
262
-
262
+
263
263
return render (request , "proposals/proposal_detail.html" , {
264
264
"proposal" : proposal ,
265
265
"message_form" : message_form
@@ -271,7 +271,7 @@ def proposal_cancel(request, pk):
271
271
queryset = ProposalBase .objects .select_related ("speaker" )
272
272
proposal = get_object_or_404 (queryset , pk = pk )
273
273
proposal = ProposalBase .objects .get_subclass (pk = proposal .pk )
274
-
274
+
275
275
if proposal .speaker .user != request .user :
276
276
return HttpResponseForbidden ()
277
277
@@ -281,7 +281,7 @@ def proposal_cancel(request, pk):
281
281
# @@@ fire off email to submitter and other speakers
282
282
messages .success (request , "%s has been cancelled" % proposal .title )
283
283
return redirect ("dashboard" )
284
-
284
+
285
285
return render (request , "proposals/proposal_cancel.html" , {
286
286
"proposal" : proposal ,
287
287
})
@@ -339,10 +339,10 @@ def document_create(request, proposal_pk):
339
339
queryset = ProposalBase .objects .select_related ("speaker" )
340
340
proposal = get_object_or_404 (queryset , pk = proposal_pk )
341
341
proposal = ProposalBase .objects .get_subclass (pk = proposal .pk )
342
-
342
+
343
343
if proposal .cancelled :
344
344
return HttpResponseForbidden ()
345
-
345
+
346
346
if request .method == "POST" :
347
347
form = SupportingDocumentCreateForm (request .POST , request .FILES )
348
348
if form .is_valid ():
@@ -353,7 +353,7 @@ def document_create(request, proposal_pk):
353
353
return redirect ("proposal_detail" , proposal .pk )
354
354
else :
355
355
form = SupportingDocumentCreateForm ()
356
-
356
+
357
357
return render (request , "proposals/document_create.html" , {
358
358
"proposal" : proposal ,
359
359
"form" : form ,
@@ -378,8 +378,8 @@ def document_download(request, pk, *args):
378
378
def document_delete (request , pk ):
379
379
document = get_object_or_404 (SupportingDocument , pk = pk , uploaded_by = request .user )
380
380
proposal_pk = document .proposal .pk
381
-
381
+
382
382
if request .method == "POST" :
383
383
document .delete ()
384
-
384
+
385
385
return redirect ("proposal_detail" , proposal_pk )
0 commit comments