From d6ff5057cb4371f47ce9ddcdebf9e2e8713cb0f7 Mon Sep 17 00:00:00 2001 From: Andreas Knab Date: Wed, 5 Apr 2023 20:05:38 +0200 Subject: [PATCH 1/3] Fix contexts --- rooibos/data/views.py | 5 ++--- rooibos/presentation/views.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rooibos/data/views.py b/rooibos/data/views.py index 92ea93ba1..30e705c23 100644 --- a/rooibos/data/views.py +++ b/rooibos/data/views.py @@ -1106,7 +1106,7 @@ def annotation_list(request, id, name): }) return { - '@context': reverse('data-record-manifest', kwargs=dict(identifier=id, name=name)), + '@context': 'http://iiif.io/api/image/2/context.json', '@type': 'sc:Manifest', '@id': get_id( request, 'record', 'record%d' % record.id, @@ -1124,8 +1124,7 @@ def record_manifest(request, identifier, name): owner = request.user if request.user.is_authenticated else None return { - '@context': reverse( - record_manifest, kwargs=dict(identifier=identifier, name=name)), + '@context': 'http://iiif.io/api/image/2/context.json', '@type': 'sc:Manifest', '@id': get_id(request, 'record', 'record%d' % record.id, 'manifest'), 'label': record.title, diff --git a/rooibos/presentation/views.py b/rooibos/presentation/views.py index 1853f550f..c8e1916ba 100644 --- a/rooibos/presentation/views.py +++ b/rooibos/presentation/views.py @@ -848,7 +848,7 @@ def raw_manifest(request, id, name, offline=False): slides = p.items.select_related('record').filter(hidden=False) return { - '@context': reverse(manifest, kwargs=dict(id=p.id, name=p.name)), + '@context': 'http://iiif.io/api/presentation/2/context.json', '@type': 'sc:Manifest', '@id': get_id( request, 'presentation', 'presentation%d' % p.id, 'manifest', @@ -910,7 +910,7 @@ def annotation_list(request, id, name, slide_id): }) return { - '@context': reverse(manifest, kwargs=dict(id=p.id, name=p.name)), + '@context': 'http://iiif.io/api/presentation/2/context.json', '@type': 'sc:Manifest', '@id': get_id( request, 'presentation', 'presentation%d' % p.id, From 657fad81e31f1e1781282906efc8afb7123689ce Mon Sep 17 00:00:00 2001 From: Andreas Knab Date: Wed, 5 Apr 2023 20:07:28 +0200 Subject: [PATCH 2/3] Fix sequence type --- rooibos/data/views.py | 2 +- rooibos/presentation/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rooibos/data/views.py b/rooibos/data/views.py index 30e705c23..95cf94801 100644 --- a/rooibos/data/views.py +++ b/rooibos/data/views.py @@ -1132,7 +1132,7 @@ def record_manifest(request, identifier, name): 'description': '', 'sequences': [{ '@id': get_id(request, 'record', 'record%d' % record.id), - '@type': 'sc:Range', + '@type': 'sc:Sequence', 'label': 'Record', 'canvases': [ single_record_manifest( diff --git a/rooibos/presentation/views.py b/rooibos/presentation/views.py index c8e1916ba..2f52190ee 100644 --- a/rooibos/presentation/views.py +++ b/rooibos/presentation/views.py @@ -860,7 +860,7 @@ def raw_manifest(request, id, name, offline=False): '@id': get_id( request, 'presentation', 'presentation%d' % p.id, 'all', offline=offline), - '@type': 'sc:Range', + '@type': 'sc:Sequence', 'label': 'All slides', 'canvases': [ slide_manifest( From cb19d24a61cd147d428cd5a1f549591d960b9ceb Mon Sep 17 00:00:00 2001 From: Andreas Knab Date: Wed, 5 Apr 2023 20:24:13 +0200 Subject: [PATCH 3/3] Add 'https:' to all URls --- rooibos/data/views.py | 9 ++++----- rooibos/presentation/views.py | 28 ++++++++++++---------------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/rooibos/data/views.py b/rooibos/data/views.py index 95cf94801..eeaa6e52a 100644 --- a/rooibos/data/views.py +++ b/rooibos/data/views.py @@ -35,7 +35,7 @@ from rooibos.util import safe_int, validate_next_link, json_view from rooibos.middleware import HistoryMiddleware from .tasks import csvimport -from rooibos.presentation.views import get_id, get_metadata, special_slide +from rooibos.presentation.views import get_id, get_metadata, special_slide, get_server from ..storage.functions import get_media_for_record from ..viewers import get_viewers_for_object @@ -1003,8 +1003,7 @@ def single_record_manifest(request, record, owner): fieldvalues = record.get_fieldvalues(owner=owner) title = title_from_fieldvalues(fieldvalues) or 'Untitled', id = get_id(request, 'record', 'canvas', 'record%d' % record.id) - server = '//' + request.META.get( - 'HTTP_X_FORWARDED_HOST', request.META['HTTP_HOST']) + server = get_server(request) image = server + record.get_image_url( force_reprocess=False, handler='storage-retrieve-iiif-image', @@ -1047,7 +1046,7 @@ def single_record_manifest(request, record, owner): viewers = list(get_viewers_for_object(record, request)) if len(viewers) > 0: other_content.append({ - '@id': reverse( + '@id': server + reverse( 'data-annotation-list', kwargs={ 'id': record.id, @@ -1099,7 +1098,7 @@ def annotation_list(request, id, name): '@type': 'oa:Annotation', 'motivation': 'sc:painting', 'resource': { - '@id': viewer.url('embed'), + '@id': get_server(request) + viewer.url('embed'), '@type': 'dctypes:Text', 'format': 'text/html', }, diff --git a/rooibos/presentation/views.py b/rooibos/presentation/views.py index 2f52190ee..73b9564e3 100644 --- a/rooibos/presentation/views.py +++ b/rooibos/presentation/views.py @@ -654,14 +654,14 @@ def record_usage(request, id, name): ) +def get_server(request, offline=False): + return '' if offline else 'https://' + request.META.get( + 'HTTP_X_FORWARDED_HOST', request.META['HTTP_HOST']) + + def get_id(request, *args, offline=False): - if not offline: - server = '//' + request.META.get( - 'HTTP_X_FORWARDED_HOST', request.META['HTTP_HOST']) - else: - server = '' s = '/'.join(map(str, args)) - return '%s/iiif/%s' % (server, s) + return '%s/iiif/%s' % (get_server(request, offline), s) def get_metadata(fieldvalues): @@ -686,11 +686,7 @@ def slide_manifest(request, slide, owner, offline=False): title = title_from_fieldvalues(fieldvalues) or 'Untitled', id = get_id( request, 'slide', 'canvas', 'slide%d' % slide.id, offline=offline) - if not offline: - server = '//' + request.META.get( - 'HTTP_X_FORWARDED_HOST', request.META['HTTP_HOST']) - else: - server = '' + server = get_server(request, offline) image = server + slide.record.get_image_url( force_reprocess=False, handler='storage-retrieve-iiif-image', @@ -749,7 +745,7 @@ def slide_manifest(request, slide, owner, offline=False): viewers = list(get_viewers_for_object(slide.record, request)) if len(viewers) > 0: other_content.append({ - '@id': reverse( + '@id': server + reverse( 'presentation-annotation-list', kwargs={ 'id': slide.presentation.id, @@ -796,7 +792,7 @@ def slide_manifest(request, slide, owner, offline=False): def special_slide(request, kind, label, index=None, offline=False): - image = reverse( + image = get_server(request, offline) + reverse( 'presentation-%s-slide' % kind, kwargs={'extra': str(index) if index else ''} ) @@ -903,7 +899,7 @@ def annotation_list(request, id, name, slide_id): '@type': 'oa:Annotation', 'motivation': 'sc:painting', 'resource': { - '@id': viewer.url('embed'), + '@id': get_server(request) + viewer.url('embed'), '@type': 'dctypes:Text', 'format': 'text/html', }, @@ -938,7 +934,7 @@ def transparent_png(request, extra): return HttpResponse( content=_get_info_json_for_png( 100, - reverse('presentation-blank-slide', kwargs={'extra': ''}) + get_server(request) + reverse('presentation-blank-slide', kwargs={'extra': ''}) ), content_type='application/json', ) @@ -957,7 +953,7 @@ def missing_png(request, extra): return HttpResponse( content=_get_info_json_for_png( 200, - reverse('presentation-missing-slide', kwargs={'extra': ''}) + get_server(request) + reverse('presentation-missing-slide', kwargs={'extra': ''}) ), content_type='application/json', )