Fixes cache of status interact

The CSRF token was being cached which caused submits to fail
This commit is contained in:
Mouse Reeve
2022-01-06 11:07:22 -08:00
parent 32ac4111aa
commit e416ef05e8
4 changed files with 26 additions and 22 deletions

View File

@ -1,7 +1,6 @@
""" boosts and favs """
from django.contrib.auth.decorators import login_required
from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key
from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound
from django.shortcuts import redirect
@ -19,7 +18,7 @@ class Favorite(View):
def post(self, request, status_id):
"""create a like"""
clear_cache(request.user.id, status_id)
cache.delete(f"fav-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
try:
models.Favorite.objects.create(status=status, user=request.user)
@ -38,6 +37,7 @@ class Unfavorite(View):
def post(self, request, status_id):
"""unlike a status"""
cache.delete(f"fav-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
try:
favorite = models.Favorite.objects.get(status=status, user=request.user)
@ -46,7 +46,6 @@ class Unfavorite(View):
return HttpResponseNotFound()
favorite.delete()
clear_cache(request.user.id, status_id)
if is_api_request(request):
return HttpResponse()
return redirect(request.headers.get("Referer", "/"))
@ -58,6 +57,7 @@ class Boost(View):
def post(self, request, status_id):
"""boost a status"""
cache.delete(f"boost-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
# is it boostable?
if not status.boostable:
@ -74,7 +74,6 @@ class Boost(View):
privacy=status.privacy,
user=request.user,
)
clear_cache(request.user.id, status_id)
if is_api_request(request):
return HttpResponse()
return redirect(request.headers.get("Referer", "/"))
@ -86,19 +85,13 @@ class Unboost(View):
def post(self, request, status_id):
"""boost a status"""
cache.delete(f"boost-{request.user.id}-{status_id}")
status = models.Status.objects.get(id=status_id)
boost = models.Boost.objects.filter(
boosted_status=status, user=request.user
).first()
boost.delete()
clear_cache(request.user.id, status_id)
if is_api_request(request):
return HttpResponse()
return redirect(request.headers.get("Referer", "/"))
def clear_cache(user_id, status_id):
"""clear template cache"""
cache_key = make_template_fragment_key("interact", [user_id, status_id])
cache.delete(cache_key)