Sitelet https://github.com/HackAssistant/hackassistant/commit/16a4059911d3c0f9a6429d28bb17c4de949d4631
Skip to content

Commit 16a4059

Browse files
authored
Added reject and added cookie samesite strict (#117)
1 parent e978b19 commit 16a4059

9 files changed

Lines changed: 35 additions & 24 deletions

File tree

‎app/settings.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,8 @@
391391
}
392392

393393
SESSION_COOKIE_AGE = 86400
394+
SESSION_COOKIE_SAMESITE = "Strict"
395+
CSRF_COOKIE_SAMESITE = "Strict"
394396

395397
# Cache system
396398
CACHES = {

‎friends/templates/invite_friends.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{% block invite_list_title %}
44
<div class="row justify-content-between gy-2">
55
<div class="col-12 col-lg-2 d-grid d-md-block">
6-
<a href="{% url 'application_invite' %}?type={{ application_type.name }}&status={{ Application.STATUS_PENDING }}" class="btn btn-secondary col-12"><i class="bi bi-caret-left-fill"></i> {% translate 'Back' %}</a>
6+
<a href="{% url 'application_invite' %}?type={{ application_type.name }}&status={{ Application.STATUS_PENDING }}&status={{ Application.STATUS_REJECTED }}" class="btn btn-secondary col-12"><i class="bi bi-caret-left-fill"></i> {% translate 'Back' %}</a>
77
</div>
88
</div>
99
<h1 class="mt-3">{% translate 'Friend list invite' %}</h1>

‎friends/views.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from friends.forms import FriendsForm
1717
from friends.models import FriendsCode
1818
from friends.tables import FriendInviteTable
19-
from review.emails import get_invitation_email
19+
from review.emails import get_invitation_or_waitlist_email
2020
from review.views import ReviewApplicationTabsMixin, ApplicationListInvite
2121
from user.mixins import LoginRequiredMixin, IsOrganizerMixin
2222
from django.utils.translation import gettext_lazy as _
@@ -125,7 +125,7 @@ def post(self, request, *args, **kwargs):
125125
application.save()
126126
log.save()
127127
invited += 1
128-
emails.add(get_invitation_email(request, application))
128+
emails.add(get_invitation_or_waitlist_email(request, application))
129129
except Error:
130130
error += 1
131131
emails = emails.send_all()

‎review/emails.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ def send_dubious_email(request, application, reason, name):
2121
bcc=[request.user.email, ], request=request).send()
2222

2323

24-
def get_invitation_email(request, application):
24+
def get_invitation_or_waitlist_email(request, application):
2525
context = {
2626
'application': application,
2727
'url': request.build_absolute_uri(reverse('home')),
2828
}
29-
return Email(name='application_invite', context=context, to=application.user.email, request=request)
29+
return Email(name='application_invite_or_waitlist', context=context, to=application.user.email, request=request)

