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