fix a few 500 caused by malformed url from search engine bots

This commit is contained in:
Your Name 2023-02-03 00:02:43 -05:00 committed by Henri Dickson
parent 4e70b62641
commit f5124759ee
4 changed files with 22 additions and 3 deletions

View file

@ -162,7 +162,7 @@ class DateField(JSONFieldMixin, fields.DateField):
if value:
if not isinstance(value, (datetime, date)):
value = dateparse.parse_date(value)
return value.strftime("%Y-%m-%d")
return value.strftime("%Y-%m-%d") if value else None
def from_json(self, value):
if value is not None:

View file

@ -41,7 +41,10 @@ def retrieve_by_uuid(request, item_uid):
def retrieve(request, item_path, item_uuid):
if request.method == "GET":
item = get_object_or_404(Item, uid=base62.decode(item_uuid))
# item = get_object_or_404(Item, uid=base62.decode(item_uuid))
item = Item.get_by_url(item_uuid)
if item is None:
return HttpResponseNotFound()
item_url = f"/{item_path}/{item_uuid}"
if item.url != item_url:
return redirect(item.url)

View file

@ -117,6 +117,19 @@ class Piece(PolymorphicModel, UserOwnedObjectMixin):
def api_url(self):
return f"/api/{self.url}" if self.url_path else None
@classmethod
def get_by_url(cls, url_or_b62):
b62 = url_or_b62.strip().split("/")[-1]
if len(b62) not in [21, 22]:
r = re.search(r"[A-Za-z0-9]{21,22}", url_or_b62)
if r:
b62 = r[0]
try:
obj = cls.objects.get(uid=uuid.UUID(int=base62.decode(b62)))
except:
obj = None
return obj
class Content(Piece):
owner = models.ForeignKey(User, on_delete=models.PROTECT)

View file

@ -480,7 +480,10 @@ def collection_edit(request, collection_uuid=None):
def review_retrieve(request, review_uuid):
piece = get_object_or_404(Review, uid=base62.decode(review_uuid))
# piece = get_object_or_404(Review, uid=base62.decode(review_uuid))
piece = Review.get_by_url(review_uuid)
if piece is None:
return HttpResponseNotFound()
if not piece.is_visible_to(request.user):
raise PermissionDenied()
return render(request, "review.html", {"review": piece})