UNPKG

@acdh-oeaw/universalviewer

Version:

The Universal Viewer is a community-developed open source project on a mission to help you share your 📚📜📰📽️📻🗿 with the 🌎

251 lines 11.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Auth09 = void 0; var $ = require("jquery"); var IIIFEvents_1 = require("../../IIIFEvents"); var InformationArgs_1 = require("./InformationArgs"); var InformationType_1 = require("./InformationType"); var LoginWarningMessages_1 = require("./LoginWarningMessages"); var manifesto_js_1 = require("manifesto.js"); var utils_1 = require("@edsilv/utils"); var HTTPStatusCode = __importStar(require("@edsilv/http-status-codes")); var Events_1 = require("../../../../Events"); var Auth09 = /** @class */ (function () { function Auth09() { } Auth09.loadExternalResources = function (resourcesToLoad, storageStrategy) { return new Promise(function (resolve) { manifesto_js_1.Utils.loadExternalResourcesAuth09(resourcesToLoad, storageStrategy, Auth09.clickThrough, Auth09.restricted, Auth09.login, Auth09.getAccessToken, Auth09.storeAccessToken, Auth09.getStoredAccessToken, Auth09.handleExternalResourceResponse) .then(function (r) { resolve(r); })["catch"](function (error) { switch (error.name) { case manifesto_js_1.StatusCode.AUTHORIZATION_FAILED.toString(): Auth09.publish(IIIFEvents_1.IIIFEvents.LOGIN_FAILED); break; case manifesto_js_1.StatusCode.FORBIDDEN.toString(): Auth09.publish(IIIFEvents_1.IIIFEvents.FORBIDDEN); break; case manifesto_js_1.StatusCode.RESTRICTED.toString(): // do nothing break; default: Auth09.publish(IIIFEvents_1.IIIFEvents.SHOW_MESSAGE, [error.message || error]); } }); }); }; Auth09.clickThrough = function (resource) { return new Promise(function (resolve) { Auth09.publish(IIIFEvents_1.IIIFEvents.SHOW_CLICKTHROUGH_DIALOGUE, [ { resource: resource, acceptCallback: function () { if (resource.clickThroughService) { var win_1 = window.open(resource.clickThroughService.id); var pollTimer_1 = window.setInterval(function () { if (win_1 && win_1.closed) { window.clearInterval(pollTimer_1); Auth09.publish(IIIFEvents_1.IIIFEvents.CLICKTHROUGH); resolve(); } }, 500); } }, }, ]); }); }; Auth09.restricted = function (resource) { return new Promise(function (resolve, reject) { Auth09.publish(IIIFEvents_1.IIIFEvents.SHOW_RESTRICTED_DIALOGUE, [ { resource: resource, acceptCallback: function () { Auth09.publish(Events_1.Events.LOAD_FAILED); reject(resource); }, }, ]); }); }; Auth09.login = function (resource) { return new Promise(function (resolve) { var options = {}; if (resource.status === HTTPStatusCode.FORBIDDEN) { options.warningMessage = LoginWarningMessages_1.LoginWarningMessages.FORBIDDEN; options.showCancelButton = true; } console.log("login"); Auth09.publish(IIIFEvents_1.IIIFEvents.SHOW_LOGIN_DIALOGUE, [ { resource: resource, loginCallback: function () { if (resource.loginService) { var win_2 = window.open(resource.loginService.id + "?t=" + new Date().getTime()); var pollTimer_2 = window.setInterval(function () { if (win_2 && win_2.closed) { window.clearInterval(pollTimer_2); Auth09.publish(IIIFEvents_1.IIIFEvents.LOGIN); resolve(); } }, 500); } }, logoutCallback: function () { if (resource.logoutService) { var win_3 = window.open(resource.logoutService.id + "?t=" + new Date().getTime()); var pollTimer_3 = window.setInterval(function () { if (win_3 && win_3.closed) { window.clearInterval(pollTimer_3); Auth09.publish(IIIFEvents_1.IIIFEvents.LOGOUT); resolve(); } }, 500); } }, options: options, }, ]); }); }; Auth09.getAccessToken = function (resource, rejectOnError) { return new Promise(function (resolve, reject) { if (resource.tokenService) { var serviceUri = resource.tokenService.id; // pick an identifier for this message. We might want to keep track of sent messages var msgId = serviceUri + "|" + new Date().getTime(); var receiveAccessToken_1 = function (e) { window.removeEventListener("message", receiveAccessToken_1); var token = e.data; if (token.error) { if (rejectOnError) { reject(token.errorDescription); } else { reject(undefined); } } else { resolve(token); } }; window.addEventListener("message", receiveAccessToken_1, false); var tokenUri = serviceUri + "?messageId=" + msgId; $("#commsFrame").prop("src", tokenUri); } else { reject("Token service not found"); } }); }; Auth09.storeAccessToken = function (resource, token, storageStrategy) { return new Promise(function (resolve, reject) { if (resource.tokenService) { utils_1.Storage.set(resource.tokenService.id, token, token.expiresIn, storageStrategy); resolve(); } else { reject("Token service not found"); } }); }; Auth09.getStoredAccessToken = function (resource, storageStrategy) { return new Promise(function (resolve, _reject) { var foundItems = []; var item = null; // try to match on the tokenService, if the resource has one: if (resource.tokenService) { item = utils_1.Storage.get(resource.tokenService.id, storageStrategy); } if (item) { foundItems.push(item); } else { // find an access token for the domain var domain = utils_1.Urls.getUrlParts(resource.dataUri).hostname; var items = utils_1.Storage.getItems(storageStrategy); for (var i = 0; i < items.length; i++) { item = items[i]; if (item.key.includes(domain)) { foundItems.push(item); } } } // sort by expiresAt, earliest to most recent. foundItems = foundItems.sort(function (a, b) { return a.expiresAt - b.expiresAt; }); var foundToken; if (foundItems.length) { foundToken = foundItems[foundItems.length - 1].value; resolve(foundToken); } }); }; Auth09.handleExternalResourceResponse = function (resource) { return new Promise(function (resolve, reject) { resource.isResponseHandled = true; if (resource.status === HTTPStatusCode.OK) { resolve(resource); } else if (resource.status === HTTPStatusCode.MOVED_TEMPORARILY) { resolve(resource); Auth09.publish(IIIFEvents_1.IIIFEvents.RESOURCE_DEGRADED, [resource]); } else { if (resource.error.status === HTTPStatusCode.UNAUTHORIZED || resource.error.status === HTTPStatusCode.INTERNAL_SERVER_ERROR) { // if the browser doesn't support CORS // if (!Modernizr.cors) { // const informationArgs: InformationArgs = new InformationArgs(InformationType.AUTH_CORS_ERROR, null); // Auth09.publish(BaseEvents.SHOW_INFORMATION, [informationArgs]); // resolve(resource); // } else { // commented above because only supporting IE11 upwards which has CORS reject(resource.error.statusText); //} } else if (resource.error.status === HTTPStatusCode.FORBIDDEN) { var error = new Error(); error.message = "Forbidden"; error.name = manifesto_js_1.StatusCode.FORBIDDEN.toString(); reject(error); } else { reject(resource.error.statusText); } } }); }; Auth09.handleDegraded = function (resource) { var informationArgs = new InformationArgs_1.InformationArgs(InformationType_1.InformationType.DEGRADED_RESOURCE, resource); Auth09.publish(IIIFEvents_1.IIIFEvents.SHOW_INFORMATION, [informationArgs]); }; return Auth09; }()); exports.Auth09 = Auth09; //# sourceMappingURL=Auth09.js.map