UNPKG

openstack-uicore-foundation

Version:

ui reactjs components for openstack marketing site

2 lines 10.1 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(()=>(()=>{"use strict";var e={5097:(e,t,o)=>{o(1116),o(6842),o(9087),o(9558),o(2183)},3195:(e,t,o)=>{o.d(t,{AUTH_ERROR_MISSING_NONCE_PARAM:()=>n,AUTH_ERROR_MISSING_PKCE_PARAM:()=>r});const r="AUTH_ERROR_MISSING_PKCE_PARAM",n="AUTH_ERROR_MISSING_NONCE_PARAM"},2183:(e,t,o)=>{o.d(t,{RESPONSE_TYPE_CODE:()=>_,RESPONSE_TYPE_IMPLICIT:()=>p,doLogin:()=>g,emitAccessToken:()=>y,getOAuth2Flow:()=>O,validateIdToken:()=>R});var r=o(9558);o(5812),o(806);const n=require("browser-tabs-lock");var i=o.n(n);require("js-cookie");var s=o(8041),a=o.n(s),l=o(9891),c=o.n(l),d=(o(5097),o(8853)),u=o(3195);new(i());const p="token id_token",_="code",f="nonce",w="pkce",h=e=>{let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o="";for(let r=0;r<e;r++)o+=t.charAt(Math.floor(62*Math.random()));return o},g=(e=null,t=null,o=null,n=null,i=null,s=null)=>{let l=((e=null,t=null,o=null,n=null,i=null,s=null,l=null)=>{let c=S(),d=(0,r.getAuthCallback)(),u=m(),p=b(),g=O();null!=e&&(d+=`?BackUrl=${encodeURI(e)}`);let y=h(16);(0,r.putOnLocalStorage)(f,y);let R=a()(`${u}/oauth2/auth`),v={response_type:encodeURI(g),scope:encodeURI(p),nonce:y,response_mode:"fragment",client_id:encodeURI(c),redirect_uri:encodeURI(d)};if(g===_){const e=k();(0,r.putOnLocalStorage)(w,JSON.stringify(e)),v.code_challenge=e.codeChallenge,v.code_challenge_method="S256",v.approval_prompt="force"}return t&&(v.prompt=t),p&&p.includes("offline_access")&&(v.prompt="consent"),o&&(v.id_token_hint=o),n&&(v.provider=n),s&&(v.otp_login_hint=s),i&&(v.login_hint=encodeURI(i)),l&&(v.tenant=l),R=R.query(v),R})(e,o,null,t,n,i,s);(0,r.getCurrentLocation)().replace(l.toString())},k=()=>{const e=(0,r.base64URLEncode)((0,d.dz)(64));return{codeVerifier:e,codeChallenge:(0,d.gl)(e,"Base64url"),createdAt:new Date}},y=async(e,t=null)=>{let o=m(),n=S(),i=(0,r.getAuthCallback)(),s=JSON.parse((0,r.getFromLocalStorage)(w,!0));if(!s)throw Error(u.AUTH_ERROR_MISSING_PKCE_PARAM);null!=t&&(i+=`?BackUrl=${encodeURI(t)}`);const a={code:e,grant_type:"authorization_code",code_verifier:s.codeVerifier,client_id:encodeURI(n),redirect_uri:encodeURI(i)};try{const e=await fetch(`${o}/oauth2/token`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(a)}).catch((function(e){console.log("Request failed:",e.message)})),t=await e.json();let{access_token:r,refresh_token:n,id_token:i,expires_in:s,error:l,error_description:c}=t;return{access_token:r,refresh_token:n,id_token:i,expires_in:s,error:l,error_description:c}}catch(e){console.log(e)}},S=()=>"undefined"!=typeof window?window.OAUTH2_CLIENT_ID:null,O=()=>"undefined"!=typeof window&&window.OAUTH2_FLOW||"token id_token",m=()=>"undefined"!=typeof window?window.IDP_BASE_URL:null,b=()=>"undefined"!=typeof window?window.SCOPES:null,R=(e,t,o)=>{let n=new(c())({issuer:t,audience:o}),i=(0,r.getFromLocalStorage)(f,!0);if(!i)throw Error(u.AUTH_ERROR_MISSING_NONCE_PARAM);let s=n.decode(e),a=(s.header.alg,s.header.kid,s.payload.aud),l=s.payload.iss;s.payload.exp,s.payload.nbf;return(s.payload.nonce||null)==i&&a==o&&l==t}},9087:(e,t,o)=>{o(2462),o(806);var r=o(8041),n=o.n(r);o(9236),o(6842),o(9558),o(5097),o(2183);n().escapeQuerySpace=!1;const i=e=>t=>({type:e,payload:t});i("RESET_LOADING"),i("START_LOADING"),i("STOP_LOADING")},8853:(e,t,o)=>{o.d(t,{dz:()=>p,gl:()=>_});require("spark-md5");const r=require("crypto-js/sha256");var n=o.n(r);const i=require("crypto-js/enc-base64url");var s=o.n(i);const l=require("crypto-js/enc-hex");var c=o.n(l);const d=65536,u="undefined"!=typeof window?window.crypto||window.msCrypto:null,p=e=>{if(e>4294967295)throw new RangeError("requested too many random bytes");const t=Buffer.allocUnsafe(e);if(!u)return a;if(e>0)if(e>d)for(let o=0;o<e;o+=d)u.getRandomValues(t.slice(o,o+d));else u.getRandomValues(t);return t},_=(e,t="hex")=>{let o=c();return"Base64url"===t&&(o=s()),n()(e).toString(o)}},9558:(e,t,o)=>{o.d(t,{base64URLEncode:()=>d,getAuthCallback:()=>r,getCurrentHref:()=>s,getCurrentLocation:()=>n,getCurrentPathName:()=>i,getFromLocalStorage:()=>l,putOnLocalStorage:()=>a});o(5812),o(8041);const r=()=>"undefined"!=typeof window?`${window.location.origin}/auth/callback`:null,n=()=>{let e="";return"undefined"!=typeof window&&(e=window.location,window.top&&(e=window.top.location)),e},i=()=>"undefined"!=typeof window?window.location.pathname:null,s=()=>"undefined"!=typeof window?window.location.href:null,a=(e,t)=>{"undefined"!=typeof window&&window.localStorage.setItem(e,t)},l=(e,t)=>{if("undefined"!=typeof window){let o=window.localStorage.getItem(e);return t&&(console.log(`getFromLocalStorage removing key ${e}`),c(e)),o}return null},c=e=>{"undefined"!=typeof window&&window.localStorage.removeItem(e)},d=e=>e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")},1116:e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},2462:e=>{e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},6842:e=>{e.exports=require("i18n-react/dist/i18n-react")},9891:e=>{e.exports=require("idtoken-verifier")},5812:e=>{e.exports=require("moment-timezone")},806:e=>{e.exports=require("superagent/lib/client")},9236:e=>{e.exports=require("sweetalert2")},8041:e=>{e.exports=require("urijs")}},t={};function o(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,o),i.exports}(()=>{o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t}})(),(()=>{o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}})(),(()=>{o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})();var r={};o.r(r),o.d(r,{default:()=>h});var n=o(1116),i=o.n(n);const s=require("react");var l=o.n(s),c=o(8041),d=o.n(c),u=o(2183),p=o(9558);function _(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function f(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?_(Object(o),!0).forEach((function(t){i()(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):_(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}class w extends l().Component{constructor(e,t,o){super(o),this.state={id_token_is_valid:!0,error:null,error_description:null,issuer:e,audience:t,accessToken:null,flow:(0,u.getOAuth2Flow)()}}_implicitFlow(){const{access_token:e,id_token:t,session_state:o,error:r,error_description:n,expires_in:i}=this.extractHashParams();if(r)return void this.setState(f(f({},this.state),{},{error:r,error_description:n}));if(!e)return void(0,u.doLogin)((0,p.getCurrentPathName)());const s=!!t&&(0,u.validateIdToken)(t,this.state.issuer,this.state.audience);this.setState(f(f({},this.state),{},{id_token_is_valid:s,error:s?null:"Invalid Token",error_description:s?null:"Invalid Token",accessToken:e})),e&&s&&(this.props.onUserAuth(e,t,o,i),"undefined"!=typeof window&&window.location!==window.parent.location&&(console.log("AbstractAuthorizationCallbackRoute::_implicitFlow running inside iframe, sending auth state to parent"),window.parent.postMessage(JSON.stringify({action:"SET_AUTH_INFO_SILENTLY",access_token:e,id_token:t,session_state:o,expires_in:i}),window.location.origin)))}_codeFlow(){const{code:e,session_state:t,error:o,error_description:r}=this.extractHashParams();if(o)return void this.setState(f(f({},this.state),{},{error:o,error_description:r}));if(!e)return void(0,u.doLogin)((0,p.getCurrentPathName)());let n=d()((0,p.getCurrentHref)()).search(!0),i=n.hasOwnProperty("BackUrl")?n.BackUrl:null;(0,u.emitAccessToken)(e,i).then((e=>{let{id_token:n,access_token:i,refresh_token:s,expires_in:a,error:l,error_description:c}=e;if(l)return void this.setState(f(f({},this.state),{},{error:l,error_description:c}));const d=!!n&&(0,u.validateIdToken)(n,this.state.issuer,this.state.audience);this.setState(f(f({},this.state),{},{id_token_is_valid:d,accessToken:i,error:d?o:"Invalid Token",error_description:d?r:"Invalid Token"})),i&&d&&(this.props.onUserAuth(i,n,t,a,s),"undefined"!=typeof window&&window.location!==window.parent.location&&(console.log("AbstractAuthorizationCallbackRoute::_codeFlow running inside iframe, sending auth state to parent"),window.parent.postMessage(JSON.stringify({action:"SET_AUTH_INFO_SILENTLY",access_token:i,id_token:n,session_state:t,expires_in:a,refresh_token:s}),window.location.origin)))})).catch((e=>{console.log(e),(0,u.doLogin)((0,p.getCurrentPathName)())}))}componentDidMount(){let{flow:e}=this.state;e!==u.RESPONSE_TYPE_IMPLICIT?e===u.RESPONSE_TYPE_CODE&&this._codeFlow():this._implicitFlow()}extractHashParams(){return d().parseQuery(this.props.location.hash.substr(1))}shouldComponentUpdate(e,t,o){return t.accessToken!==this.state.accessToken||(t.error!==this.state.error||t.id_token_is_valid!==this.state.id_token_is_valid)}componentDidUpdate(e,t,o){if(t.accessToken!==this.state.accessToken){let e=d()((0,p.getCurrentHref)()),t=e.search(!0),o=d().parseQuery(e.fragment());delete o.code,delete o.access_token,delete o.expires_in,delete o.token_type,delete o.scope,delete o.id_token,delete o.session_state;let r=t.hasOwnProperty("BackUrl")?t.BackUrl:"/app";o.lenght>0&&(r+=`#${d().buildQuery(o)}`),this._callback(r)}}_callback(e){}_redirect2Error(e){}render(){let{id_token_is_valid:e,error:t,error_description:o}=this.state;return null!=t?this._redirect2Error(`${t} - ${o}.`):e?null:this._redirect2Error("Token Validation Error - Token is invalid.")}}const h=w;return r})())); //# sourceMappingURL=abstract-auth-callback-route.js.map