forked from Esri/arcgis-js-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
OAuthSignInHandler.js
25 lines (24 loc) · 5.31 KB
/
OAuthSignInHandler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// COPYRIGHT © 201 Esri
//
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
//
// This material is licensed for use under the Esri Master License
// Agreement (MLA), and is bound by the terms of that agreement.
// You may redistribute and use this code without modification,
// provided you adhere to the terms of the MLA and include this
// copyright notice.
//
// See use restrictions at https://www.esri.com/legal/pdfs/mla_e204_e300/english
//
// For additional information, contact:
// Environmental Systems Research Institute, Inc.
// Attn: Contracts and Legal Services Department
// 380 New York Street
// Redlands, California, USA 92373
// USA
//
// email: [email protected]
//
// See https://js.arcgis.com/3.33/esri/copyright.txt for details.
define(["./Credential","./domUtils","./lang","./urlUtils","dijit/Dialog","dijit/registry","dojo/_base/config","dojo/_base/Deferred","dojo/_base/kernel","dojo/dom-attr","dojo/i18n!./nls/jsapi","dojo/io-query","dojo/sniff","dojo/json","dijit/form/Button","dojo/query"],(function(e,t,r,o,i,n,s,a,d,l,u,c,h,p){return{_oAuthDfd:null,_oAuthIntervalId:0,_oAuthDialogContent:"<div class='dijitDialogPaneContentArea'><div style='padding-bottom: 5px; word-wrap: break-word;'>${oAuthInfo}</div><div style='margin: 0px; padding: 0px; height: 10px;'></div><div class='esriErrorMsg' style='display: none; color: white; background-color: #D46464; text-align: center; padding-top: 3px; padding-bottom: 3px;'>${invalidUser}</div><div style='margin: 0px; padding: 0px; height: 10px;'></div><div class='dijitDialogPaneActionBar'><button data-dojo-type='dijit.form.Button' data-dojo-props='type:\"button\", \"class\":\"esriIdSubmit\"'>${lblOk}</button><button data-dojo-type='dijit.form.Button' data-dojo-props='type:\"button\", \"class\":\"esriIdCancel\"'>${lblCancel}</button></div>",setOAuthRedirectionHandler:function(e){this._oAuthRedirectFunc=e},oAuthSignIn:function(e,r,o,i){var n=this._oAuthDfd=new a;n.resUrl_=e,n.sinfo_=r,n.oinfo_=o;var s=!i||!1!==i.oAuthPopupConfirmation;if(!o.popup||!s)return this._doOAuthSignIn(e,r,o),n;this._nls||(this._nls=u.identity),this.oAuthDialog||(this.oAuthDialog=this._createOAuthDialog());var d=this.oAuthDialog,c=i&&i.error,h=i&&i.token;return t.hide(d.errMsg_),c&&403==c.code&&h&&(l.set(d.errMsg_,"innerHTML",this._nls.forbidden),t.show(d.errMsg_)),l.set(d.serverLink_,{title:r.server,innerHTML:-1!==r.server.toLowerCase().indexOf("arcgis.com")?"ArcGIS Online":r.server}),d.show(),n},setOAuthResponseHash:function(t){var r=this._oAuthDfd;if(this._oAuthDfd=null,r&&t){clearInterval(this._oAuthIntervalId),"#"===t.charAt(0)&&(t=t.substring(1));var o=c.queryToObject(t);if(o.error){var i=new Error("access_denied"===o.error?"ABORTED":"OAuth: "+o.error+" - "+o.error_description);i.code="IdentityManagerBase.2",i.log=!!s.isDebug,r.errback(i)}else{var n=r.sinfo_,a=r.oinfo_._oAuthCred,d=new e({userId:o.username,server:n.server,token:o.access_token,expires:(new Date).getTime()+1e3*Number(o.expires_in),ssl:"true"===o.ssl,_oAuthCred:a});a.storage=o.persist?window.localStorage:window.sessionStorage,a.token=d.token,a.expires=d.expires,a.userId=d.userId,a.ssl=d.ssl,a.save(),r.callback(d)}}},_createOAuthDialog:function(){var e=this._nls,o=r.substitute(e,this._oAuthDialogContent);o=r.substitute({server:"<span class='serverLink' style='word-wrap: break-word;'></span>"},o);var a=new i({title:e.title,content:o,class:"esriOAuthSignInDialog",style:"min-width: 18em;",esriIdMgr_:this,execute_:function(){var e=a.esriIdMgr_._oAuthDfd;a.hide_(),a.esriIdMgr_._doOAuthSignIn(e.resUrl_,e.sinfo_,e.oinfo_)},cancel_:function(){var e=a.esriIdMgr_._oAuthDfd;a.esriIdMgr_._oAuthDfd=null,a.hide_();var t=new Error("ABORTED");t.code="IdentityManager.2",t.log=!!s.isDebug,e.errback(t)},hide_:function(){t.hide(a.errMsg_),a.hide(),i._DialogLevelManager.hide(a)}}),l=a.domNode;return a.btnSubmit_=n.byNode(d.query(".esriIdSubmit",l)[0]),a.btnCancel_=n.byNode(d.query(".esriIdCancel",l)[0]),a.serverLink_=d.query(".serverLink",l)[0],a.errMsg_=d.query(".esriErrorMsg",l)[0],a.connect(a.btnSubmit_,"onClick",a.execute_),a.connect(a.btnCancel_,"onClick",a.onCancel),a.connect(a,"onCancel",a.cancel_),a},_doOAuthSignIn:function(e,t,r){var i=this,n={portalUrl:r.portalUrl};!r.popup&&r.preserveUrlHash&&window.location.hash&&(n.hash=window.location.hash);var a={client_id:r.appId,response_type:"token",state:p.stringify(n),expiration:r.expiration,locale:r.locale,redirect_uri:r.popup?o.getAbsoluteUrl(r.popupCallbackUrl):window.location.href.replace(/#.*$/,"")};r.forceLogin&&(a.force_login=!0);var d,l=r.portalUrl.replace(/^http:/i,"https:")+"/sharing/oauth2/authorize",u=l+"?"+c.objectToQuery(a);if(r.popup)if(7===h("ie")?(d=window.open(r.popupCallbackUrl,"esriJSAPIOAuth",r.popupWindowFeatures)).location=u:d=window.open(u,"esriJSAPIOAuth",r.popupWindowFeatures),d)d.focus(),this._oAuthDfd.oAuthWin_=d,this._oAuthIntervalId=setInterval((function(){if(d.closed){clearInterval(i._oAuthIntervalId);var e=i._oAuthDfd;if(e){var t=new Error("ABORTED");t.code="IdentityManager.2",t.log=!!s.isDebug,e.errback(t)}}}),500);else{var _=new Error("ABORTED");_.code="IdentityManager.2",_.log=!!s.isDebug,this._oAuthDfd.errback(_)}else this._rejectOnPersistedPageShow=!0,this._oAuthRedirectFunc?this._oAuthRedirectFunc({authorizeParams:a,authorizeUrl:l,resourceUrl:e,serverInfo:t,oAuthInfo:r}):window.location=u}}}));