diff --git a/__tests__/integration/mirador/authz.html b/__tests__/integration/mirador/authz.html
new file mode 100644
index 0000000000..caec359a05
--- /dev/null
+++ b/__tests__/integration/mirador/authz.html
@@ -0,0 +1,24 @@
+
+
+
+
+
);
diff --git a/src/culPlugins/mirador-videojs/index.js b/src/culPlugins/mirador-videojs/index.js
new file mode 100644
index 0000000000..2450e8397c
--- /dev/null
+++ b/src/culPlugins/mirador-videojs/index.js
@@ -0,0 +1,19 @@
+import VideoJSAudioViewerComponent from './components/VideoJSAudioViewer';
+import VideoJSViewerComponent from './components/VideoJSViewer';
+
+export default [
+ {
+ component: VideoJSAudioViewerComponent,
+ mode: 'wrap',
+ name: 'VideoJSAudioViewer',
+ target: 'AudioViewer',
+ },
+ {
+ component: VideoJSViewerComponent,
+ mode: 'wrap',
+ name: 'VideoJSViewer',
+ target: 'VideoViewer',
+ },
+];
+
+export { VideoJSAudioViewerComponent, VideoJSViewerComponent };
diff --git a/src/plugins/mirador-viewXml/MiradorViewXmlDialog.js b/src/culPlugins/mirador-viewXml/MiradorViewXmlDialog.js
similarity index 100%
rename from src/plugins/mirador-viewXml/MiradorViewXmlDialog.js
rename to src/culPlugins/mirador-viewXml/MiradorViewXmlDialog.js
diff --git a/src/plugins/mirador-viewXml/MiradorViewXmlPlugin.js b/src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js
similarity index 100%
rename from src/plugins/mirador-viewXml/MiradorViewXmlPlugin.js
rename to src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js
diff --git a/src/plugins/mirador-viewXml/index.js b/src/culPlugins/mirador-viewXml/index.js
similarity index 100%
rename from src/plugins/mirador-viewXml/index.js
rename to src/culPlugins/mirador-viewXml/index.js
diff --git a/src/plugins/mirador-viewXml/state/selectors.js b/src/culPlugins/mirador-viewXml/state/selectors.js
similarity index 100%
rename from src/plugins/mirador-viewXml/state/selectors.js
rename to src/culPlugins/mirador-viewXml/state/selectors.js
diff --git a/src/index.js b/src/index.js
index 84091415de..c2760b6d2d 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,7 +1,9 @@
import init from './init';
import state from './state';
+import culPlugins from './culPlugins';
export default {
...init,
...state,
+ culPlugins,
};
diff --git a/src/init.js b/src/init.js
index 1604375329..4a39f5be12 100644
--- a/src/init.js
+++ b/src/init.js
@@ -1,5 +1,4 @@
import MiradorViewer from './lib/MiradorViewer';
-
/**
* Default Mirador instantiation
*/
diff --git a/src/lib/getServices.js b/src/lib/getServices.js
index 28ba82779d..ddb800f366 100644
--- a/src/lib/getServices.js
+++ b/src/lib/getServices.js
@@ -1,14 +1,15 @@
import { Utils } from 'manifesto.js';
import { filterByTypes } from './typeFilters';
+import flatten from 'lodash/flatten';
/**
*/
export function anyAuthServices(resource) {
+ console.log({resource, services: Utils.getServices(resource)});
return resource
&& Utils.getServices(resource).filter(s => (s.getProfile()
&& s.getProfile().match(/http:\/\/iiif.io\/api\/auth\//))
- || (s.getProperty('type')
- && s.getProperty('type').match(/^Auth.*2$/)));
+ || (s.getProperty('type')?.match(/^Auth.*Service2$/)));
}
/**
@@ -26,9 +27,7 @@ export function getProbeService(resource) {
&& anyProbeServices(resource)[0];
}
-/**
- */
-export function getTokenService(resource) {
+function auth1TokenService(resource) {
return resource
&& (
Utils.getService(resource, 'http://iiif.io/api/auth/1/token')
@@ -37,6 +36,25 @@ export function getTokenService(resource) {
);
}
+export function anyTokenServices(resource) {
+ const v1TokenService = auth1TokenService(resource);
+ if (v1TokenService) return [ v1TokenService ];
+ const services = resource && filterByTypes(Utils.getServices(resource), 'AuthAccessTokenService2');
+ if (services && services[0]) return services;
+ if (resource) {
+ // probe services are separated from token services by access services
+ const authServices = anyAuthServices(resource);
+ if (authServices[0]) return flatten(authServices.map(authSvc => anyTokenServices(authSvc)));
+ }
+ return [];
+}
+
+/**
+ */
+export function getTokenService(resource) {
+ return anyTokenServices(resource)[0];
+}
+
/**
*/
export function getLogoutService(resource) {
diff --git a/src/plugins/mirador-videojs/index.js b/src/plugins/mirador-videojs/index.js
deleted file mode 100644
index b958acfd8d..0000000000
--- a/src/plugins/mirador-videojs/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import VideoJSViewerComponent from './components/VideoJSViewer';
-
-export default [
- {
- component: VideoJSViewerComponent,
- mode: 'wrap',
- name: 'VideoJSViewer',
- target: 'VideoViewer',
- },
-];
-
-export { VideoJSViewerComponent };
diff --git a/src/state/sagas/auth.js b/src/state/sagas/auth.js
index 3fe5dd81d2..93c64f0dfd 100644
--- a/src/state/sagas/auth.js
+++ b/src/state/sagas/auth.js
@@ -5,7 +5,7 @@ import { Utils } from 'manifesto.js';
import flatten from 'lodash/flatten';
import ActionTypes from '../actions/action-types';
import MiradorCanvas from '../../lib/MiradorCanvas';
-import { getTokenService, getProbeService } from '../../lib/getServices';
+import { anyTokenServices, getTokenService, getProbeService } from '../../lib/getServices';
import {
addAuthenticationRequest,
resolveAuthenticationRequest,
@@ -92,19 +92,22 @@ export function* refetchProbeResponses({ serviceId }) {
Object.keys(windows).map(windowId => select(getVisibleCanvases, { windowId })),
);
- const visibleProbeServiceIds = flatten(flatten(canvases).map((canvas) => {
+ const visibleProbeServices = flatten(flatten(canvases).map((canvas) => {
const miradorCanvas = new MiradorCanvas(canvas);
return miradorCanvas.imageResources.filter((r) => getProbeService(r)).map((r) => getProbeService(r));
}));
+ const probeTokenServices = {};
+ visibleProbeServices.reduce((acc, probeService) => {
+ acc[probeService.id] = anyTokenServices(probeService);
+ return acc;
+ }, probeTokenServices)
const probeResponses = yield select(selectProbeResponses);
+
/** */
const haveThisTokenService = probeResponse => {
- const services = Utils.getServices(probeResponse);
- return services.some(e => {
- const probeTokenService = getTokenService(e);
- return probeTokenService && probeTokenService.id === serviceId;
- });
+ const tokenServices = probeTokenServices[probeResponse.id];
+ return tokenServices && tokenServices.find(s => s.id === serviceId);
};
const obsoleteProbeResponses = Object.values(probeResponses).filter(
@@ -112,8 +115,9 @@ export function* refetchProbeResponses({ serviceId }) {
);
yield all(obsoleteProbeResponses.map(({ id: probeId }) => {
- if (visibleProbeServiceIds.includes(probeId)) {
- return call(fetchProbeResponse, { probeId });
+ const refetchableProbeService = visibleProbeServices.find(s=> s.id === probeId);
+ if (refetchableProbeService) {
+ return call(fetchProbeResponse, { probeId, resource: refetchableProbeService });
}
return put({ probeId, type: ActionTypes.REMOVE_PROBE_RESPONSE });
}));
diff --git a/webpack.config.js b/webpack.config.js
index 6e3c1e838f..96f3e507c2 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -21,6 +21,20 @@ const baseConfig = mode => ({
},
test: /\.(js|mjs|jsx)$/,
},
+ {
+ include: path.resolve(fs.realpathSync(process.cwd()), '.'), // CRL
+ test: /\.(css|scss|sass)$/,
+ use: [
+ 'style-loader',
+ 'css-loader',
+ {
+ loader: require.resolve('sass-loader'),
+ options: {
+ sourceMap: (mode !== 'production'),
+ },
+ },
+ ],
+ },
],
},
optimization: {
@@ -71,7 +85,14 @@ module.exports = (env, options) => {
...config,
devServer: {
hot: true,
- port: 4444,
+ host: 'dev.local',
+ server: {
+ type: 'https',
+ options: {
+ key: fs.readFileSync("/Users/benjamin/local-ssl/dev.local.key"),
+ cert: fs.readFileSync("/Users/benjamin/local-ssl/dev.local.crt")
+ }
+ },
static: [
'./__tests__/integration/mirador',
'./__tests__/fixtures',