oidc-client
Version:
OpenID Connect (OIDC) & OAuth2 client library
98 lines (79 loc) • 3.39 kB
JavaScript
// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
import { Log } from './Log.js';
const DefaultPopupFeatures = 'location=no,toolbar=no,zoom=no';
const DefaultPopupTarget = "_blank";
export class CordovaPopupWindow {
constructor(params) {
this._promise = new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
this.features = params.popupWindowFeatures || DefaultPopupFeatures;
this.target = params.popupWindowTarget || DefaultPopupTarget;
this.redirect_uri = params.startUrl;
Log.debug("CordovaPopupWindow.ctor: redirect_uri: " + this.redirect_uri);
}
_isInAppBrowserInstalled(cordovaMetadata) {
return ["cordova-plugin-inappbrowser", "cordova-plugin-inappbrowser.inappbrowser", "org.apache.cordova.inappbrowser"].some(function (name) {
return cordovaMetadata.hasOwnProperty(name)
})
}
navigate(params) {
if (!params || !params.url) {
this._error("No url provided");
} else {
if (!window.cordova) {
return this._error("cordova is undefined")
}
var cordovaMetadata = window.cordova.require("cordova/plugin_list").metadata;
if (this._isInAppBrowserInstalled(cordovaMetadata) === false) {
return this._error("InAppBrowser plugin not found")
}
this._popup = cordova.InAppBrowser.open(params.url, this.target, this.features);
if (this._popup) {
Log.debug("CordovaPopupWindow.navigate: popup successfully created");
this._exitCallbackEvent = this._exitCallback.bind(this);
this._loadStartCallbackEvent = this._loadStartCallback.bind(this);
this._popup.addEventListener("exit", this._exitCallbackEvent, false);
this._popup.addEventListener("loadstart", this._loadStartCallbackEvent, false);
} else {
this._error("Error opening popup window");
}
}
return this.promise;
}
get promise() {
return this._promise;
}
_loadStartCallback(event) {
if (event.url.indexOf(this.redirect_uri) === 0) {
this._success({ url: event.url });
}
}
_exitCallback(message) {
this._error(message);
}
_success(data) {
this._cleanup();
Log.debug("CordovaPopupWindow: Successful response from cordova popup window");
this._resolve(data);
}
_error(message) {
this._cleanup();
Log.error(message);
this._reject(new Error(message));
}
close() {
this._cleanup();
}
_cleanup() {
if (this._popup){
Log.debug("CordovaPopupWindow: cleaning up popup");
this._popup.removeEventListener("exit", this._exitCallbackEvent, false);
this._popup.removeEventListener("loadstart", this._loadStartCallbackEvent, false);
this._popup.close();
}
this._popup = null;
}
}