mirror of
https://github.com/sissbruecker/linkding
synced 2024-11-10 06:04:15 +00:00
0cbaf927e4
* Add reader mode view * Show link for latest snapshot instead
69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
import gzip
|
|
import os
|
|
|
|
from django.conf import settings
|
|
from django.http import (
|
|
HttpResponse,
|
|
Http404,
|
|
)
|
|
from django.shortcuts import render
|
|
|
|
from bookmarks.models import BookmarkAsset
|
|
|
|
|
|
def _access_asset(request, asset_id: int):
|
|
try:
|
|
asset = BookmarkAsset.objects.get(pk=asset_id)
|
|
except BookmarkAsset.DoesNotExist:
|
|
raise Http404("Asset does not exist")
|
|
|
|
bookmark = asset.bookmark
|
|
is_owner = bookmark.owner == request.user
|
|
is_shared = (
|
|
request.user.is_authenticated
|
|
and bookmark.shared
|
|
and bookmark.owner.profile.enable_sharing
|
|
)
|
|
is_public_shared = bookmark.shared and bookmark.owner.profile.enable_public_sharing
|
|
|
|
if not is_owner and not is_shared and not is_public_shared:
|
|
raise Http404("Bookmark does not exist")
|
|
|
|
return asset
|
|
|
|
|
|
def _get_asset_content(asset):
|
|
filepath = os.path.join(settings.LD_ASSET_FOLDER, asset.file)
|
|
|
|
if not os.path.exists(filepath):
|
|
raise Http404("Asset file does not exist")
|
|
|
|
if asset.gzip:
|
|
with gzip.open(filepath, "rb") as f:
|
|
content = f.read()
|
|
else:
|
|
with open(filepath, "rb") as f:
|
|
content = f.read()
|
|
|
|
return content
|
|
|
|
|
|
def view(request, asset_id: int):
|
|
asset = _access_asset(request, asset_id)
|
|
content = _get_asset_content(asset)
|
|
|
|
return HttpResponse(content, content_type=asset.content_type)
|
|
|
|
|
|
def read(request, asset_id: int):
|
|
asset = _access_asset(request, asset_id)
|
|
content = _get_asset_content(asset)
|
|
content = content.decode("utf-8")
|
|
|
|
return render(
|
|
request,
|
|
"bookmarks/read.html",
|
|
{
|
|
"content": content,
|
|
},
|
|
)
|