From 73e265d8fd050ae3daa67472b4465a5c49d68910 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 20 Apr 2019 15:18:33 +0300 Subject: Include to Wekan packages directory contents, so that meteor command would build all directly. This also simplifies build scripts. Thanks to xet7 ! --- packages/wekan-accounts-cas/cas_client.js | 112 ++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 packages/wekan-accounts-cas/cas_client.js (limited to 'packages/wekan-accounts-cas/cas_client.js') diff --git a/packages/wekan-accounts-cas/cas_client.js b/packages/wekan-accounts-cas/cas_client.js new file mode 100644 index 00000000..bd94be6b --- /dev/null +++ b/packages/wekan-accounts-cas/cas_client.js @@ -0,0 +1,112 @@ + +function addParameterToURL(url, param){ + var urlSplit = url.split('?'); + return url+(urlSplit.length>0 ? '?':'&') + param; +} + +Meteor.initCas = function(callback) { + const casTokenMatch = window.location.href.match(/[?&]casToken=([^&]+)/); + if (casTokenMatch == null) { + return; + } + + window.history.pushState('', document.title, window.location.href.replace(/([&?])casToken=[^&]+[&]?/, '$1').replace(/[?&]+$/g, '')); + + Accounts.callLoginMethod({ + methodArguments: [{ cas: { credentialToken: casTokenMatch[1] } }], + userCallback: function(err){ + if (err == null) { + // should we do anything on success? + } + if (callback != null) { + callback(err); + } + } + }); +} + +Meteor.loginWithCas = function(options, callback) { + + var credentialToken = Random.id(); + + if (!Meteor.settings.public && + !Meteor.settings.public.cas && + !Meteor.settings.public.cas.loginUrl) { + return; + } + + var settings = Meteor.settings.public.cas; + + var backURL = window.location.href.replace('#', ''); + if (options != null && options.redirectUrl != null) + backURL = options.redirectUrl; + + var serviceURL = addParameterToURL(backURL, 'casToken='+credentialToken); + + var loginUrl = settings.loginUrl + + "?" + (settings.serviceParam || "service") + "=" + + encodeURIComponent(serviceURL) + + if (settings.popup == false) { + window.location = loginUrl; + return; + } + + var popup = openCenteredPopup( + loginUrl, + settings.width || 800, + settings.height || 600 + ); + + var checkPopupOpen = setInterval(function() { + try { + if(popup && popup.document && popup.document.getElementById('popupCanBeClosed')) { + popup.close(); + } + // Fix for #328 - added a second test criteria (popup.closed === undefined) + // to humour this Android quirk: + // http://code.google.com/p/android/issues/detail?id=21061 + var popupClosed = popup.closed || popup.closed === undefined; + } catch (e) { + // For some unknown reason, IE9 (and others?) sometimes (when + // the popup closes too quickly?) throws "SCRIPT16386: No such + // interface supported" when trying to read 'popup.closed'. Try + // again in 100ms. + return; + } + + if (popupClosed) { + clearInterval(checkPopupOpen); + + // check auth on server. + Accounts.callLoginMethod({ + methodArguments: [{ cas: { credentialToken: credentialToken } }], + userCallback: callback + }); + } + }, 100); +}; + +var openCenteredPopup = function(url, width, height) { + var screenX = typeof window.screenX !== 'undefined' + ? window.screenX : window.screenLeft; + var screenY = typeof window.screenY !== 'undefined' + ? window.screenY : window.screenTop; + var outerWidth = typeof window.outerWidth !== 'undefined' + ? window.outerWidth : document.body.clientWidth; + var outerHeight = typeof window.outerHeight !== 'undefined' + ? window.outerHeight : (document.body.clientHeight - 22); + // XXX what is the 22? + + // Use `outerWidth - width` and `outerHeight - height` for help in + // positioning the popup centered relative to the current window + var left = screenX + (outerWidth - width) / 2; + var top = screenY + (outerHeight - height) / 2; + var features = ('width=' + width + ',height=' + height + + ',left=' + left + ',top=' + top + ',scrollbars=yes'); + + var newwindow = window.open(url, '_blank', features); + if (newwindow.focus) + newwindow.focus(); + return newwindow; +}; -- cgit v1.2.3-1-g7c22