UNPKG

openstack-uicore-foundation

Version:

ui reactjs components for openstack marketing site

2 lines 13.9 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.r(t),o.d(t,{CLEAR_SESSION_STATE:()=>f,LOGOUT_USER:()=>p,RECEIVE_USER_INFO:()=>R,REQUEST_USER_INFO:()=>S,SESSION_STATE_STATUS_CHANGED:()=>w,SESSION_STATE_STATUS_ERROR:()=>O,SESSION_STATE_STATUS_UNCHANGED:()=>g,SET_LOGGED_USER:()=>_,UPDATE_SESSION_STATE_STATUS:()=>E,UPDATE_USER_INFO:()=>y,doLogout:()=>h,getUserInfo:()=>A,onUserAuth:()=>T,updateSessionStateStatus:()=>m,updateUserInfo:()=>U});var n=o(1116),r=o.n(n),s=o(6842),i=o.n(s),a=o(9087),l=o(9558),c=o(2183);function u(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function d(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?u(Object(o),!0).forEach((function(t){r()(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):u(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}const _="SET_LOGGED_USER",p="LOGOUT_USER",S="REQUEST_USER_INFO",R="RECEIVE_USER_INFO",f="CLEAR_SESSION_STATE",E="UPDATE_SESSION_STATE_STATUS",g="unchanged",w="changed",O="error",y="UPDATE_USER_INFO",T=(e,t,o,n=0,r=null)=>s=>{(0,c.storeAuthInfo)(e,n,r,t),s({type:_,payload:{sessionState:o}})},h=e=>(t,o)=>{t({type:p,payload:{backUrl:e}})},A=(e="groups",t="",o=null,n=null,r=null)=>async(s,u)=>{let d=(0,l.getAllowedUserGroups)();d=""!==d?d.split(" "):[];let{loggedUserState:_}=u(),{member:p}=_,f=await(0,c.getAccessToken)();if(null!=p)return null!=n&&null!=o&&n.push(o),Promise.resolve();null==r&&(r=a.authErrorHandler),s((0,a.startLoading)());let E={access_token:f,expand:e};return t&&(E.fields=t),(0,a.getRequest)((0,a.createAction)(S),(0,a.createAction)(R),(0,l.buildAPIBaseUrl)("/api/v1/members/me"),r)(E)(s,u).then((()=>{s((0,a.stopLoading)());let{member:e}=u().loggedUserState;if(null==e){let e={title:"ERROR",html:i().translate("errors.user_not_set"),type:"error"};s((0,a.showMessage)(e,c.initLogOut))}if(d.length>0){if(0===e.groups.filter(((e,t)=>d.includes(e.code))).length){let e={title:"ERROR",html:i().translate("errors.user_not_authz"),type:"error"};return void s((0,a.showMessage)(e,c.initLogOut))}}null!=n&&null!=o&&n.push(o)}))},U=e=>(t,o)=>{let{loggedUserState:n}=o(),{member:r}=n;if(null==r)throw Error("Member is not set.");if(e.id!=r.id)throw Error("Member is not the same.");t({type:y,payload:d({},e)})},m=e=>(t,o)=>{t({type:E,payload:{sessionStateStatus:e}})}},3195:(e,t,o)=>{o.d(t,{AUTH_ERROR_ACCESS_TOKEN_EXPIRED:()=>s,AUTH_ERROR_LOCK_ACQUIRE_ERROR:()=>i,AUTH_ERROR_MISSING_AUTH_INFO:()=>n,AUTH_ERROR_MISSING_REFRESH_TOKEN:()=>r,AUTH_ERROR_REFRESH_TOKEN_REQUEST_ERROR:()=>a});const n="AUTH_ERROR_MISSING_AUTH_INFO",r="AUTH_ERROR_MISSING_REFRESH_TOKEN",s="AUTH_ERROR_ACCESS_TOKEN_EXPIRED",i="AUTH_ERROR_LOCK_ACQUIRE_ERROR",a="AUTH_ERROR_REFRESH_TOKEN_REQUEST_ERROR"},2183:(e,t,o)=>{o.d(t,{doLogin:()=>O,getAccessToken:()=>h,initLogOut:()=>P,storeAuthInfo:()=>U});var n=o(9558),r=o(5812),s=o.n(r);o(806);const i=require("browser-tabs-lock");var a=o.n(i);const l=require("js-cookie");var c=o.n(l),u=o(8041),d=o.n(u),_=(o(9891),o(5097),o(8853)),p=o(3195);const Lock=new(a()),GET_TOKEN_SILENTLY_LOCK_KEY="openstackuicore.lock.getTokenSilently",S="code",R="authInfo",f="nonce",E="pkce",g="idToken",w=e=>{let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o="";for(let n=0;n<e;n++)o+=t.charAt(Math.floor(62*Math.random()));return o},O=(e=null,t=null,o=null,r=null,s=null,i=null)=>{let a=((e=null,t=null,o=null,r=null,s=null,i=null,a=null)=>{let l=I(),c=(0,n.getAuthCallback)(),u=v(),_=C(),p=N();null!=e&&(c+=`?BackUrl=${encodeURI(e)}`);let R=w(16);(0,n.putOnLocalStorage)(f,R);let g=d()(`${u}/oauth2/auth`),O={response_type:encodeURI(p),scope:encodeURI(_),nonce:R,response_mode:"fragment",client_id:encodeURI(l),redirect_uri:encodeURI(c)};if(p===S){const e=y();(0,n.putOnLocalStorage)(E,JSON.stringify(e)),O.code_challenge=e.codeChallenge,O.code_challenge_method="S256",O.approval_prompt="force"}return t&&(O.prompt=t),_&&_.includes("offline_access")&&(O.prompt="consent"),o&&(O.id_token_hint=o),r&&(O.provider=r),i&&(O.otp_login_hint=i),s&&(O.login_hint=encodeURI(s)),a&&(O.tenant=a),g=g.query(O),g})(e,o,null,t,r,s,i);(0,n.getCurrentLocation)().replace(a.toString())},y=()=>{const e=(0,n.base64URLEncode)((0,_.dz)(64));return{codeVerifier:e,codeChallenge:(0,_.gl)(e,"Base64url"),createdAt:new Date}},T=async()=>{console.log("openstack-uicore-foundation::Security::methods::_getAccessToken");let e=m();if(!e)throw console.log("openstack-uicore-foundation::Security::methods::_getAccessToken AUTH_ERROR_MISSING_AUTH_INFO"),Error(p.AUTH_ERROR_MISSING_AUTH_INFO);let{accessToken:t,expiresIn:o,accessTokenUpdatedAt:n,refreshToken:r}=e,i=N();const a=s()().unix();let l=a-n;return o-=60,console.log(`openstack-uicore-foundation::Security::methods::_getAccessToken now ${a} accessTokenUpdatedAt ${n} expiresIn ${o} timeElapsedSecs ${l}`),(l>=o||null==t)&&(console.log("openstack-uicore-foundation::Security::methods::_getAccessToken access token expired, refreshing it ..."),t=await(async(e,t)=>{if(e===S&&L()){if(!t)throw k(),Error(p.AUTH_ERROR_MISSING_REFRESH_TOKEN);let e=await A(t),{access_token:o,expires_in:n,refresh_token:r,id_token:s}=e;return void 0===r&&(r=null),U(o,n,r,s),o}throw k(),Error(p.AUTH_ERROR_ACCESS_TOKEN_EXPIRED)})(i,r)),t},h=async()=>{var e;if(null!==(e=navigator)&&void 0!==e&&e.locks)return await navigator.locks.request(GET_TOKEN_SILENTLY_LOCK_KEY,(async e=>(console.log("openstack-uicore-foundation::Security::methods::getAccessToken web lock api",e),await T())));if(!await(0,n.retryPromise)((()=>Lock.acquireLock(GET_TOKEN_SILENTLY_LOCK_KEY,6e3)),10))throw Error(p.AUTH_ERROR_LOCK_ACQUIRE_ERROR);try{return await T()}finally{await Lock.releaseLock(GET_TOKEN_SILENTLY_LOCK_KEY)}},A=async e=>{let t=v(),o=I();const r={grant_type:"refresh_token",client_id:encodeURI(o),refresh_token:e};try{const e=await fetch(`${t}/oauth2/token`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(r)}).then((e=>{if(400===e.status){(0,n.getCurrentPathName)();throw(0,n.setSessionClearingState)(!0),Error(`${p.AUTH_ERROR_REFRESH_TOKEN_REQUEST_ERROR}: ${e.status} - ${e.statusText}`)}return e})).catch((function(e){throw Error(`${p.AUTH_ERROR_REFRESH_TOKEN_REQUEST_ERROR}: ${e.message}`)})),o=await e.json();let{access_token:s,refresh_token:i,expires_in:a,id_token:l}=o;return{access_token:s,refresh_token:i,expires_in:a,id_token:l}}catch(e){throw console.log(e),e}},U=(e,t,o=null,r=null)=>{let s=m(),i={accessToken:e,expiresIn:t,accessTokenUpdatedAt:Math.floor(Date.now()/1e3)};null==o&&s&&(o=s.refreshToken),null==r&&s&&(r=s.idToken),o&&(i.refreshToken=o),r?(i[g]=r,c().set(g,r,{secure:!0,sameSite:"Lax"})):c().remove(g),(0,n.putOnLocalStorage)(R,JSON.stringify(i))},m=()=>{try{let e=(0,n.getFromLocalStorage)(R,!1);return e?JSON.parse(e):null}catch(e){return null}},k=()=>{"undefined"!=typeof window&&((0,n.removeFromLocalStorage)(R),c().remove(g))},b=()=>{if("undefined"!=typeof window){const e=m();return e?e.idToken:null}return null},I=()=>"undefined"!=typeof window?window.OAUTH2_CLIENT_ID:null,N=()=>"undefined"!=typeof window&&window.OAUTH2_FLOW||"token id_token",L=()=>"undefined"==typeof window||new Boolean(window.OAUTH2_USE_REFRESH_TOKEN||!0),v=()=>"undefined"!=typeof window?window.IDP_BASE_URL:null,C=()=>"undefined"!=typeof window?window.SCOPES:null,P=()=>{(0,n.getCurrentLocation)().replace(((e=null)=>{let t=v(),o=I(),r=d()(`${t}/oauth2/end-session`),s=w(16),i=`${(0,n.getOrigin)()}/auth/logout`;(0,n.putOnLocalStorage)("post_logout_state",s);const a={post_logout_redirect_uri:encodeURI(i),client_id:encodeURI(o),state:s};return e&&(a.id_token_hint=e),r.query(a)})(b()).toString())}},9087:(e,t,o)=>{o.d(t,{authErrorHandler:()=>b,createAction:()=>g,getRequest:()=>I,showMessage:()=>P,startLoading:()=>w,stopLoading:()=>O});var n=o(2462),r=o.n(n),s=o(806),i=o.n(s),a=o(8041),l=o.n(a),c=o(9236),u=o.n(c),d=o(6842),_=o.n(d),p=o(9558),S=o(5097),R=o(2183);const f=["access_token"];l().escapeQuerySpace=!1;let E=i();const g=e=>t=>({type:e,payload:t}),w=(g("RESET_LOADING"),g("START_LOADING")),O=g("STOP_LOADING"),y={},T={},h=e=>0===Object.keys(e).length&&e.constructor===Object,A=(e,t,o,n)=>({httpCode:e,title:t,html:o,type:n}),U=(e,t,o)=>A(e,t,o,"error"),m=(e,t,o)=>A(e,t,o,"warning"),k=()=>e=>{const t=(0,p.getCurrentPathName)(),o=(0,p.isClearingSessionState)();e({type:S.CLEAR_SESSION_STATE,payload:{}}),o||((0,p.setSessionClearingState)(!0),console.log("authErrorHandler 401 - re login"),(0,R.doLogin)(t))},b=(e,t,o=P)=>t=>{var n,r;const s=e.status;let i,a,l="";switch(t(O()),s){case 401:o!==P?(i=U(s,"ERROR",_().translate("errors.user_not_auth")),a=()=>t(k())):t(k());break;case 403:i=U(s,"ERROR",_().translate("errors.user_not_authz")),a=R.initLogOut;break;case 404:l=(null===(n=e.response.body)||void 0===n?void 0:n.message)||(null===(r=e.response.error)||void 0===r?void 0:r.message)||e.message,i=m(s,"Not Found",l);break;case 412:for(const[t,o]of Object.entries(e.response.body.errors))l+=isNaN(t)?`${t}: `:"",l+=`${o}<br>`;t({type:"VALIDATE",payload:{errors:e.response.body.errors}}),i=m(s,"Validation error",l);break;default:i=U(s,"ERROR",_().translate("errors.server_error"))}i&&t(o(i,a))},I=(e,t,o,n=N,s={},i=!1)=>(a={})=>(c,u)=>{let d=l()(o),_=d.toString();if(!h(a)){const{access_token:e}=a,t=r()(a,f);_=d.query(t).toString(),d=d.query(a)}return e&&"function"==typeof e&&c(e(s)),(e=>{y[e]&&(y[e].abort(),console.log(`aborted request ${e}`),delete y[e])})(_),new Promise(((e,o)=>{let r=E.get(d.toString());if(i&&T.hasOwnProperty(_)){const{etag:e}=T[_];e&&r.set("If-None-Match",e)}r.timeout({response:6e4,deadline:6e4}).end(C(c,u,t,n,e,o,_,i)),((e,t)=>{y[e]=t})(_,r)}))},N=(e,t)=>e=>{let o=t.body,n="";o instanceof Object&&o.hasOwnProperty("message")&&(n=o.message),u().fire(t.statusText,n,"error")},L=e=>e.toLowerCase(),v=(e,t={})=>{const o=(e=>Object.keys(e))(t).find((e=>t=>L(t)===e)(e));return o?t[o]:void 0},C=(e,t,o,n,r,s,i=null,a=!1)=>(l,c)=>{if(l||!c.ok){if(304===l.status&&T.hasOwnProperty(i)&&a){const{body:t}=T[i];return"function"==typeof o?(e(o({response:t})),r({response:t})):(e(o),r({response:t}))}return n&&n(l,c)(e,t),s({err:l,res:c,dispatch:e,state:t})}let u=c.body;if(a){const e=v("etag",c.headers);e&&(T[i]={etag:e,body:u})}return"function"==typeof o?(e(o({response:u})),r({response:u})):(e(o),r({response:u}))},P=(e,t=null)=>o=>{o(O()),u().fire(e).then((e=>{e.value&&"function"==typeof t&&t()}))}},8853:(e,t,o)=>{o.d(t,{dz:()=>_,gl:()=>p});require("spark-md5");const n=require("crypto-js/sha256");var r=o.n(n);const s=require("crypto-js/enc-base64url");var i=o.n(s);const l=require("crypto-js/enc-hex");var c=o.n(l);const u=65536,d="undefined"!=typeof window?window.crypto||window.msCrypto:null,_=e=>{if(e>4294967295)throw new RangeError("requested too many random bytes");const t=Buffer.allocUnsafe(e);if(!d)return a;if(e>0)if(e>u)for(let o=0;o<e;o+=u)d.getRandomValues(t.slice(o,o+u));else d.getRandomValues(t);return t},p=(e,t="hex")=>{let o=c();return"Base64url"===t&&(o=i()),r()(e).toString(o)}},9558:(e,t,o)=>{o.d(t,{base64URLEncode:()=>S,buildAPIBaseUrl:()=>l,getAllowedUserGroups:()=>a,getAuthCallback:()=>n,getCurrentLocation:()=>r,getCurrentPathName:()=>i,getFromLocalStorage:()=>u,getOrigin:()=>s,isClearingSessionState:()=>_,putOnLocalStorage:()=>c,removeFromLocalStorage:()=>d,retryPromise:()=>R,setSessionClearingState:()=>p});o(5812),o(8041);const n=()=>"undefined"!=typeof window?`${window.location.origin}/auth/callback`:null,r=()=>{let e="";return"undefined"!=typeof window&&(e=window.location,window.top&&(e=window.top.location)),e},s=()=>"undefined"!=typeof window?window.location.origin:null,i=()=>"undefined"!=typeof window?window.location.pathname:null,a=()=>"undefined"!=typeof window?window.ALLOWED_USER_GROUPS||"":null,l=e=>"undefined"!=typeof window?`${window.API_BASE_URL}${e}`:null``,c=(e,t)=>{"undefined"!=typeof window&&window.localStorage.setItem(e,t)},u=(e,t)=>{if("undefined"!=typeof window){let o=window.localStorage.getItem(e);return t&&(console.log(`getFromLocalStorage removing key ${e}`),d(e)),o}return null},d=e=>{"undefined"!=typeof window&&window.localStorage.removeItem(e)},_=()=>"undefined"!=typeof window&&window.clearing_session_state,p=e=>{"undefined"!=typeof window&&(window.clearing_session_state=e)},S=e=>e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,""),R=async(e,t=3)=>{for(let o=0;o<t;o++)if(await e())return!0;return!1}},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(n){var r=t[n];if(void 0!==r)return r.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,o),s.exports}return(()=>{o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t}})(),(()=>{o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}})(),(()=>{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})}})(),o(5097)})())); //# sourceMappingURL=actions.js.map