‎review/templates/application_list.html‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ <h1 class="mt-3">{% translate 'Invite applications' %}</h1>
9595
</div>
9696
{% if not application_type.auto_confirm and perms|add_type:application_type.name|has_application_perm:'can_invite_application' %}
9797
<div class="d-grid gap-2 col-lg-6 mx-auto mt-3">
98-
<a href="{% url 'application_invite' %}?type={{ application_type.name }}&status={{ Application.STATUS_PENDING }}" class="btn btn-primary">{% translate 'Invite' %}</a>
98+
<a href="{% url 'application_invite' %}?type={{ application_type.name }}&status={{ Application.STATUS_PENDING }}&status={{ Application.STATUS_REJECTED }}" class="btn btn-primary">{% translate 'Invite or reject' %}</a>
9999
</div>
100100
{% endif %}
101101
{% else %}
@@ -108,12 +108,15 @@ <h1 class="mt-3">{% translate 'Invite applications' %}</h1>
108108
{% csrf_token %}
109109
{% include 'components/table.html' %}
110110
<div class="d-grid gap-2 col-lg-6 mx-auto mt-2">
111-
<button class="btn btn-primary" onclick="return confirm_invite()">{% translate 'Confirm invite' %}</button>
111+
<button class="btn btn-primary" name="status" value="{{ Application.STATUS_INVITED }}" onclick="return confirm_invite()">{% translate 'Confirm invite' %}</button>
112112
</div>
113113
{% block more_invites %}
114114
<div class="d-grid gap-2 col-lg-6 mx-auto mt-2">
115115
<a href="{% url 'invite_friends' %}?type={{ application_type.name }}" class="btn btn-secondary">{% translate 'Group by friends' %}</a>
116116
</div>
117+
<div class="d-grid gap-2 col-lg-6 mx-auto mt-2">
118+
<button class="btn btn-danger" name="status" value="{{ Application.STATUS_REJECTED }}" onclick="return confirm_reject()">{% translate 'Reject selected' %}</button>
119+
</div>
117120
{% endblock %}
118121
</form>
119122
<script nonce="{{ request.csp_nonce }}">
@@ -131,6 +134,10 @@ <h1 class="mt-3">{% translate 'Invite applications' %}</h1>
131134
let number_checked = get_invited_application_number()
132135
return confirm(number_checked + ' {% translate 'applications will be invited. Are you sure?' %}')
133136
}
137+
function confirm_reject() {
138+
let number_checked = get_invited_application_number()
139+
return confirm(number_checked + ' {% translate 'applications will be rejected. Are you sure?' %}')
140+
}
134141
$(document).ready(() => {
135142
let spots = {{ application_type.get_spots_with_attrition }};
136143
let free_spots = spots - ({{ application_stats.accepted }} + {{ application_stats.invited }});

‎review/templates/mails/application_invite.txt‎

Lines changed: 0 additions & 1 deletion
This file was deleted.

review/templates/mails/application_invite.html renamed to review/templates/mails/application_invite_or_waitlist.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{% block content %}
33
<p>Hi {{ application.user.first_name }},</p>
44
<p>Your {{ application.type.name|lower }} application for {{ app_hack }} has been updated.</p>
5-
{% if application.type.expire_invitations > 0 %}
5+
{% if application.type.expire_invitations > 0 and application.status == application.STATUS_INVITED %}
66
<p><strong>You have {{ application.type.expire_invitations }} days to answer, after that, your application will expire.</strong></p>
77
{% endif %}
88

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
UPDATE: {{ application.type.name|lower }} application

‎review/views.py‎

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from application import forms
2727
from application.mixins import ApplicationPermissionRequiredMixin
2828
from application.models import Application, FileField, ApplicationLog, ApplicationTypeConfig, PromotionalCode
29-
from review.emails import get_invitation_email
29+
from review.emails import get_invitation_or_waitlist_email
3030
from review.filters import ApplicationTableFilter, ApplicationTableFilterWithPromotion
3131
from review.forms import CommentForm, DubiousApplicationForm
3232
from review.models import Vote, FileReview, CommentReaction
@@ -318,24 +318,26 @@ def post(self, request, *args, **kwargs):
318318
selection = request.POST.getlist('select')
319319
error = 0
320320
emails = EmailList()
321+
new_status = request.POST.get('status', Application.STATUS_INVITED)
322+
status_name = [y for x, y in Application.STATUS if x == new_status][0]
321323
for application in Application.objects.actual().filter(uuid__in=selection):
322-
log = ApplicationLog(application=application, user=request.user, name='Invited')
323-
log.changes = {'status': {'old': application.status, 'new': Application.STATUS_INVITED}}
324-
application.set_status(Application.STATUS_INVITED)
325-
try:
326-
application.save()
327-
log.save()
328-
emails.add(get_invitation_email(request, application))
329-
except Error:
330-
error += 1
324+
if application.status != new_status:
325+
log = ApplicationLog(application=application, user=request.user, name=status_name)
326+
log.changes = {'status': {'old': application.status, 'new': new_status}}
327+
application.set_status(new_status)
328+
try:
329+
application.save()
330+
log.save()
331+
emails.add(get_invitation_or_waitlist_email(request, application))
332+
except Error:
333+
error += 1
331334
emails = emails.send_all()
332335
if error > 0:
333-
messages.error(request, _('Invited %s, Emails sent: %s, Error: %s') %
334-
(len(selection) - error, emails or 0, error))
336+
messages.error(request, _('%s %s, Emails sent: %s, Error: %s') %
337+
(status_name, len(selection) - error, emails or 0, error))
335338
else:
336-
messages.success(request, _('Invited: %s, Emails sent: %s' % (len(selection), emails or 0)))
337-
return redirect(reverse('application_list') + '?type=%s&status=%s' % (self.get_application_type(),
338-
Application.STATUS_INVITED))
339+
messages.success(request, _('%s: %s, Emails sent: %s' % (status_name, len(selection), emails or 0)))
340+
return redirect(reverse('application_list') + '?type=%s&status=%s' % (self.get_application_type(), new_status))
339341

340342

341343
class FileReviewView(ApplicationPermissionRequiredMixin, TabsViewMixin, TemplateView):

0 commit comments

Comments
 (0)