mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-18 17:14:39 -04:00
make archivebox server work for urls, hashes, and timestamps
This commit is contained in:
parent
95007d9137
commit
d26f87efef
4 changed files with 79 additions and 24 deletions
|
@ -1,9 +1,15 @@
|
|||
from django.shortcuts import render
|
||||
__package__ = 'archivebox.core'
|
||||
|
||||
from django.views import View
|
||||
from django.shortcuts import render, redirect
|
||||
|
||||
from .index import load_main_index, load_main_index_meta
|
||||
from .config import OUTPUT_DIR
|
||||
from django.http import HttpResponse
|
||||
from django.views import View, static
|
||||
|
||||
from core.models import Page
|
||||
|
||||
from ..index import load_main_index, load_main_index_meta
|
||||
from ..config import OUTPUT_DIR, VERSION, FOOTER_INFO
|
||||
from ..util import base_url
|
||||
|
||||
|
||||
class MainIndex(View):
|
||||
|
@ -17,6 +23,8 @@ class MainIndex(View):
|
|||
'updated': meta_info['updated'],
|
||||
'num_links': meta_info['num_links'],
|
||||
'links': all_links,
|
||||
'VERSION': VERSION,
|
||||
'FOOTER_INFO': FOOTER_INFO,
|
||||
}
|
||||
|
||||
return render(template_name=self.template, request=request, context=context)
|
||||
|
@ -41,7 +49,45 @@ class AddLinks(View):
|
|||
|
||||
|
||||
class LinkDetails(View):
|
||||
template = 'link_details.html'
|
||||
def get(self, request, path):
|
||||
# missing trailing slash -> redirect to index
|
||||
if '/' not in path:
|
||||
return redirect(f'{path}/index.html')
|
||||
|
||||
def get(self, request):
|
||||
return render(template_name=self.template, request=request, context={})
|
||||
try:
|
||||
slug, archivefile = path.split('/', 1)
|
||||
except (IndexError, ValueError):
|
||||
slug, archivefile = path.split('/', 1)[0], 'index.html'
|
||||
|
||||
all_pages = list(Page.objects.all())
|
||||
|
||||
# slug is a timestamp
|
||||
by_ts = {page.timestamp: page for page in all_pages}
|
||||
try:
|
||||
return static.serve(request, archivefile, by_ts[slug].link_dir, show_indexes=True)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
# slug is a hash
|
||||
by_hash = {page.url_hash: page for page in all_pages}
|
||||
try:
|
||||
timestamp = by_hash[slug].timestamp
|
||||
return redirect(f'/archive/{timestamp}/{archivefile}')
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
# slug is a URL
|
||||
by_url = {page.base_url: page for page in all_pages}
|
||||
try:
|
||||
# TODO: add multiple snapshot support by showing index of all snapshots
|
||||
# for given url instead of redirecting to timestamp index
|
||||
timestamp = by_url[base_url(path)].timestamp
|
||||
return redirect(f'/archive/{timestamp}/index.html')
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return HttpResponse(
|
||||
'No archived link matches the given timestamp or hash.',
|
||||
content_type="text/plain",
|
||||
status=404,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue