passbolt-styleguide 5.8.2 → 5.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/css/help.min.css +2 -2
- package/build/css/public.min.css +2 -2
- package/build/css/themes/default/api_authentication.min.css +2 -2
- package/build/css/themes/default/api_cloud.min.css +2 -2
- package/build/css/themes/default/api_main.min.css +2 -2
- package/build/css/themes/default/api_reports.min.css +2 -2
- package/build/css/themes/default/api_webinstaller.min.css +2 -2
- package/build/css/themes/default/ext_app.min.css +2 -2
- package/build/css/themes/default/ext_authentication.min.css +2 -2
- package/build/css/themes/default/ext_external.min.css +2 -2
- package/build/css/themes/default/ext_in_form_cta.min.css +2 -2
- package/build/css/themes/default/ext_in_form_menu.min.css +2 -2
- package/build/css/themes/default/ext_quickaccess.min.css +2 -2
- package/build/css/themes/midgar/api_authentication.min.css +2 -2
- package/build/css/themes/midgar/api_main.min.css +2 -2
- package/build/css/themes/midgar/api_reports.min.css +2 -2
- package/build/css/themes/midgar/ext_app.min.css +2 -2
- package/build/css/themes/midgar/ext_authentication.min.css +2 -2
- package/build/css/themes/midgar/ext_in_form_cta.min.css +2 -2
- package/build/css/themes/midgar/ext_in_form_menu.min.css +2 -2
- package/build/css/themes/midgar/ext_quickaccess.min.css +2 -2
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-setup.js +1 -1
- package/package.json +1 -1
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +1 -1
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +3 -0
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.page.js +7 -0
package/build/css/help.min.css
CHANGED
package/build/css/public.min.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see api-recover.js.LICENSE.txt */
|
|
2
|
-
(()=>{"use strict";var e,t,r,s={7594:(e,t,r)=>{var s=r(6540),n=r(961);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},o.apply(null,arguments)}const a=s.createContext({user:null,users:null,roles:null,rememberMeOptions:{},resources:null,resource:null,shareResources:null,selectedResources:null,selectedUser:null,folders:null,resourceCommentId:null,mustRefreshComments:!1,siteSettings:null,userSettings:null,onCheckIsAuthenticatedRequested:null});function i(e){return class extends s.Component{render(){return s.createElement(a.Consumer,null,t=>s.createElement(e,o({context:t},this.props)))}}}const l=a;var c=r(5556),h=r.n(c);class u extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const d=u;class p extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const m=p;class g extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const f=g,E=["GET","POST","PUT","DELETE"];class b{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.",{cause:e})}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}async buildFetchOptions(){const e=await this.options.getHeaders();return{credentials:"include",headers:{...this.getDefaultHeaders(),...e}}}async get(e,t){this.assertValidId(e);const r=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",r)}async delete(e,t,r,s){let n;this.assertValidId(e),void 0===s&&(s=!1),n=s?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,r||{}):this.buildUrl(`${this.baseUrl}/${e}`,r||{});let o=null;return t&&(o=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",n,o)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return this.fetchAndHandleResponse("GET",t)}async create(e,t){const r=this.buildUrl(this.baseUrl.toString(),t||{}),s=this.buildBody(e);return this.fetchAndHandleResponse("POST",r,s)}async update(e,t,r,s){let n;this.assertValidId(e),void 0===s&&(s=!1),n=s?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,r||{}):this.buildUrl(`${this.baseUrl}/${e}`,r||{});let o=null;return t&&(o=this.buildBody(t)),this.fetchAndHandleResponse("PUT",n,o)}async updateAll(e,t={}){const r=this.buildUrl(this.baseUrl.toString(),t),s=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",r,s)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(E.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if(!(e instanceof FormData)&&"string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string or a FormData.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const r=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,s]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof s)r.searchParams.append(e,s);else{if(!Array.isArray(s))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");s.forEach(t=>{r.searchParams.append(e,t)})}}return r}async sendRequest(e,t,r,s){this.assertUrl(t),this.assertMethod(e),r&&this.assertBody(r);const n="undefined"!=typeof customApiClientFetch?customApiClientFetch:fetch,o={...await this.buildFetchOptions(),...s};o.method=e,r&&(o.body=r);try{return await n(t.toString(),o)}catch(e){throw console.error(e),navigator.onLine?new f("Unable to reach the server, an unexpected error occurred"):new f("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,r,s){const n=await this.sendRequest(e,t,r,s);return this.parseResponseJson(n)}async parseResponseJson(e){let t;try{t=await e.json()}catch(t){throw console.debug(e.url.toString(),t),new m(t,e)}if(!e.ok){const r=t.header.message;throw new d(r,{code:e.status,body:t.body})}return t}}const v="chrome",w="edge",y="firefox";function S(){const e=window.navigator.userAgent.toLowerCase();let t;return t=e.indexOf("firefox")>-1?y:e.indexOf("samsungbrowser")>-1?"samsung":e.indexOf("opera")>-1||e.indexOf("opr")>-1?"opera":e.indexOf("trident")>-1?"internet-explorer":e.indexOf("edg")>-1?w:e.indexOf("chrome")>-1?v:e.indexOf("safari")>-1?"safari":"unknown",t}const x=class{constructor(e){e.setResourceName("auth"),this.apiClient=new b(e)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new d("An unexpected error happened during the legacy logout process",{code:t.status})}};function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},T.apply(null,arguments)}const R=s.createContext({userId:null,token:null,state:null,unexpectedError:null,onInitializeRecoverRequested:()=>{},logoutUserAndRefresh:()=>{}});class C extends s.Component{constructor(e){super(e),this.state=Object.assign(this.defaultState,e.value),this.authLogoutService=new x(e.context.getApiClientOptions())}get defaultState(){return{userId:null,token:null,state:L.INITIAL_STATE,unexpectedError:null,onInitializeRecoverRequested:this.onInitializeRecoverRequested.bind(this),logoutUserAndRefresh:this.logoutUserAndRefresh.bind(this)}}async onInitializeRecoverRequested(){return this.state.userId&&this.state.token?this.isBrowserSupported()?void await this.startRecover().then(this.handleStartRecoverSuccess.bind(this)).catch(this.handleStartRecoverError.bind(this)):this.setState({state:L.DOWNLOAD_SUPPORTED_BROWSER_STATE}):this.setState({state:L.REQUEST_INVITATION_ERROR})}handleStartRecoverSuccess(){this.setState({state:L.INSTALL_EXTENSION_STATE})}handleStartRecoverError(e){if(e instanceof d){if(403===e.data.code)return this.setState({state:L.ERROR_ALREADY_SIGNED_IN_STATE});const t=Boolean(e.data.body?.token?.expired),r=Boolean(e.data.body?.token?.isActive);if(t||r)return this.setState({state:L.TOKEN_EXPIRED_STATE});if(400===e?.data?.code)return this.setState({state:L.REQUEST_INVITATION_ERROR})}return this.setState({state:L.UNEXPECTED_ERROR_STATE})}async logoutUserAndRefresh(){try{await this.authLogoutService.logout()}catch(e){const t=new f(e.message);return this.setState({unexpectedError:t,state:L.UNEXPECTED_ERROR_STATE})}window.location.reload()}isBrowserSupported(){const e=S();return[v,y,w].includes(e)}async startRecover(){const e=this.props.context.getApiClientOptions();e.setResourceName("setup");const t=new b(e);await t.get(`recover/${this.state.userId}/${this.state.token}`)}render(){return s.createElement(R.Provider,{value:this.state},this.props.children)}}C.propTypes={context:h().any,value:h().any,children:h().any};const O=i(C);function k(e){return class extends s.Component{render(){return s.createElement(R.Consumer,null,t=>s.createElement(e,T({apiRecoverContext:t},this.props)))}}}const L={INITIAL_STATE:"Initial state",DOWNLOAD_SUPPORTED_BROWSER_STATE:"Download supported browser state",INSTALL_EXTENSION_STATE:"Install extension state",TOKEN_EXPIRED_STATE:"Token expired state",ERROR_ALREADY_SIGNED_IN_STATE:"Error, already signed in state",REQUEST_INVITATION_ERROR:"Request inviration error state",UNEXPECTED_ERROR_STATE:"Unexpected error state"};var N,I,U=r(2389);function A(){return A=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},A.apply(null,arguments)}const D=function(e){return s.createElement("svg",A({width:18,height:18,fill:"none",className:"svg-icon spinner",viewBox:"0 0 18 18"},e),N||(N=s.createElement("circle",{id:"background",cx:8,cy:8,r:8,fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(1 1)"})),I||(I=s.createElement("circle",{id:"loading",r:8,fill:"none",stroke:"var(--spinner-color)",strokeLinecap:"round",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(9 9)"})))};class P extends s.Component{render(){return s.createElement("div",{className:"login-processing"},s.createElement("h1",null,this.props.title),s.createElement("div",{className:"processing-wrapper"},s.createElement(D,null)))}}P.propTypes={title:h().oneOfType([h().arrayOf(h().node),h().node,h().string])},P.defaultProps={title:s.createElement(U.x6,null,"Please wait...")};const _=(0,U.CI)("common")(P),B="https://chrome.google.com/webstore/detail/passbolt-extension/didegimhafipceonhjepacocaffmoppf";class j extends s.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return{browserName:S(),theme:e}}bindCallbacks(){this.handleRefreshClick=this.handleRefreshClick.bind(this)}get browserStoreThumbnailUrl(){const e="dark"===this.state.theme?"white":"black";switch(this.state.browserName){case y:return`${this.props.context.trustedDomain}/img/third_party/FirefoxAMO_${e}.svg`;case w:return`${this.props.context.trustedDomain}/img/third_party/edge-addon-${e}.svg`;default:return`${this.props.context.trustedDomain}/img/third_party/ChromeWebStore_${e}.svg`}}get storeUrl(){switch(this.state.browserName){case v:return B;case y:return"https://addons.mozilla.org/firefox/addon/passbolt";case w:return"https://microsoftedge.microsoft.com/addons/detail/passbolt-extension/ljeppgjhohmhpbdhjjjbiflabdgfkhpo";default:return B}}get storeClassName(){return`browser-webstore ${this.state.browserName}`}handleRefreshClick(){window.location.reload()}render(){return s.createElement("div",{className:"install-extension"},s.createElement("h1",null,s.createElement(U.x6,null,"Please install the browser extension.")),s.createElement("p",null,s.createElement(U.x6,null,"Please download the browser extension and refresh this page to continue.")),this.state.browserName&&s.createElement("a",{href:this.storeUrl,className:this.storeClassName,target:"_blank",rel:"noopener noreferrer"},s.createElement("img",{src:this.browserStoreThumbnailUrl,alt:"browser store thumbnail"})),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:this.storeUrl,className:"button primary big full-width",role:"button",target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Download extension")),s.createElement("button",{className:"link",type:"button",onClick:this.handleRefreshClick},s.createElement(U.x6,null,"Refresh to detect extension"))))}}j.propTypes={context:h().any};const $=i((0,U.CI)("common")(j));class M extends s.Component{constructor(e){super(e),this.state=this.getDefaultState()}getDefaultState(){return{selectedBrowser:this.compatibleBrowserList[0]}}handleBrowserButtonClick(e){this.setState({selectedBrowser:e})}get compatibleBrowserList(){return[{name:"Mozilla Firefox",img:"firefox.svg",url:"https://www.mozilla.org/"},{name:"Google Chrome",img:"chrome.svg",url:"https://www.google.com/chrome/"},{name:"Microsoft Edge",img:"edge.svg",url:"https://www.microsoft.com/edge"},{name:"Brave",img:"brave.svg",url:"https://www.brave.com/"},{name:"Vivaldi",img:"vivaldi.svg",url:"https://www.vivaldi.com/"}]}render(){return s.createElement("div",{className:"browser-not-supported"},s.createElement("h1",null,s.createElement(U.x6,null,"Sorry, your browser is not supported.")),s.createElement("p",null,s.createElement(U.x6,null,"Please download one of these browsers to get started with passbolt:")),s.createElement("div",{className:"browser-button-list"},this.compatibleBrowserList.map((e,t)=>s.createElement("button",{key:t,className:"browser"+(e.name===this.state.selectedBrowser.name?" focused":""),target:"_blank",onClick:()=>this.handleBrowserButtonClick(e)},s.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.img}`})))),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:this.state.selectedBrowser.url,rel:"noopener noreferrer",className:"button primary big full-width",role:"button",target:"_blank"},s.createElement(U.x6,null,"Download ",{browserName:this.state.selectedBrowser.name}))))}}M.propTypes={context:h().any};const F=i((0,U.CI)("common")(M));class V extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"Access to this service requires an invitation.")),s.createElement("p",null,s.createElement(U.x6,null,"This email is not associated with any approved users on this domain.")," ",s.createElement(U.x6,null,"Please contact your administrator to request an invitation link.")),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Try with another email"))))}}V.propTypes={context:h().any};const q=i((0,U.CI)("common")(V));class z extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"The invitation is expired.")),s.createElement("p",null,s.createElement(U.x6,null,"You can request another invitation email by clicking on the button below.")),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Request invitation"))))}}z.propTypes={context:h().any};const H=i((0,U.CI)("common")(z)),W="setup",K="recover",X="account-recovery";class G extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"Cannot perform the action while being logged in")),s.createElement("p",null,{[W]:s.createElement(U.x6,null,"It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing."),[K]:s.createElement(U.x6,null,"It is not possible to perform the recovery of your account as you are still logged in. You need to log out first before continuing."),[X]:s.createElement(U.x6,null,"It is not possible to recover your private key of your account as you are still logged in. You need to log out first before continuing.")}[this.props.displayAs]),s.createElement("div",{className:"form-actions"},s.createElement("button",{onClick:this.props.onLogoutButtonClick.bind(this),className:"button primary big full-width",role:"button"},s.createElement(U.x6,null,"Sign out"))))}}G.propTypes={displayAs:h().oneOf([W,K,X]).isRequired,onLogoutButtonClick:h().func.isRequired};const J=(0,U.CI)("common")(G);var Y;function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},Q.apply(null,arguments)}const Z=function(e){return s.createElement("svg",Q({xmlns:"http://www.w3.org/2000/svg",width:10,height:8,fill:"none",viewBox:"0 0 10 8"},e),Y||(Y=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m1 2 4 4 4-4"})))};var ee;function te(){return te=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},te.apply(null,arguments)}const re=function(e){return s.createElement("svg",te({xmlns:"http://www.w3.org/2000/svg",width:8,height:10,fill:"none",viewBox:"0 0 8 10"},e),ee||(ee=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m2 9 4-4-4-4"})))};class se extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}onClick(){this.props.context.port?this.props.context.port.request("passbolt.tab.reload"):window.location.reload()}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){const e=this.props?.error;return Boolean(e?.details)||Boolean(e?.data?.body)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,this.props.title),s.createElement("p",null,this.props.message),s.createElement("p",null,this.props.error&&this.props.error.message),this.hasErrorDetails&&s.createElement("div",{className:"accordion error-details"},s.createElement("div",{className:"accordion-header"},s.createElement("button",{className:"no-border",type:"button",onClick:this.handleErrorDetailsToggle},this.state.showErrorDetails?s.createElement(Z,{className:"caret-down"}):s.createElement(re,{className:"caret-right"}),s.createElement("span",null,s.createElement(U.x6,null,"Error details")))),this.state.showErrorDetails&&s.createElement("div",{className:"accordion-content"},s.createElement("div",{className:"input text"},s.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},s.createElement(U.x6,null,"Error details")),s.createElement("textarea",{id:"js_field_debug",defaultValue:`${this.formatErrors()}`,readOnly:!0})))),s.createElement("div",{className:"form-actions"},s.createElement("button",{onClick:this.onClick.bind(this),className:"button primary big full-width",role:"button"},s.createElement(U.x6,null,"Try again"))))}}se.defaultProps={title:s.createElement(U.x6,null,"Something went wrong!"),message:s.createElement(U.x6,null,"The operation failed with the following error:")},se.propTypes={context:h().any,title:h().oneOfType([h().arrayOf(h().node),h().node,h().string]),message:h().oneOfType([h().arrayOf(h().node),h().node,h().string]),error:h().any};const ne=i((0,U.CI)("common")(se));class oe extends s.Component{componentDidMount(){this.initializeRecover()}initializeRecover(){setTimeout(()=>this.props.apiRecoverContext.onInitializeRecoverRequested(),1e3)}render(){switch(this.props.apiRecoverContext.state){case L.INSTALL_EXTENSION_STATE:return s.createElement($,null);case L.DOWNLOAD_SUPPORTED_BROWSER_STATE:return s.createElement(F,null);case L.TOKEN_EXPIRED_STATE:return s.createElement(H,null);case L.ERROR_ALREADY_SIGNED_IN_STATE:return s.createElement(J,{onLogoutButtonClick:this.props.apiRecoverContext.logoutUserAndRefresh,displayAs:K});case L.REQUEST_INVITATION_ERROR:return s.createElement(q,null);case L.UNEXPECTED_ERROR_STATE:return s.createElement(ne,{error:this.props.apiRecoverContext.unexpectedError});default:return s.createElement(_,null)}}}oe.propTypes={apiRecoverContext:h().object};const ae=k(oe);class ie{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.",{cause:e})}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}async getHeaders(){const e=await this.getCsrfToken();if(e)return{"X-CSRF-Token":e}}async getCsrfToken(){if("undefined"==typeof browser||void 0===browser.cookies){const e=document?.cookie?.split("; ")?.find(e=>e.startsWith("csrfToken"))?.split("=");return e&&2===e.length?e[1]:null}const e=this.baseUrl.toString(),t="/"===e.slice(-1)?e:`${e}/`,r=await browser.cookies.get({name:"csrfToken",url:t});return r?.value||null}}var le;function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},ce.apply(null,arguments)}const he=function(e){return s.createElement("svg",ce({xmlns:"http://www.w3.org/2000/svg",width:17,height:16,fill:"none",viewBox:"0 0 17 16"},e),le||(le=s.createElement("g",{clipPath:"url(#heart_svg__clip0_93_734678)"},s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13.497 9.333c.993-.973 2-2.14 2-3.666A3.667 3.667 0 0 0 11.83 2c-1.173 0-2 .333-3 1.333-1-1-1.827-1.333-3-1.333a3.667 3.667 0 0 0-3.667 3.667c0 1.533 1 2.7 2 3.666L8.83 14z"}))))};class ue extends s.Component{render(){return s.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,s.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}ue.defaultProps={direction:"right"},ue.propTypes={children:h().any,message:h().any.isRequired,direction:h().string};const de=ue;class pe extends s.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://www.passbolt.com/docs/hosting/faq/why-I-see-unsafe-mode-banner/"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return s.createElement("footer",{className:"footer"},s.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&s.createElement("li",{className:"error-message"},s.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Unsafe mode"))),this.termsUrl&&s.createElement("li",null,s.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Terms"))),this.privacyUrl&&s.createElement("li",null,s.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Privacy"))),s.createElement("li",null,s.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Credits"))),s.createElement("li",null,this.versions&&s.createElement(de,{message:this.versions,direction:"left"},s.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(he,null))),!this.versions&&s.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(he,null)))))}}pe.propTypes={context:h().any,t:h().func};const me=i((0,U.CI)("common")(pe));var ge=r(5648);const fe=(e,t)=>t.split(".").reduce((e,t)=>e?.[t],e),Ee=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const r=t.whitelistedProtocols||[be.HTTP,be.HTTPS],s=[be.JAVASCRIPT],n=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&n&&(e=`${n}//${e}`);try{const t=new URL(e);return!s.includes(t.protocol)&&!!r.includes(t.protocol)&&t.href}catch(e){return console.error("Failed to sanitize URL:",e),!1}},be={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class ve{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const r=`passbolt.plugins.${e}`,s=fe(this.settings,r)||null;if(s&&"object"==typeof s){const e=fe(s,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}isFeatureBeta(e){(0,ge.A)(e);const t=`passbolt.plugins.${e}.isInBeta`;return fe(this.settings,t)||!1}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return fe(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return fe(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=fe(this.settings,"passbolt.legal.terms.url");return!!e&&Ee(e)}get privacyLink(){const e=fe(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Ee(e)}get registrationPublic(){return!0===fe(this.settings,"passbolt.registration.public")}get debug(){return!0===fe(this.settings,"app.debug")}get url(){return fe(this.settings,"app.url")||""}get version(){return fe(this.settings,"app.version.number")}get isCommunityEdition(){return"ce"===fe(this.settings,"passbolt.edition")}get locale(){return fe(this.settings,"app.locale")||ve.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return fe(this.settings,"passbolt.plugins.locale.options")||ve.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return fe(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[ve.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}var we=r(2635),ye=r(1347);class Se extends s.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await we.Ay.use(U.r9).use(ye.A).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:(e,t)=>this.getTranslationPath(e,t)},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}getTranslationPath(e,t){const r=e[0],s=t[0],n="en-GB"===r?"en-UK":r;return(this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json").replace("{{lng}}",n).replace("{{ns}}",s)}get supportedLocales(){let e=[];return this.props.context.siteSettings?.supportedLocales?e=this.props.context.siteSettings?.supportedLocales.map(e=>e.locale):e.push(this.locale),e.includes("en-UK")&&e.push("en-GB"),e}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await we.Ay.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return s.createElement(s.Fragment,null,this.isReady&&this.props.children)}}Se.propTypes={context:h().any,loadingPath:h().any,children:h().any};const xe=i(Se),Te=new class{allPropTypes=(...e)=>(...t)=>{const r=e.map(e=>e(...t)).filter(Boolean);if(0===r.length)return;const s=r.map(e=>e.message).join("\n");return new Error(s)}};var Re;function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},Ce.apply(null,arguments)}const Oe=function(e){return s.createElement("svg",Ce({width:25,height:24,fill:"none",viewBox:"0 0 25 24"},e),Re||(Re=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M11.597 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16M21.597 21l-4.35-4.35"})))};class ke extends s.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter(e=>e.value!==this.state.selectedValue);return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find(e=>e.value===this.state.selectedValue);return e&&e.label||s.createElement(s.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=s.createRef(),this.selectItemsRef=s.createRef(),this.itemsRef=s.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:r}=e;let{top:s,left:n}=e;const o=this.getFirstParentWithTransform();if(o){const e=o.getBoundingClientRect();s-=e.top,n-=e.left}const a={position:"fixed",zIndex:1,width:t,height:r,top:s,left:n};this.setState({style:a})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,r=t.value,s=t.name;this.setState({[s]:r})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const r=t&&t.split(/\s+/)||[""];return e.filter(e=>r.every(t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return s.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},s.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},s.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},s.createElement("span",{className:"value"},this.selectedItemLabel),s.createElement(Z,null)),s.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&s.createElement(s.Fragment,null,s.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),s.createElement(Oe,{className:"search"})),s.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map(e=>s.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,title:e.title,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label)),!this.hasFilteredItems()&&this.props.search&&s.createElement("li",{className:"option no-results"},s.createElement(U.x6,null,"No results match")," ",s.createElement("span",null,this.state.search))))))}}ke.defaultProps={id:"",name:"select",className:"",direction:"bottom"},ke.propTypes={id:h().string,name:h().string,className:h().string,direction:h().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:h().bool,items:h().array,value:Te.allPropTypes(h().oneOfType([h().string,h().number,h().bool]),(e,t,r)=>{const s=e[t],n=e.items;if(null!==s&&n.length>0&&n.every(e=>e.value!==s))return new Error(`Invalid prop ${t} passed to ${r}. Expected the value ${s} in items.`)}),disabled:h().bool,onChange:h().func};const Le=(0,U.CI)("common")(ke);class Ne extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.bindHandlers()}async componentDidMount(){await this.initLocale()}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.props.context.locale!==e&&await this.setState({locale:this.props.context.locale})}get defaultState(){return{loading:!0,locale:null,processing:!1}}get areActionsAllowed(){return!this.state.processing}bindHandlers(){this.handleLocaleInputChange=this.handleLocaleInputChange.bind(this)}async handleLocaleInputChange(e){const t=e.target.value;await this.updateLocale(t)}async updateLocale(e){await this.toggleProcessing(),await this.props.context.onUpdateLocaleRequested(e),await this.toggleProcessing()}async initLocale(){await this.setState({locale:this.props.context.locale,loading:!1})}async toggleProcessing(){const e=this.state.processing;return this.setState({processing:!e})}isLoading(){return this.state.loading}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map(e=>({value:e.locale,label:e.label})):[]}render(){return s.createElement(s.Fragment,null,!this.isLoading()&&s.createElement("div",{className:"select-wrapper input"},s.createElement(Le,{id:"user-locale-input",className:"setup-extension",name:"locale",value:this.state.locale,disabled:!this.areActionsAllowed,items:this.supportedLocales,onChange:this.handleLocaleInputChange})))}}Ne.propTypes={context:h().any};const Ie=i(Ne);class Ue extends s.Component{get statesToHideLocaleSwitch(){return[L.INITIAL_STATE]}get mustDisplayLocaleSwitch(){return!this.statesToHideLocaleSwitch.includes(this.props.apiRecoverContext.state)}render(){return s.createElement(s.Fragment,null,this.mustDisplayLocaleSwitch&&s.createElement(Ie,null))}}Ue.propTypes={apiRecoverContext:h().any};const Ae=k(Ue);var De,Pe,_e,Be,je;function $e(){return $e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},$e.apply(null,arguments)}const Me=function(e){return s.createElement("svg",$e({xmlns:"http://www.w3.org/2000/svg",width:151,height:27,fill:"none","aria-labelledby":"logo-title logo-description",viewBox:"0 0 151 27"},e),De||(De=s.createElement("title",{id:"logo-title"},"Passbolt logo")),Pe||(Pe=s.createElement("desc",{id:"logo-description"},"This is the logo of passbolt.")),_e||(_e=s.createElement("path",{fill:"var(--icon-color)",d:"M4.648 9.234v8.607h2.48c1.646 0 2.786-.349 3.47-1.012.685-.664 1.013-1.823 1.013-3.395 0-1.52-.305-2.595-.938-3.218-.633-.673-1.695-.972-3.24-.972zM.597 5.963h7.797c2.357 0 4.178.676 5.496 2.048q1.976 2.058 1.974 5.689a8.6 8.6 0 0 1-.406 2.749 7.1 7.1 0 0 1-1.24 2.278 5.9 5.9 0 0 1-2.38 1.773c-.937.349-2.152.524-3.697.524H4.648V26.5H.597zM24.016 18.016h5.064v-3.119h-4.76c-.937 0-1.594.124-1.95.375-.357.25-.517.698-.517 1.321 0 .524.15.899.429 1.122.28.223.848.301 1.734.301M18.649 5.963h8.268c2.103 0 3.672.476 4.736 1.423 1.065.947 1.594 2.347 1.594 4.217v9.456H22.37c-1.52 0-2.708-.375-3.52-1.121-.81-.747-1.2-1.823-1.2-3.22 0-1.722.454-2.945 1.392-3.692s2.483-1.134 4.697-1.134h5.315v-.365c0-.898-.276-1.518-.809-1.896-.532-.377-1.47-.55-2.86-.55H18.65zM36.55 17.915h8.525c.76 0 1.318-.124 1.646-.35.183-.122.328-.29.423-.486.094-.197.134-.414.115-.63a1.2 1.2 0 0 0-.112-.632 1.24 1.24 0 0 0-.42-.492c-.355-.253-.91-.374-1.646-.374h-3.494c-2.067 0-3.467-.325-4.203-.947-.737-.623-1.088-1.747-1.088-3.32 0-1.62.431-2.82 1.318-3.592.886-.772 2.255-1.152 4.064-1.152h8.684v3.142h-7.134q-1.75 0-2.279.301c-.354.198-.532.547-.532 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.676c1.672 0 2.961.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.405 2.53-1.188 3.417-.37.427-.833.768-1.354.996-.522.23-1.09.34-1.661.325H36.549zM53.822 17.915h8.526c.76 0 1.318-.124 1.646-.35a1.23 1.23 0 0 0 .42-.487c.093-.196.132-.413.112-.629a1.2 1.2 0 0 0-.111-.632 1.24 1.24 0 0 0-.421-.492c-.354-.253-.91-.374-1.646-.374h-3.493c-2.067 0-3.467-.325-4.204-.947-.736-.623-1.088-1.752-1.088-3.324 0-1.62.432-2.82 1.318-3.593.886-.772 2.253-1.147 4.075-1.147h8.686v3.142h-7.141q-1.747 0-2.28.301c-.353.198-.531.547-.531 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.671c1.672 0 2.963.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.403 2.53-1.188 3.417-.37.427-.832.767-1.354.996a3.9 3.9 0 0 1-1.66.325H53.769v-3.106zM75.387.5v5.463h3.47c1.55 0 2.759.175 3.694.55.946.362 1.77.976 2.38 1.772a7.2 7.2 0 0 1 1.243 2.296c.281.888.417 1.814.403 2.744q0 3.63-1.974 5.689c-1.315 1.372-3.14 2.046-5.493 2.046h-7.8V.5zm2.462 8.734h-2.483v8.608h2.785c1.55 0 2.633-.324 3.243-.95s.935-1.721.935-3.268-.354-2.694-1.033-3.367c-.68-.673-1.832-1.023-3.447-1.023M92.3 13.525c0 1.445.328 2.532 1.013 3.367s1.62 1.198 2.86 1.198 2.152-.398 2.863-1.198 1.033-1.921 1.033-3.367-.356-2.547-1.033-3.344c-.677-.798-1.62-1.198-2.863-1.198a3.64 3.64 0 0 0-1.57.279 3.6 3.6 0 0 0-1.29.919c-.685.797-1.013 1.921-1.013 3.344m12.002 0q0 3.544-2.202 5.689c-1.47 1.397-3.42 2.121-5.901 2.121s-4.457-.699-5.924-2.121-2.202-3.292-2.202-5.664q0-3.558 2.202-5.69c1.467-1.424 3.444-2.145 5.919-2.145s4.431.724 5.901 2.144 2.207 3.294 2.207 5.666M110.935 21.06h-4.202V.5h4.202zM112.884 5.963h2.86V.5h4.052v5.463h4.278v3.02h-4.278v6.09c0 1.12.204 1.895.581 2.343.377.449 1.064.649 2.026.649h1.671v3.02h-3.72c-1.494 0-2.636-.4-3.444-1.223-.809-.823-1.189-1.995-1.189-3.519v-7.36h-2.863v-3.02z"})),Be||(Be=s.createElement("path",{fill:"#D40101",d:"m149.951 10.68-9.059-8.36a2.12 2.12 0 0 0-1.421-.543c-.526 0-1.033.194-1.421.544l-5.684 5.268c.745.271 1.414.71 1.952 1.282.539.572.933 1.26 1.149 2.01h7.673a.73.73 0 0 1 .504.204.69.69 0 0 1 .207.494v1.147a.68.68 0 0 1-.207.494.72.72 0 0 1-.504.204h-.886v1.623a.68.68 0 0 1-.205.494.72.72 0 0 1-.503.205h-1.945a.73.73 0 0 1-.503-.205.69.69 0 0 1-.205-.494v-1.623h-3.426a4.84 4.84 0 0 1-1.135 2.033 5 5 0 0 1-1.966 1.287l5.71 5.276c.388.349.895.543 1.421.543a2.12 2.12 0 0 0 1.421-.543l9.043-8.355a2.03 2.03 0 0 0-.01-2.985"})),je||(je=s.createElement("path",{fill:"#D40101",d:"M130.683 9.867a2.6 2.6 0 0 0-1.064.253c-.371.18-.686.455-.913.794a2.242 2.242 0 0 0-.113 2.305 2.3 2.3 0 0 0 .831.877 2.36 2.36 0 0 0 2.355.059c.362-.197.664-.484.875-.833a2.24 2.24 0 0 0 .324-1.153 2.21 2.21 0 0 0-.653-1.625 2.3 2.3 0 0 0-.751-.5 2.3 2.3 0 0 0-.891-.177"})))};class Fe extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.userId=null,this.token=null,this.initializeProperties()}get defaultState(){return{siteSettings:null,trustedDomain:this.baseUrl,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,onUpdateLocaleRequested:this.onUpdateLocaleRequested.bind(this)}}async componentDidMount(){await this.getSiteSettings(),this.initLocale()}initializeProperties(){const e="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}",t=new RegExp(`(setup/recover|setup/recover/start)/(${e})/(${e})$`),r=window.location.pathname.match(t);r?(this.userId=r[2],this.token=r[3]):console.error("Unable to retrieve the user id and token from the url")}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ie).setBaseUrl(this.state.trustedDomain)}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new b(e),{body:r}=await t.findAll(),s=new ve(r);await this.setState({siteSettings:s})}initLocale(){const e=this.getUrlLocale()||this.getBrowserLocale()||this.getBrowserSimilarLocale()||this.state.siteSettings.locale;this.setState({locale:e})}getUrlLocale(){const e=new URL(window.location.href).searchParams.get("locale");if(e){const t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale);if(t)return t.locale}}getBrowserLocale(){const e=this.state.siteSettings.supportedLocales.find(e=>navigator.language===e.locale);if(e)return e.locale}getBrowserSimilarLocale(){const e=navigator.language.split("-")[0],t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale.split("-")[0]);if(t)return t.locale}async onUpdateLocaleRequested(e){await this.setState({locale:e}),this.setUrlLocale(e)}setUrlLocale(e){const t=new URL(window.location.href);t.searchParams.set("locale",e),window.history.replaceState(null,null,t)}isReady(){return null!==this.state.siteSettings&&null!==this.state.locale}render(){return s.createElement(l.Provider,{value:this.state},this.isReady()&&s.createElement(xe,{loadingPath:`${this.state.trustedDomain}/locales/{{lng}}/{{ns}}.json`},s.createElement(O,{value:{userId:this.userId,token:this.token}},s.createElement("div",{id:"container",className:"container page login"},s.createElement("div",{className:"content"},s.createElement("div",{className:"header"},s.createElement("div",{className:"logo-svg"},s.createElement(Me,{role:"img",width:"20rem",height:"3.5rem"}))),s.createElement("div",{className:"login-form"},s.createElement(ae,null)),s.createElement(Ae,null)),s.createElement(me,null)))))}}const Ve=Fe,qe=document.createElement("div");document.body.appendChild(qe),n.render(s.createElement(Ve,null),qe)}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return s[e].call(r.exports,r,r.exports,o),r.exports}o.m=s,e=[],o.O=(t,r,s,n)=>{if(!r){var a=1/0;for(h=0;h<e.length;h++){for(var[r,s,n]=e[h],i=!0,l=0;l<r.length;l++)(!1&n||a>=n)&&Object.keys(o.O).every(e=>o.O[e](r[l]))?r.splice(l--,1):(i=!1,n<a&&(a=n));if(i){e.splice(h--,1);var c=s();void 0!==c&&(t=c)}}return t}n=n||0;for(var h=e.length;h>0&&e[h-1][2]>n;h--)e[h]=e[h-1];e[h]=[r,s,n]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,s){if(1&s&&(e=this(e)),8&s)return e;if("object"==typeof e&&e){if(4&s&&e.__esModule)return e;if(16&s&&"function"==typeof e.then)return e}var n=Object.create(null);o.r(n);var a={};t=t||[null,r({}),r([]),r(r)];for(var i=2&s&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>a[t]=()=>e[t]);return a.default=()=>e,o.d(n,a),n},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.e=()=>Promise.resolve(),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),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.j=478,(()=>{var e={478:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var s,n,[a,i,l]=r,c=0;if(a.some(t=>0!==e[t])){for(s in i)o.o(i,s)&&(o.m[s]=i[s]);if(l)var h=l(o)}for(t&&t(r);c<a.length;c++)n=a[c],o.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return o.O(h)},r=self.webpackChunkpassbolt_styleguide=self.webpackChunkpassbolt_styleguide||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var a=o.O(void 0,[847],()=>o(7594));a=o.O(a)})();
|
|
2
|
+
(()=>{"use strict";var e,t,r,s={7594:(e,t,r)=>{var s=r(6540),n=r(961);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},o.apply(null,arguments)}const a=s.createContext({user:null,users:null,roles:null,rememberMeOptions:{},resources:null,resource:null,shareResources:null,selectedResources:null,selectedUser:null,folders:null,resourceCommentId:null,mustRefreshComments:!1,siteSettings:null,userSettings:null,onCheckIsAuthenticatedRequested:null});function i(e){return class extends s.Component{render(){return s.createElement(a.Consumer,null,t=>s.createElement(e,o({context:t},this.props)))}}}const l=a;var c=r(5556),h=r.n(c);class u extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const d=u;class p extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const m=p;class g extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const f=g,E=["GET","POST","PUT","DELETE"];class b{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.",{cause:e})}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}async buildFetchOptions(){const e=await this.options.getHeaders();return{credentials:"include",headers:{...this.getDefaultHeaders(),...e}}}async get(e,t){this.assertValidId(e);const r=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",r)}async delete(e,t,r,s){let n;this.assertValidId(e),void 0===s&&(s=!1),n=s?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,r||{}):this.buildUrl(`${this.baseUrl}/${e}`,r||{});let o=null;return t&&(o=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",n,o)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return this.fetchAndHandleResponse("GET",t)}async create(e,t){const r=this.buildUrl(this.baseUrl.toString(),t||{}),s=this.buildBody(e);return this.fetchAndHandleResponse("POST",r,s)}async update(e,t,r,s){let n;this.assertValidId(e),void 0===s&&(s=!1),n=s?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,r||{}):this.buildUrl(`${this.baseUrl}/${e}`,r||{});let o=null;return t&&(o=this.buildBody(t)),this.fetchAndHandleResponse("PUT",n,o)}async updateAll(e,t={}){const r=this.buildUrl(this.baseUrl.toString(),t),s=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",r,s)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(E.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if(!(e instanceof FormData)&&"string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string or a FormData.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const r=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,s]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof s)r.searchParams.append(e,s);else{if(!Array.isArray(s))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");s.forEach(t=>{r.searchParams.append(e,t)})}}return r}async sendRequest(e,t,r,s){this.assertUrl(t),this.assertMethod(e),r&&this.assertBody(r);const n="undefined"!=typeof customApiClientFetch?customApiClientFetch:fetch,o={...await this.buildFetchOptions(),...s};o.method=e,r&&(o.body=r);try{return await n(t.toString(),o)}catch(e){throw console.error(e),navigator.onLine?new f("Unable to reach the server, an unexpected error occurred"):new f("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,r,s){const n=await this.sendRequest(e,t,r,s);return this.parseResponseJson(n)}async parseResponseJson(e){let t;try{t=await e.json()}catch(t){throw console.debug(e.url.toString(),t),new m(t,e)}if(!e.ok){const r=t.header.message;throw new d(r,{code:e.status,body:t.body})}return t}}const v="chrome",w="edge",y="firefox";function S(){const e=window.navigator.userAgent.toLowerCase();let t;return t=e.indexOf("firefox")>-1?y:e.indexOf("samsungbrowser")>-1?"samsung":e.indexOf("opera")>-1||e.indexOf("opr")>-1?"opera":e.indexOf("trident")>-1?"internet-explorer":e.indexOf("edg")>-1?w:e.indexOf("chrome")>-1?v:e.indexOf("safari")>-1?"safari":"unknown",t}const x=class{constructor(e){e.setResourceName("auth"),this.apiClient=new b(e)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new d("An unexpected error happened during the legacy logout process",{code:t.status})}};function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},T.apply(null,arguments)}const R=s.createContext({userId:null,token:null,state:null,unexpectedError:null,onInitializeRecoverRequested:()=>{},logoutUserAndRefresh:()=>{}});class C extends s.Component{constructor(e){super(e),this.state=Object.assign(this.defaultState,e.value),this.authLogoutService=new x(e.context.getApiClientOptions())}get defaultState(){return{userId:null,token:null,state:L.INITIAL_STATE,unexpectedError:null,onInitializeRecoverRequested:this.onInitializeRecoverRequested.bind(this),logoutUserAndRefresh:this.logoutUserAndRefresh.bind(this)}}async onInitializeRecoverRequested(){return this.state.userId&&this.state.token?this.isBrowserSupported()?void await this.startRecover().then(this.handleStartRecoverSuccess.bind(this)).catch(this.handleStartRecoverError.bind(this)):this.setState({state:L.DOWNLOAD_SUPPORTED_BROWSER_STATE}):this.setState({state:L.REQUEST_INVITATION_ERROR})}handleStartRecoverSuccess(){this.setState({state:L.INSTALL_EXTENSION_STATE})}handleStartRecoverError(e){if(e instanceof d){if(403===e.data.code)return this.setState({state:L.ERROR_ALREADY_SIGNED_IN_STATE});const t=Boolean(e.data.body?.token?.expired),r=Boolean(e.data.body?.token?.isActive);if(t||r)return this.setState({state:L.TOKEN_EXPIRED_STATE});if(400===e?.data?.code)return this.setState({state:L.REQUEST_INVITATION_ERROR})}return this.setState({state:L.UNEXPECTED_ERROR_STATE})}async logoutUserAndRefresh(){try{await this.authLogoutService.logout()}catch(e){const t=new f(e.message);return this.setState({unexpectedError:t,state:L.UNEXPECTED_ERROR_STATE})}window.location.reload()}isBrowserSupported(){const e=S();return[v,y,w].includes(e)}async startRecover(){const e=this.props.context.getApiClientOptions();e.setResourceName("setup");const t=new b(e);await t.get(`recover/${this.state.userId}/${this.state.token}`)}render(){return s.createElement(R.Provider,{value:this.state},this.props.children)}}C.propTypes={context:h().any,value:h().any,children:h().any};const O=i(C);function k(e){return class extends s.Component{render(){return s.createElement(R.Consumer,null,t=>s.createElement(e,T({apiRecoverContext:t},this.props)))}}}const L={INITIAL_STATE:"Initial state",DOWNLOAD_SUPPORTED_BROWSER_STATE:"Download supported browser state",INSTALL_EXTENSION_STATE:"Install extension state",TOKEN_EXPIRED_STATE:"Token expired state",ERROR_ALREADY_SIGNED_IN_STATE:"Error, already signed in state",REQUEST_INVITATION_ERROR:"Request inviration error state",UNEXPECTED_ERROR_STATE:"Unexpected error state"};var N,I,U=r(2389);function A(){return A=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},A.apply(null,arguments)}const D=function(e){return s.createElement("svg",A({width:18,height:18,fill:"none",className:"svg-icon spinner",viewBox:"0 0 18 18"},e),N||(N=s.createElement("circle",{id:"background",cx:8,cy:8,r:8,fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(1 1)"})),I||(I=s.createElement("circle",{id:"loading",r:8,fill:"none",stroke:"var(--spinner-color)",strokeLinecap:"round",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(9 9)"})))};class P extends s.Component{render(){return s.createElement("div",{className:"login-processing"},s.createElement("h1",null,this.props.title),s.createElement("div",{className:"processing-wrapper"},s.createElement(D,null)))}}P.propTypes={title:h().oneOfType([h().arrayOf(h().node),h().node,h().string])},P.defaultProps={title:s.createElement(U.x6,null,"Please wait...")};const _=(0,U.CI)("common")(P),B="https://download.passbolt.com/extension/chrome";class j extends s.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return{browserName:S(),theme:e}}bindCallbacks(){this.handleRefreshClick=this.handleRefreshClick.bind(this)}get browserStoreThumbnailUrl(){const e="dark"===this.state.theme?"white":"black";switch(this.state.browserName){case y:return`${this.props.context.trustedDomain}/img/third_party/FirefoxAMO_${e}.svg`;case w:return`${this.props.context.trustedDomain}/img/third_party/edge-addon-${e}.svg`;default:return`${this.props.context.trustedDomain}/img/third_party/ChromeWebStore_${e}.svg`}}get storeUrl(){switch(this.state.browserName){case v:return B;case y:return"https://addons.mozilla.org/firefox/addon/passbolt";case w:return"https://microsoftedge.microsoft.com/addons/detail/passbolt-extension/ljeppgjhohmhpbdhjjjbiflabdgfkhpo";default:return B}}get storeClassName(){return`browser-webstore ${this.state.browserName}`}handleRefreshClick(){window.location.reload()}render(){return s.createElement("div",{className:"install-extension"},s.createElement("h1",null,s.createElement(U.x6,null,"Please install the browser extension.")),s.createElement("p",null,s.createElement(U.x6,null,"Please download the browser extension and refresh this page to continue.")),this.state.browserName&&s.createElement("a",{href:this.storeUrl,className:this.storeClassName,target:"_blank",rel:"noopener noreferrer"},s.createElement("img",{src:this.browserStoreThumbnailUrl,alt:"browser store thumbnail"})),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:this.storeUrl,className:"button primary big full-width",role:"button",target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Download extension")),s.createElement("button",{className:"link",type:"button",onClick:this.handleRefreshClick},s.createElement(U.x6,null,"Refresh to detect extension"))))}}j.propTypes={context:h().any};const $=i((0,U.CI)("common")(j));class M extends s.Component{constructor(e){super(e),this.state=this.getDefaultState()}getDefaultState(){return{selectedBrowser:this.compatibleBrowserList[0]}}handleBrowserButtonClick(e){this.setState({selectedBrowser:e})}get compatibleBrowserList(){return[{name:"Mozilla Firefox",img:"firefox.svg",url:"https://www.mozilla.org/"},{name:"Google Chrome",img:"chrome.svg",url:"https://www.google.com/chrome/"},{name:"Microsoft Edge",img:"edge.svg",url:"https://www.microsoft.com/edge"},{name:"Brave",img:"brave.svg",url:"https://www.brave.com/"},{name:"Vivaldi",img:"vivaldi.svg",url:"https://www.vivaldi.com/"}]}render(){return s.createElement("div",{className:"browser-not-supported"},s.createElement("h1",null,s.createElement(U.x6,null,"Sorry, your browser is not supported.")),s.createElement("p",null,s.createElement(U.x6,null,"Please download one of these browsers to get started with passbolt:")),s.createElement("div",{className:"browser-button-list"},this.compatibleBrowserList.map((e,t)=>s.createElement("button",{key:t,className:"browser"+(e.name===this.state.selectedBrowser.name?" focused":""),target:"_blank",onClick:()=>this.handleBrowserButtonClick(e)},s.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.img}`})))),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:this.state.selectedBrowser.url,rel:"noopener noreferrer",className:"button primary big full-width",role:"button",target:"_blank"},s.createElement(U.x6,null,"Download ",{browserName:this.state.selectedBrowser.name}))))}}M.propTypes={context:h().any};const F=i((0,U.CI)("common")(M));class V extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"Access to this service requires an invitation.")),s.createElement("p",null,s.createElement(U.x6,null,"This email is not associated with any approved users on this domain.")," ",s.createElement(U.x6,null,"Please contact your administrator to request an invitation link.")),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Try with another email"))))}}V.propTypes={context:h().any};const q=i((0,U.CI)("common")(V));class z extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"The invitation is expired.")),s.createElement("p",null,s.createElement(U.x6,null,"You can request another invitation email by clicking on the button below.")),s.createElement("div",{className:"form-actions"},s.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Request invitation"))))}}z.propTypes={context:h().any};const H=i((0,U.CI)("common")(z)),W="setup",K="recover",X="account-recovery";class G extends s.Component{render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,s.createElement(U.x6,null,"Cannot perform the action while being logged in")),s.createElement("p",null,{[W]:s.createElement(U.x6,null,"It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing."),[K]:s.createElement(U.x6,null,"It is not possible to perform the recovery of your account as you are still logged in. You need to log out first before continuing."),[X]:s.createElement(U.x6,null,"It is not possible to recover your private key of your account as you are still logged in. You need to log out first before continuing.")}[this.props.displayAs]),s.createElement("div",{className:"form-actions"},s.createElement("button",{onClick:this.props.onLogoutButtonClick.bind(this),className:"button primary big full-width",role:"button"},s.createElement(U.x6,null,"Sign out"))))}}G.propTypes={displayAs:h().oneOf([W,K,X]).isRequired,onLogoutButtonClick:h().func.isRequired};const J=(0,U.CI)("common")(G);var Y;function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},Q.apply(null,arguments)}const Z=function(e){return s.createElement("svg",Q({xmlns:"http://www.w3.org/2000/svg",width:10,height:8,fill:"none",viewBox:"0 0 10 8"},e),Y||(Y=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m1 2 4 4 4-4"})))};var ee;function te(){return te=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},te.apply(null,arguments)}const re=function(e){return s.createElement("svg",te({xmlns:"http://www.w3.org/2000/svg",width:8,height:10,fill:"none",viewBox:"0 0 8 10"},e),ee||(ee=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m2 9 4-4-4-4"})))};class se extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}onClick(){this.props.context.port?this.props.context.port.request("passbolt.tab.reload"):window.location.reload()}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){const e=this.props?.error;return Boolean(e?.details)||Boolean(e?.data?.body)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return s.createElement("div",{className:"setup-error"},s.createElement("h1",null,this.props.title),s.createElement("p",null,this.props.message),s.createElement("p",null,this.props.error&&this.props.error.message),this.hasErrorDetails&&s.createElement("div",{className:"accordion error-details"},s.createElement("div",{className:"accordion-header"},s.createElement("button",{className:"no-border",type:"button",onClick:this.handleErrorDetailsToggle},this.state.showErrorDetails?s.createElement(Z,{className:"caret-down"}):s.createElement(re,{className:"caret-right"}),s.createElement("span",null,s.createElement(U.x6,null,"Error details")))),this.state.showErrorDetails&&s.createElement("div",{className:"accordion-content"},s.createElement("div",{className:"input text"},s.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},s.createElement(U.x6,null,"Error details")),s.createElement("textarea",{id:"js_field_debug",defaultValue:`${this.formatErrors()}`,readOnly:!0})))),s.createElement("div",{className:"form-actions"},s.createElement("button",{onClick:this.onClick.bind(this),className:"button primary big full-width",role:"button"},s.createElement(U.x6,null,"Try again"))))}}se.defaultProps={title:s.createElement(U.x6,null,"Something went wrong!"),message:s.createElement(U.x6,null,"The operation failed with the following error:")},se.propTypes={context:h().any,title:h().oneOfType([h().arrayOf(h().node),h().node,h().string]),message:h().oneOfType([h().arrayOf(h().node),h().node,h().string]),error:h().any};const ne=i((0,U.CI)("common")(se));class oe extends s.Component{componentDidMount(){this.initializeRecover()}initializeRecover(){setTimeout(()=>this.props.apiRecoverContext.onInitializeRecoverRequested(),1e3)}render(){switch(this.props.apiRecoverContext.state){case L.INSTALL_EXTENSION_STATE:return s.createElement($,null);case L.DOWNLOAD_SUPPORTED_BROWSER_STATE:return s.createElement(F,null);case L.TOKEN_EXPIRED_STATE:return s.createElement(H,null);case L.ERROR_ALREADY_SIGNED_IN_STATE:return s.createElement(J,{onLogoutButtonClick:this.props.apiRecoverContext.logoutUserAndRefresh,displayAs:K});case L.REQUEST_INVITATION_ERROR:return s.createElement(q,null);case L.UNEXPECTED_ERROR_STATE:return s.createElement(ne,{error:this.props.apiRecoverContext.unexpectedError});default:return s.createElement(_,null)}}}oe.propTypes={apiRecoverContext:h().object};const ae=k(oe);class ie{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.",{cause:e})}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}async getHeaders(){const e=await this.getCsrfToken();if(e)return{"X-CSRF-Token":e}}async getCsrfToken(){if("undefined"==typeof browser||void 0===browser.cookies){const e=document?.cookie?.split("; ")?.find(e=>e.startsWith("csrfToken"))?.split("=");return e&&2===e.length?e[1]:null}const e=this.baseUrl.toString(),t="/"===e.slice(-1)?e:`${e}/`,r=await browser.cookies.get({name:"csrfToken",url:t});return r?.value||null}}var le;function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},ce.apply(null,arguments)}const he=function(e){return s.createElement("svg",ce({xmlns:"http://www.w3.org/2000/svg",width:17,height:16,fill:"none",viewBox:"0 0 17 16"},e),le||(le=s.createElement("g",{clipPath:"url(#heart_svg__clip0_93_734678)"},s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13.497 9.333c.993-.973 2-2.14 2-3.666A3.667 3.667 0 0 0 11.83 2c-1.173 0-2 .333-3 1.333-1-1-1.827-1.333-3-1.333a3.667 3.667 0 0 0-3.667 3.667c0 1.533 1 2.7 2 3.666L8.83 14z"}))))};class ue extends s.Component{render(){return s.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,s.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}ue.defaultProps={direction:"right"},ue.propTypes={children:h().any,message:h().any.isRequired,direction:h().string};const de=ue;class pe extends s.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://www.passbolt.com/docs/hosting/faq/why-I-see-unsafe-mode-banner/"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return s.createElement("footer",{className:"footer"},s.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&s.createElement("li",{className:"error-message"},s.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Unsafe mode"))),this.termsUrl&&s.createElement("li",null,s.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Terms"))),this.privacyUrl&&s.createElement("li",null,s.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Privacy"))),s.createElement("li",null,s.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(U.x6,null,"Credits"))),s.createElement("li",null,this.versions&&s.createElement(de,{message:this.versions,direction:"left"},s.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(he,null))),!this.versions&&s.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},s.createElement(he,null)))))}}pe.propTypes={context:h().any,t:h().func};const me=i((0,U.CI)("common")(pe));var ge=r(5648);const fe=(e,t)=>t.split(".").reduce((e,t)=>e?.[t],e),Ee=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const r=t.whitelistedProtocols||[be.HTTP,be.HTTPS],s=[be.JAVASCRIPT],n=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&n&&(e=`${n}//${e}`);try{const t=new URL(e);return!s.includes(t.protocol)&&!!r.includes(t.protocol)&&t.href}catch(e){return console.error("Failed to sanitize URL:",e),!1}},be={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class ve{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const r=`passbolt.plugins.${e}`,s=fe(this.settings,r)||null;if(s&&"object"==typeof s){const e=fe(s,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}isFeatureBeta(e){(0,ge.A)(e);const t=`passbolt.plugins.${e}.isInBeta`;return fe(this.settings,t)||!1}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return fe(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return fe(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=fe(this.settings,"passbolt.legal.terms.url");return!!e&&Ee(e)}get privacyLink(){const e=fe(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Ee(e)}get registrationPublic(){return!0===fe(this.settings,"passbolt.registration.public")}get debug(){return!0===fe(this.settings,"app.debug")}get url(){return fe(this.settings,"app.url")||""}get version(){return fe(this.settings,"app.version.number")}get isCommunityEdition(){return"ce"===fe(this.settings,"passbolt.edition")}get locale(){return fe(this.settings,"app.locale")||ve.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return fe(this.settings,"passbolt.plugins.locale.options")||ve.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return fe(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[ve.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}var we=r(2635),ye=r(1347);class Se extends s.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await we.Ay.use(U.r9).use(ye.A).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:(e,t)=>this.getTranslationPath(e,t)},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}getTranslationPath(e,t){const r=e[0],s=t[0],n="en-GB"===r?"en-UK":r;return(this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json").replace("{{lng}}",n).replace("{{ns}}",s)}get supportedLocales(){let e=[];return this.props.context.siteSettings?.supportedLocales?e=this.props.context.siteSettings?.supportedLocales.map(e=>e.locale):e.push(this.locale),e.includes("en-UK")&&e.push("en-GB"),e}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await we.Ay.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return s.createElement(s.Fragment,null,this.isReady&&this.props.children)}}Se.propTypes={context:h().any,loadingPath:h().any,children:h().any};const xe=i(Se),Te=new class{allPropTypes=(...e)=>(...t)=>{const r=e.map(e=>e(...t)).filter(Boolean);if(0===r.length)return;const s=r.map(e=>e.message).join("\n");return new Error(s)}};var Re;function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},Ce.apply(null,arguments)}const Oe=function(e){return s.createElement("svg",Ce({width:25,height:24,fill:"none",viewBox:"0 0 25 24"},e),Re||(Re=s.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M11.597 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16M21.597 21l-4.35-4.35"})))};class ke extends s.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter(e=>e.value!==this.state.selectedValue);return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find(e=>e.value===this.state.selectedValue);return e&&e.label||s.createElement(s.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=s.createRef(),this.selectItemsRef=s.createRef(),this.itemsRef=s.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:r}=e;let{top:s,left:n}=e;const o=this.getFirstParentWithTransform();if(o){const e=o.getBoundingClientRect();s-=e.top,n-=e.left}const a={position:"fixed",zIndex:1,width:t,height:r,top:s,left:n};this.setState({style:a})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,r=t.value,s=t.name;this.setState({[s]:r})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const r=t&&t.split(/\s+/)||[""];return e.filter(e=>r.every(t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return s.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},s.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},s.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},s.createElement("span",{className:"value"},this.selectedItemLabel),s.createElement(Z,null)),s.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&s.createElement(s.Fragment,null,s.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),s.createElement(Oe,{className:"search"})),s.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map(e=>s.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,title:e.title,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label)),!this.hasFilteredItems()&&this.props.search&&s.createElement("li",{className:"option no-results"},s.createElement(U.x6,null,"No results match")," ",s.createElement("span",null,this.state.search))))))}}ke.defaultProps={id:"",name:"select",className:"",direction:"bottom"},ke.propTypes={id:h().string,name:h().string,className:h().string,direction:h().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:h().bool,items:h().array,value:Te.allPropTypes(h().oneOfType([h().string,h().number,h().bool]),(e,t,r)=>{const s=e[t],n=e.items;if(null!==s&&n.length>0&&n.every(e=>e.value!==s))return new Error(`Invalid prop ${t} passed to ${r}. Expected the value ${s} in items.`)}),disabled:h().bool,onChange:h().func};const Le=(0,U.CI)("common")(ke);class Ne extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.bindHandlers()}async componentDidMount(){await this.initLocale()}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.props.context.locale!==e&&await this.setState({locale:this.props.context.locale})}get defaultState(){return{loading:!0,locale:null,processing:!1}}get areActionsAllowed(){return!this.state.processing}bindHandlers(){this.handleLocaleInputChange=this.handleLocaleInputChange.bind(this)}async handleLocaleInputChange(e){const t=e.target.value;await this.updateLocale(t)}async updateLocale(e){await this.toggleProcessing(),await this.props.context.onUpdateLocaleRequested(e),await this.toggleProcessing()}async initLocale(){await this.setState({locale:this.props.context.locale,loading:!1})}async toggleProcessing(){const e=this.state.processing;return this.setState({processing:!e})}isLoading(){return this.state.loading}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map(e=>({value:e.locale,label:e.label})):[]}render(){return s.createElement(s.Fragment,null,!this.isLoading()&&s.createElement("div",{className:"select-wrapper input"},s.createElement(Le,{id:"user-locale-input",className:"setup-extension",name:"locale",value:this.state.locale,disabled:!this.areActionsAllowed,items:this.supportedLocales,onChange:this.handleLocaleInputChange})))}}Ne.propTypes={context:h().any};const Ie=i(Ne);class Ue extends s.Component{get statesToHideLocaleSwitch(){return[L.INITIAL_STATE]}get mustDisplayLocaleSwitch(){return!this.statesToHideLocaleSwitch.includes(this.props.apiRecoverContext.state)}render(){return s.createElement(s.Fragment,null,this.mustDisplayLocaleSwitch&&s.createElement(Ie,null))}}Ue.propTypes={apiRecoverContext:h().any};const Ae=k(Ue);var De,Pe,_e,Be,je;function $e(){return $e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)({}).hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},$e.apply(null,arguments)}const Me=function(e){return s.createElement("svg",$e({xmlns:"http://www.w3.org/2000/svg",width:151,height:27,fill:"none","aria-labelledby":"logo-title logo-description",viewBox:"0 0 151 27"},e),De||(De=s.createElement("title",{id:"logo-title"},"Passbolt logo")),Pe||(Pe=s.createElement("desc",{id:"logo-description"},"This is the logo of passbolt.")),_e||(_e=s.createElement("path",{fill:"var(--icon-color)",d:"M4.648 9.234v8.607h2.48c1.646 0 2.786-.349 3.47-1.012.685-.664 1.013-1.823 1.013-3.395 0-1.52-.305-2.595-.938-3.218-.633-.673-1.695-.972-3.24-.972zM.597 5.963h7.797c2.357 0 4.178.676 5.496 2.048q1.976 2.058 1.974 5.689a8.6 8.6 0 0 1-.406 2.749 7.1 7.1 0 0 1-1.24 2.278 5.9 5.9 0 0 1-2.38 1.773c-.937.349-2.152.524-3.697.524H4.648V26.5H.597zM24.016 18.016h5.064v-3.119h-4.76c-.937 0-1.594.124-1.95.375-.357.25-.517.698-.517 1.321 0 .524.15.899.429 1.122.28.223.848.301 1.734.301M18.649 5.963h8.268c2.103 0 3.672.476 4.736 1.423 1.065.947 1.594 2.347 1.594 4.217v9.456H22.37c-1.52 0-2.708-.375-3.52-1.121-.81-.747-1.2-1.823-1.2-3.22 0-1.722.454-2.945 1.392-3.692s2.483-1.134 4.697-1.134h5.315v-.365c0-.898-.276-1.518-.809-1.896-.532-.377-1.47-.55-2.86-.55H18.65zM36.55 17.915h8.525c.76 0 1.318-.124 1.646-.35.183-.122.328-.29.423-.486.094-.197.134-.414.115-.63a1.2 1.2 0 0 0-.112-.632 1.24 1.24 0 0 0-.42-.492c-.355-.253-.91-.374-1.646-.374h-3.494c-2.067 0-3.467-.325-4.203-.947-.737-.623-1.088-1.747-1.088-3.32 0-1.62.431-2.82 1.318-3.592.886-.772 2.255-1.152 4.064-1.152h8.684v3.142h-7.134q-1.75 0-2.279.301c-.354.198-.532.547-.532 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.676c1.672 0 2.961.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.405 2.53-1.188 3.417-.37.427-.833.768-1.354.996-.522.23-1.09.34-1.661.325H36.549zM53.822 17.915h8.526c.76 0 1.318-.124 1.646-.35a1.23 1.23 0 0 0 .42-.487c.093-.196.132-.413.112-.629a1.2 1.2 0 0 0-.111-.632 1.24 1.24 0 0 0-.421-.492c-.354-.253-.91-.374-1.646-.374h-3.493c-2.067 0-3.467-.325-4.204-.947-.736-.623-1.088-1.752-1.088-3.324 0-1.62.432-2.82 1.318-3.593.886-.772 2.253-1.147 4.075-1.147h8.686v3.142h-7.141q-1.747 0-2.28.301c-.353.198-.531.547-.531 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.671c1.672 0 2.963.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.403 2.53-1.188 3.417-.37.427-.832.767-1.354.996a3.9 3.9 0 0 1-1.66.325H53.769v-3.106zM75.387.5v5.463h3.47c1.55 0 2.759.175 3.694.55.946.362 1.77.976 2.38 1.772a7.2 7.2 0 0 1 1.243 2.296c.281.888.417 1.814.403 2.744q0 3.63-1.974 5.689c-1.315 1.372-3.14 2.046-5.493 2.046h-7.8V.5zm2.462 8.734h-2.483v8.608h2.785c1.55 0 2.633-.324 3.243-.95s.935-1.721.935-3.268-.354-2.694-1.033-3.367c-.68-.673-1.832-1.023-3.447-1.023M92.3 13.525c0 1.445.328 2.532 1.013 3.367s1.62 1.198 2.86 1.198 2.152-.398 2.863-1.198 1.033-1.921 1.033-3.367-.356-2.547-1.033-3.344c-.677-.798-1.62-1.198-2.863-1.198a3.64 3.64 0 0 0-1.57.279 3.6 3.6 0 0 0-1.29.919c-.685.797-1.013 1.921-1.013 3.344m12.002 0q0 3.544-2.202 5.689c-1.47 1.397-3.42 2.121-5.901 2.121s-4.457-.699-5.924-2.121-2.202-3.292-2.202-5.664q0-3.558 2.202-5.69c1.467-1.424 3.444-2.145 5.919-2.145s4.431.724 5.901 2.144 2.207 3.294 2.207 5.666M110.935 21.06h-4.202V.5h4.202zM112.884 5.963h2.86V.5h4.052v5.463h4.278v3.02h-4.278v6.09c0 1.12.204 1.895.581 2.343.377.449 1.064.649 2.026.649h1.671v3.02h-3.72c-1.494 0-2.636-.4-3.444-1.223-.809-.823-1.189-1.995-1.189-3.519v-7.36h-2.863v-3.02z"})),Be||(Be=s.createElement("path",{fill:"#D40101",d:"m149.951 10.68-9.059-8.36a2.12 2.12 0 0 0-1.421-.543c-.526 0-1.033.194-1.421.544l-5.684 5.268c.745.271 1.414.71 1.952 1.282.539.572.933 1.26 1.149 2.01h7.673a.73.73 0 0 1 .504.204.69.69 0 0 1 .207.494v1.147a.68.68 0 0 1-.207.494.72.72 0 0 1-.504.204h-.886v1.623a.68.68 0 0 1-.205.494.72.72 0 0 1-.503.205h-1.945a.73.73 0 0 1-.503-.205.69.69 0 0 1-.205-.494v-1.623h-3.426a4.84 4.84 0 0 1-1.135 2.033 5 5 0 0 1-1.966 1.287l5.71 5.276c.388.349.895.543 1.421.543a2.12 2.12 0 0 0 1.421-.543l9.043-8.355a2.03 2.03 0 0 0-.01-2.985"})),je||(je=s.createElement("path",{fill:"#D40101",d:"M130.683 9.867a2.6 2.6 0 0 0-1.064.253c-.371.18-.686.455-.913.794a2.242 2.242 0 0 0-.113 2.305 2.3 2.3 0 0 0 .831.877 2.36 2.36 0 0 0 2.355.059c.362-.197.664-.484.875-.833a2.24 2.24 0 0 0 .324-1.153 2.21 2.21 0 0 0-.653-1.625 2.3 2.3 0 0 0-.751-.5 2.3 2.3 0 0 0-.891-.177"})))};class Fe extends s.Component{constructor(e){super(e),this.state=this.defaultState,this.userId=null,this.token=null,this.initializeProperties()}get defaultState(){return{siteSettings:null,trustedDomain:this.baseUrl,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,onUpdateLocaleRequested:this.onUpdateLocaleRequested.bind(this)}}async componentDidMount(){await this.getSiteSettings(),this.initLocale()}initializeProperties(){const e="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}",t=new RegExp(`(setup/recover|setup/recover/start)/(${e})/(${e})$`),r=window.location.pathname.match(t);r?(this.userId=r[2],this.token=r[3]):console.error("Unable to retrieve the user id and token from the url")}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ie).setBaseUrl(this.state.trustedDomain)}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new b(e),{body:r}=await t.findAll(),s=new ve(r);await this.setState({siteSettings:s})}initLocale(){const e=this.getUrlLocale()||this.getBrowserLocale()||this.getBrowserSimilarLocale()||this.state.siteSettings.locale;this.setState({locale:e})}getUrlLocale(){const e=new URL(window.location.href).searchParams.get("locale");if(e){const t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale);if(t)return t.locale}}getBrowserLocale(){const e=this.state.siteSettings.supportedLocales.find(e=>navigator.language===e.locale);if(e)return e.locale}getBrowserSimilarLocale(){const e=navigator.language.split("-")[0],t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale.split("-")[0]);if(t)return t.locale}async onUpdateLocaleRequested(e){await this.setState({locale:e}),this.setUrlLocale(e)}setUrlLocale(e){const t=new URL(window.location.href);t.searchParams.set("locale",e),window.history.replaceState(null,null,t)}isReady(){return null!==this.state.siteSettings&&null!==this.state.locale}render(){return s.createElement(l.Provider,{value:this.state},this.isReady()&&s.createElement(xe,{loadingPath:`${this.state.trustedDomain}/locales/{{lng}}/{{ns}}.json`},s.createElement(O,{value:{userId:this.userId,token:this.token}},s.createElement("div",{id:"container",className:"container page login"},s.createElement("div",{className:"content"},s.createElement("div",{className:"header"},s.createElement("div",{className:"logo-svg"},s.createElement(Me,{role:"img",width:"20rem",height:"3.5rem"}))),s.createElement("div",{className:"login-form"},s.createElement(ae,null)),s.createElement(Ae,null)),s.createElement(me,null)))))}}const Ve=Fe,qe=document.createElement("div");document.body.appendChild(qe),n.render(s.createElement(Ve,null),qe)}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return s[e].call(r.exports,r,r.exports,o),r.exports}o.m=s,e=[],o.O=(t,r,s,n)=>{if(!r){var a=1/0;for(h=0;h<e.length;h++){for(var[r,s,n]=e[h],i=!0,l=0;l<r.length;l++)(!1&n||a>=n)&&Object.keys(o.O).every(e=>o.O[e](r[l]))?r.splice(l--,1):(i=!1,n<a&&(a=n));if(i){e.splice(h--,1);var c=s();void 0!==c&&(t=c)}}return t}n=n||0;for(var h=e.length;h>0&&e[h-1][2]>n;h--)e[h]=e[h-1];e[h]=[r,s,n]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,s){if(1&s&&(e=this(e)),8&s)return e;if("object"==typeof e&&e){if(4&s&&e.__esModule)return e;if(16&s&&"function"==typeof e.then)return e}var n=Object.create(null);o.r(n);var a={};t=t||[null,r({}),r([]),r(r)];for(var i=2&s&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>a[t]=()=>e[t]);return a.default=()=>e,o.d(n,a),n},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.e=()=>Promise.resolve(),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),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.j=478,(()=>{var e={478:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var s,n,[a,i,l]=r,c=0;if(a.some(t=>0!==e[t])){for(s in i)o.o(i,s)&&(o.m[s]=i[s]);if(l)var h=l(o)}for(t&&t(r);c<a.length;c++)n=a[c],o.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return o.O(h)},r=self.webpackChunkpassbolt_styleguide=self.webpackChunkpassbolt_styleguide||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var a=o.O(void 0,[847],()=>o(7594));a=o.O(a)})();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see api-setup.js.LICENSE.txt */
|
|
2
|
-
(()=>{"use strict";var e,t,s,r={576:(e,t,s)=>{var r=s(6540),n=s(961);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},a.apply(null,arguments)}const o=r.createContext({user:null,users:null,roles:null,rememberMeOptions:{},resources:null,resource:null,shareResources:null,selectedResources:null,selectedUser:null,folders:null,resourceCommentId:null,mustRefreshComments:!1,siteSettings:null,userSettings:null,onCheckIsAuthenticatedRequested:null});function i(e){return class extends r.Component{render(){return r.createElement(o.Consumer,null,t=>r.createElement(e,a({context:t},this.props)))}}}const l=o;var c=s(5556),u=s.n(c);class h extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const d=h;class p extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const m=p;class g extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const f=g,E=["GET","POST","PUT","DELETE"];class b{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.",{cause:e})}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}async buildFetchOptions(){const e=await this.options.getHeaders();return{credentials:"include",headers:{...this.getDefaultHeaders(),...e}}}async get(e,t){this.assertValidId(e);const s=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",s)}async delete(e,t,s,r){let n;this.assertValidId(e),void 0===r&&(r=!1),n=r?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,s||{}):this.buildUrl(`${this.baseUrl}/${e}`,s||{});let a=null;return t&&(a=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",n,a)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return this.fetchAndHandleResponse("GET",t)}async create(e,t){const s=this.buildUrl(this.baseUrl.toString(),t||{}),r=this.buildBody(e);return this.fetchAndHandleResponse("POST",s,r)}async update(e,t,s,r){let n;this.assertValidId(e),void 0===r&&(r=!1),n=r?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,s||{}):this.buildUrl(`${this.baseUrl}/${e}`,s||{});let a=null;return t&&(a=this.buildBody(t)),this.fetchAndHandleResponse("PUT",n,a)}async updateAll(e,t={}){const s=this.buildUrl(this.baseUrl.toString(),t),r=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",s,r)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(E.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if(!(e instanceof FormData)&&"string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string or a FormData.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const s=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,r]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof r)s.searchParams.append(e,r);else{if(!Array.isArray(r))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");r.forEach(t=>{s.searchParams.append(e,t)})}}return s}async sendRequest(e,t,s,r){this.assertUrl(t),this.assertMethod(e),s&&this.assertBody(s);const n="undefined"!=typeof customApiClientFetch?customApiClientFetch:fetch,a={...await this.buildFetchOptions(),...r};a.method=e,s&&(a.body=s);try{return await n(t.toString(),a)}catch(e){throw console.error(e),navigator.onLine?new f("Unable to reach the server, an unexpected error occurred"):new f("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,s,r){const n=await this.sendRequest(e,t,s,r);return this.parseResponseJson(n)}async parseResponseJson(e){let t;try{t=await e.json()}catch(t){throw console.debug(e.url.toString(),t),new m(t,e)}if(!e.ok){const s=t.header.message;throw new d(s,{code:e.status,body:t.body})}return t}}const v="chrome",w="edge",y="firefox";function S(){const e=window.navigator.userAgent.toLowerCase();let t;return t=e.indexOf("firefox")>-1?y:e.indexOf("samsungbrowser")>-1?"samsung":e.indexOf("opera")>-1||e.indexOf("opr")>-1?"opera":e.indexOf("trident")>-1?"internet-explorer":e.indexOf("edg")>-1?w:e.indexOf("chrome")>-1?v:e.indexOf("safari")>-1?"safari":"unknown",t}const x=class{constructor(e){e.setResourceName("auth"),this.apiClient=new b(e)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new d("An unexpected error happened during the legacy logout process",{code:t.status})}};function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},T.apply(null,arguments)}const C=r.createContext({userId:null,token:null,state:null,unexpectedError:null,onInitializeSetupRequested:()=>{},logoutUserAndRefresh:()=>{}});class R extends r.Component{constructor(e){super(e),this.state=Object.assign(this.defaultState,e.value),this.authLogoutService=new x(e.context.getApiClientOptions())}get defaultState(){return{userId:null,token:null,state:L.INITIAL_STATE,unexpectedError:null,onInitializeSetupRequested:this.onInitializeSetupRequested.bind(this),logoutUserAndRefresh:this.logoutUserAndRefresh.bind(this)}}async onInitializeSetupRequested(){return this.state.userId&&this.state.token?this.isBrowserSupported()?void await this.startSetup().then(this.handleStartSetupSuccess.bind(this)).catch(this.handleStartSetupError.bind(this)):this.setState({state:L.DOWNLOAD_SUPPORTED_BROWSER_STATE}):this.setState({state:L.REQUEST_INVITATION_ERROR})}handleStartSetupSuccess(){this.setState({state:L.INSTALL_EXTENSION_STATE})}async logoutUserAndRefresh(){try{await this.authLogoutService.logout()}catch(e){const t=new f(e.message);return this.setState({unexpectedError:t,state:L.UNEXPECTED_ERROR_STATE})}window.location.reload()}handleStartSetupError(e){if(e instanceof d){if(403===e.data.code)return this.setState({state:L.ERROR_ALREADY_SIGNED_IN_STATE});const t=Boolean(e.data.body?.token?.expired),s=Boolean(e.data.body?.token?.isActive);if(t||s)return this.setState({state:L.TOKEN_EXPIRED_STATE});if(400===e?.data?.code)return this.setState({state:L.REQUEST_INVITATION_ERROR})}return this.setState({state:L.UNEXPECTED_ERROR_STATE})}isBrowserSupported(){const e=S();return[v,y,w].includes(e)}async startSetup(){const e=this.props.context.getApiClientOptions();e.setResourceName("setup");const t=new b(e),{body:s}=await t.get(`install/${this.state.userId}/${this.state.token}`);return s}render(){return r.createElement(C.Provider,{value:this.state},this.props.children)}}R.propTypes={context:u().any,value:u().any,children:u().any};const O=i(R);function k(e){return class extends r.Component{render(){return r.createElement(C.Consumer,null,t=>r.createElement(e,T({apiSetupContext:t},this.props)))}}}const L={INITIAL_STATE:"Initial state",DOWNLOAD_SUPPORTED_BROWSER_STATE:"Download supported browser state",INSTALL_EXTENSION_STATE:"Install extension state",TOKEN_EXPIRED_STATE:"Token expired state",ERROR_ALREADY_SIGNED_IN_STATE:"Error, already signed in state",REQUEST_INVITATION_ERROR:"Request inviration error state",UNEXPECTED_ERROR_STATE:"Unexpected error state"};class N{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.",{cause:e})}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}async getHeaders(){const e=await this.getCsrfToken();if(e)return{"X-CSRF-Token":e}}async getCsrfToken(){if("undefined"==typeof browser||void 0===browser.cookies){const e=document?.cookie?.split("; ")?.find(e=>e.startsWith("csrfToken"))?.split("=");return e&&2===e.length?e[1]:null}const e=this.baseUrl.toString(),t="/"===e.slice(-1)?e:`${e}/`,s=await browser.cookies.get({name:"csrfToken",url:t});return s?.value||null}}var U,I,A=s(2389);function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},D.apply(null,arguments)}const P=function(e){return r.createElement("svg",D({width:18,height:18,fill:"none",className:"svg-icon spinner",viewBox:"0 0 18 18"},e),U||(U=r.createElement("circle",{id:"background",cx:8,cy:8,r:8,fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(1 1)"})),I||(I=r.createElement("circle",{id:"loading",r:8,fill:"none",stroke:"var(--spinner-color)",strokeLinecap:"round",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(9 9)"})))};class _ extends r.Component{render(){return r.createElement("div",{className:"login-processing"},r.createElement("h1",null,this.props.title),r.createElement("div",{className:"processing-wrapper"},r.createElement(P,null)))}}_.propTypes={title:u().oneOfType([u().arrayOf(u().node),u().node,u().string])},_.defaultProps={title:r.createElement(A.x6,null,"Please wait...")};const B=(0,A.CI)("common")(_),j="https://chrome.google.com/webstore/detail/passbolt-extension/didegimhafipceonhjepacocaffmoppf";class $ extends r.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return{browserName:S(),theme:e}}bindCallbacks(){this.handleRefreshClick=this.handleRefreshClick.bind(this)}get browserStoreThumbnailUrl(){const e="dark"===this.state.theme?"white":"black";switch(this.state.browserName){case y:return`${this.props.context.trustedDomain}/img/third_party/FirefoxAMO_${e}.svg`;case w:return`${this.props.context.trustedDomain}/img/third_party/edge-addon-${e}.svg`;default:return`${this.props.context.trustedDomain}/img/third_party/ChromeWebStore_${e}.svg`}}get storeUrl(){switch(this.state.browserName){case v:return j;case y:return"https://addons.mozilla.org/firefox/addon/passbolt";case w:return"https://microsoftedge.microsoft.com/addons/detail/passbolt-extension/ljeppgjhohmhpbdhjjjbiflabdgfkhpo";default:return j}}get storeClassName(){return`browser-webstore ${this.state.browserName}`}handleRefreshClick(){window.location.reload()}render(){return r.createElement("div",{className:"install-extension"},r.createElement("h1",null,r.createElement(A.x6,null,"Please install the browser extension.")),r.createElement("p",null,r.createElement(A.x6,null,"Please download the browser extension and refresh this page to continue.")),this.state.browserName&&r.createElement("a",{href:this.storeUrl,className:this.storeClassName,target:"_blank",rel:"noopener noreferrer"},r.createElement("img",{src:this.browserStoreThumbnailUrl,alt:"browser store thumbnail"})),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:this.storeUrl,className:"button primary big full-width",role:"button",target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Download extension")),r.createElement("button",{className:"link",type:"button",onClick:this.handleRefreshClick},r.createElement(A.x6,null,"Refresh to detect extension"))))}}$.propTypes={context:u().any};const M=i((0,A.CI)("common")($));class F extends r.Component{constructor(e){super(e),this.state=this.getDefaultState()}getDefaultState(){return{selectedBrowser:this.compatibleBrowserList[0]}}handleBrowserButtonClick(e){this.setState({selectedBrowser:e})}get compatibleBrowserList(){return[{name:"Mozilla Firefox",img:"firefox.svg",url:"https://www.mozilla.org/"},{name:"Google Chrome",img:"chrome.svg",url:"https://www.google.com/chrome/"},{name:"Microsoft Edge",img:"edge.svg",url:"https://www.microsoft.com/edge"},{name:"Brave",img:"brave.svg",url:"https://www.brave.com/"},{name:"Vivaldi",img:"vivaldi.svg",url:"https://www.vivaldi.com/"}]}render(){return r.createElement("div",{className:"browser-not-supported"},r.createElement("h1",null,r.createElement(A.x6,null,"Sorry, your browser is not supported.")),r.createElement("p",null,r.createElement(A.x6,null,"Please download one of these browsers to get started with passbolt:")),r.createElement("div",{className:"browser-button-list"},this.compatibleBrowserList.map((e,t)=>r.createElement("button",{key:t,className:"browser"+(e.name===this.state.selectedBrowser.name?" focused":""),target:"_blank",onClick:()=>this.handleBrowserButtonClick(e)},r.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.img}`})))),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:this.state.selectedBrowser.url,rel:"noopener noreferrer",className:"button primary big full-width",role:"button",target:"_blank"},r.createElement(A.x6,null,"Download ",{browserName:this.state.selectedBrowser.name}))))}}F.propTypes={context:u().any};const V=i((0,A.CI)("common")(F));class q extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"Access to this service requires an invitation.")),r.createElement("p",null,r.createElement(A.x6,null,"This email is not associated with any approved users on this domain.")," ",r.createElement(A.x6,null,"Please contact your administrator to request an invitation link.")),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Try with another email"))))}}q.propTypes={context:u().any};const z=i((0,A.CI)("common")(q));class H extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"The invitation is expired.")),r.createElement("p",null,r.createElement(A.x6,null,"You can request another invitation email by clicking on the button below.")),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Request invitation"))))}}H.propTypes={context:u().any};const W=i((0,A.CI)("common")(H)),K="setup",X="recover",G="account-recovery";class J extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"Cannot perform the action while being logged in")),r.createElement("p",null,{[K]:r.createElement(A.x6,null,"It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing."),[X]:r.createElement(A.x6,null,"It is not possible to perform the recovery of your account as you are still logged in. You need to log out first before continuing."),[G]:r.createElement(A.x6,null,"It is not possible to recover your private key of your account as you are still logged in. You need to log out first before continuing.")}[this.props.displayAs]),r.createElement("div",{className:"form-actions"},r.createElement("button",{onClick:this.props.onLogoutButtonClick.bind(this),className:"button primary big full-width",role:"button"},r.createElement(A.x6,null,"Sign out"))))}}J.propTypes={displayAs:u().oneOf([K,X,G]).isRequired,onLogoutButtonClick:u().func.isRequired};const Y=(0,A.CI)("common")(J);var Q;function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},Z.apply(null,arguments)}const ee=function(e){return r.createElement("svg",Z({xmlns:"http://www.w3.org/2000/svg",width:10,height:8,fill:"none",viewBox:"0 0 10 8"},e),Q||(Q=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m1 2 4 4 4-4"})))};var te;function se(){return se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},se.apply(null,arguments)}const re=function(e){return r.createElement("svg",se({xmlns:"http://www.w3.org/2000/svg",width:8,height:10,fill:"none",viewBox:"0 0 8 10"},e),te||(te=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m2 9 4-4-4-4"})))};class ne extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}onClick(){this.props.context.port?this.props.context.port.request("passbolt.tab.reload"):window.location.reload()}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){const e=this.props?.error;return Boolean(e?.details)||Boolean(e?.data?.body)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,this.props.title),r.createElement("p",null,this.props.message),r.createElement("p",null,this.props.error&&this.props.error.message),this.hasErrorDetails&&r.createElement("div",{className:"accordion error-details"},r.createElement("div",{className:"accordion-header"},r.createElement("button",{className:"no-border",type:"button",onClick:this.handleErrorDetailsToggle},this.state.showErrorDetails?r.createElement(ee,{className:"caret-down"}):r.createElement(re,{className:"caret-right"}),r.createElement("span",null,r.createElement(A.x6,null,"Error details")))),this.state.showErrorDetails&&r.createElement("div",{className:"accordion-content"},r.createElement("div",{className:"input text"},r.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},r.createElement(A.x6,null,"Error details")),r.createElement("textarea",{id:"js_field_debug",defaultValue:`${this.formatErrors()}`,readOnly:!0})))),r.createElement("div",{className:"form-actions"},r.createElement("button",{onClick:this.onClick.bind(this),className:"button primary big full-width",role:"button"},r.createElement(A.x6,null,"Try again"))))}}ne.defaultProps={title:r.createElement(A.x6,null,"Something went wrong!"),message:r.createElement(A.x6,null,"The operation failed with the following error:")},ne.propTypes={context:u().any,title:u().oneOfType([u().arrayOf(u().node),u().node,u().string]),message:u().oneOfType([u().arrayOf(u().node),u().node,u().string]),error:u().any};const ae=i((0,A.CI)("common")(ne));class oe extends r.Component{componentDidMount(){this.initializeSetup()}initializeSetup(){setTimeout(()=>this.props.apiSetupContext.onInitializeSetupRequested(),1e3)}render(){switch(this.props.apiSetupContext.state){case L.INSTALL_EXTENSION_STATE:return r.createElement(M,null);case L.DOWNLOAD_SUPPORTED_BROWSER_STATE:return r.createElement(V,null);case L.TOKEN_EXPIRED_STATE:return r.createElement(W,null);case L.ERROR_ALREADY_SIGNED_IN_STATE:return r.createElement(Y,{onLogoutButtonClick:this.props.apiSetupContext.logoutUserAndRefresh,displayAs:K});case L.REQUEST_INVITATION_ERROR:return r.createElement(z,null);case L.UNEXPECTED_ERROR_STATE:return r.createElement(ae,{error:this.props.apiSetupContext.unexpectedError});default:return r.createElement(B,null)}}}oe.propTypes={apiSetupContext:u().object};const ie=k(oe);var le;function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},ce.apply(null,arguments)}const ue=function(e){return r.createElement("svg",ce({xmlns:"http://www.w3.org/2000/svg",width:17,height:16,fill:"none",viewBox:"0 0 17 16"},e),le||(le=r.createElement("g",{clipPath:"url(#heart_svg__clip0_93_734678)"},r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13.497 9.333c.993-.973 2-2.14 2-3.666A3.667 3.667 0 0 0 11.83 2c-1.173 0-2 .333-3 1.333-1-1-1.827-1.333-3-1.333a3.667 3.667 0 0 0-3.667 3.667c0 1.533 1 2.7 2 3.666L8.83 14z"}))))};class he extends r.Component{render(){return r.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,r.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}he.defaultProps={direction:"right"},he.propTypes={children:u().any,message:u().any.isRequired,direction:u().string};const de=he;class pe extends r.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://www.passbolt.com/docs/hosting/faq/why-I-see-unsafe-mode-banner/"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return r.createElement("footer",{className:"footer"},r.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&r.createElement("li",{className:"error-message"},r.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Unsafe mode"))),this.termsUrl&&r.createElement("li",null,r.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Terms"))),this.privacyUrl&&r.createElement("li",null,r.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Privacy"))),r.createElement("li",null,r.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Credits"))),r.createElement("li",null,this.versions&&r.createElement(de,{message:this.versions,direction:"left"},r.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(ue,null))),!this.versions&&r.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(ue,null)))))}}pe.propTypes={context:u().any,t:u().func};const me=i((0,A.CI)("common")(pe));var ge=s(5648);const fe=(e,t)=>t.split(".").reduce((e,t)=>e?.[t],e),Ee=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const s=t.whitelistedProtocols||[be.HTTP,be.HTTPS],r=[be.JAVASCRIPT],n=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&n&&(e=`${n}//${e}`);try{const t=new URL(e);return!r.includes(t.protocol)&&!!s.includes(t.protocol)&&t.href}catch(e){return console.error("Failed to sanitize URL:",e),!1}},be={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class ve{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const s=`passbolt.plugins.${e}`,r=fe(this.settings,s)||null;if(r&&"object"==typeof r){const e=fe(r,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}isFeatureBeta(e){(0,ge.A)(e);const t=`passbolt.plugins.${e}.isInBeta`;return fe(this.settings,t)||!1}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return fe(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return fe(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=fe(this.settings,"passbolt.legal.terms.url");return!!e&&Ee(e)}get privacyLink(){const e=fe(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Ee(e)}get registrationPublic(){return!0===fe(this.settings,"passbolt.registration.public")}get debug(){return!0===fe(this.settings,"app.debug")}get url(){return fe(this.settings,"app.url")||""}get version(){return fe(this.settings,"app.version.number")}get isCommunityEdition(){return"ce"===fe(this.settings,"passbolt.edition")}get locale(){return fe(this.settings,"app.locale")||ve.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return fe(this.settings,"passbolt.plugins.locale.options")||ve.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return fe(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[ve.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}var we=s(2635),ye=s(1347);class Se extends r.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await we.Ay.use(A.r9).use(ye.A).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:(e,t)=>this.getTranslationPath(e,t)},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}getTranslationPath(e,t){const s=e[0],r=t[0],n="en-GB"===s?"en-UK":s;return(this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json").replace("{{lng}}",n).replace("{{ns}}",r)}get supportedLocales(){let e=[];return this.props.context.siteSettings?.supportedLocales?e=this.props.context.siteSettings?.supportedLocales.map(e=>e.locale):e.push(this.locale),e.includes("en-UK")&&e.push("en-GB"),e}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await we.Ay.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return r.createElement(r.Fragment,null,this.isReady&&this.props.children)}}Se.propTypes={context:u().any,loadingPath:u().any,children:u().any};const xe=i(Se),Te=new class{allPropTypes=(...e)=>(...t)=>{const s=e.map(e=>e(...t)).filter(Boolean);if(0===s.length)return;const r=s.map(e=>e.message).join("\n");return new Error(r)}};var Ce;function Re(){return Re=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},Re.apply(null,arguments)}const Oe=function(e){return r.createElement("svg",Re({width:25,height:24,fill:"none",viewBox:"0 0 25 24"},e),Ce||(Ce=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M11.597 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16M21.597 21l-4.35-4.35"})))};class ke extends r.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter(e=>e.value!==this.state.selectedValue);return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find(e=>e.value===this.state.selectedValue);return e&&e.label||r.createElement(r.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=r.createRef(),this.selectItemsRef=r.createRef(),this.itemsRef=r.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:s}=e;let{top:r,left:n}=e;const a=this.getFirstParentWithTransform();if(a){const e=a.getBoundingClientRect();r-=e.top,n-=e.left}const o={position:"fixed",zIndex:1,width:t,height:s,top:r,left:n};this.setState({style:o})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,s=t.value,r=t.name;this.setState({[r]:s})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const s=t&&t.split(/\s+/)||[""];return e.filter(e=>s.every(t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return r.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},r.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},r.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},r.createElement("span",{className:"value"},this.selectedItemLabel),r.createElement(ee,null)),r.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&r.createElement(r.Fragment,null,r.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),r.createElement(Oe,{className:"search"})),r.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map(e=>r.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,title:e.title,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label)),!this.hasFilteredItems()&&this.props.search&&r.createElement("li",{className:"option no-results"},r.createElement(A.x6,null,"No results match")," ",r.createElement("span",null,this.state.search))))))}}ke.defaultProps={id:"",name:"select",className:"",direction:"bottom"},ke.propTypes={id:u().string,name:u().string,className:u().string,direction:u().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:u().bool,items:u().array,value:Te.allPropTypes(u().oneOfType([u().string,u().number,u().bool]),(e,t,s)=>{const r=e[t],n=e.items;if(null!==r&&n.length>0&&n.every(e=>e.value!==r))return new Error(`Invalid prop ${t} passed to ${s}. Expected the value ${r} in items.`)}),disabled:u().bool,onChange:u().func};const Le=(0,A.CI)("common")(ke);class Ne extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.bindHandlers()}async componentDidMount(){await this.initLocale()}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.props.context.locale!==e&&await this.setState({locale:this.props.context.locale})}get defaultState(){return{loading:!0,locale:null,processing:!1}}get areActionsAllowed(){return!this.state.processing}bindHandlers(){this.handleLocaleInputChange=this.handleLocaleInputChange.bind(this)}async handleLocaleInputChange(e){const t=e.target.value;await this.updateLocale(t)}async updateLocale(e){await this.toggleProcessing(),await this.props.context.onUpdateLocaleRequested(e),await this.toggleProcessing()}async initLocale(){await this.setState({locale:this.props.context.locale,loading:!1})}async toggleProcessing(){const e=this.state.processing;return this.setState({processing:!e})}isLoading(){return this.state.loading}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map(e=>({value:e.locale,label:e.label})):[]}render(){return r.createElement(r.Fragment,null,!this.isLoading()&&r.createElement("div",{className:"select-wrapper input"},r.createElement(Le,{id:"user-locale-input",className:"setup-extension",name:"locale",value:this.state.locale,disabled:!this.areActionsAllowed,items:this.supportedLocales,onChange:this.handleLocaleInputChange})))}}Ne.propTypes={context:u().any};const Ue=i(Ne);class Ie extends r.Component{get statesToHideLocaleSwitch(){return[L.INITIAL_STATE]}get mustDisplayLocaleSwitch(){return!this.statesToHideLocaleSwitch.includes(this.props.apiSetupContext.state)}render(){return r.createElement(r.Fragment,null,this.mustDisplayLocaleSwitch&&r.createElement(Ue,null))}}Ie.propTypes={apiSetupContext:u().any};const Ae=k(Ie);var De,Pe,_e,Be,je;function $e(){return $e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},$e.apply(null,arguments)}const Me=function(e){return r.createElement("svg",$e({xmlns:"http://www.w3.org/2000/svg",width:151,height:27,fill:"none","aria-labelledby":"logo-title logo-description",viewBox:"0 0 151 27"},e),De||(De=r.createElement("title",{id:"logo-title"},"Passbolt logo")),Pe||(Pe=r.createElement("desc",{id:"logo-description"},"This is the logo of passbolt.")),_e||(_e=r.createElement("path",{fill:"var(--icon-color)",d:"M4.648 9.234v8.607h2.48c1.646 0 2.786-.349 3.47-1.012.685-.664 1.013-1.823 1.013-3.395 0-1.52-.305-2.595-.938-3.218-.633-.673-1.695-.972-3.24-.972zM.597 5.963h7.797c2.357 0 4.178.676 5.496 2.048q1.976 2.058 1.974 5.689a8.6 8.6 0 0 1-.406 2.749 7.1 7.1 0 0 1-1.24 2.278 5.9 5.9 0 0 1-2.38 1.773c-.937.349-2.152.524-3.697.524H4.648V26.5H.597zM24.016 18.016h5.064v-3.119h-4.76c-.937 0-1.594.124-1.95.375-.357.25-.517.698-.517 1.321 0 .524.15.899.429 1.122.28.223.848.301 1.734.301M18.649 5.963h8.268c2.103 0 3.672.476 4.736 1.423 1.065.947 1.594 2.347 1.594 4.217v9.456H22.37c-1.52 0-2.708-.375-3.52-1.121-.81-.747-1.2-1.823-1.2-3.22 0-1.722.454-2.945 1.392-3.692s2.483-1.134 4.697-1.134h5.315v-.365c0-.898-.276-1.518-.809-1.896-.532-.377-1.47-.55-2.86-.55H18.65zM36.55 17.915h8.525c.76 0 1.318-.124 1.646-.35.183-.122.328-.29.423-.486.094-.197.134-.414.115-.63a1.2 1.2 0 0 0-.112-.632 1.24 1.24 0 0 0-.42-.492c-.355-.253-.91-.374-1.646-.374h-3.494c-2.067 0-3.467-.325-4.203-.947-.737-.623-1.088-1.747-1.088-3.32 0-1.62.431-2.82 1.318-3.592.886-.772 2.255-1.152 4.064-1.152h8.684v3.142h-7.134q-1.75 0-2.279.301c-.354.198-.532.547-.532 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.676c1.672 0 2.961.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.405 2.53-1.188 3.417-.37.427-.833.768-1.354.996-.522.23-1.09.34-1.661.325H36.549zM53.822 17.915h8.526c.76 0 1.318-.124 1.646-.35a1.23 1.23 0 0 0 .42-.487c.093-.196.132-.413.112-.629a1.2 1.2 0 0 0-.111-.632 1.24 1.24 0 0 0-.421-.492c-.354-.253-.91-.374-1.646-.374h-3.493c-2.067 0-3.467-.325-4.204-.947-.736-.623-1.088-1.752-1.088-3.324 0-1.62.432-2.82 1.318-3.593.886-.772 2.253-1.147 4.075-1.147h8.686v3.142h-7.141q-1.747 0-2.28.301c-.353.198-.531.547-.531 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.671c1.672 0 2.963.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.403 2.53-1.188 3.417-.37.427-.832.767-1.354.996a3.9 3.9 0 0 1-1.66.325H53.769v-3.106zM75.387.5v5.463h3.47c1.55 0 2.759.175 3.694.55.946.362 1.77.976 2.38 1.772a7.2 7.2 0 0 1 1.243 2.296c.281.888.417 1.814.403 2.744q0 3.63-1.974 5.689c-1.315 1.372-3.14 2.046-5.493 2.046h-7.8V.5zm2.462 8.734h-2.483v8.608h2.785c1.55 0 2.633-.324 3.243-.95s.935-1.721.935-3.268-.354-2.694-1.033-3.367c-.68-.673-1.832-1.023-3.447-1.023M92.3 13.525c0 1.445.328 2.532 1.013 3.367s1.62 1.198 2.86 1.198 2.152-.398 2.863-1.198 1.033-1.921 1.033-3.367-.356-2.547-1.033-3.344c-.677-.798-1.62-1.198-2.863-1.198a3.64 3.64 0 0 0-1.57.279 3.6 3.6 0 0 0-1.29.919c-.685.797-1.013 1.921-1.013 3.344m12.002 0q0 3.544-2.202 5.689c-1.47 1.397-3.42 2.121-5.901 2.121s-4.457-.699-5.924-2.121-2.202-3.292-2.202-5.664q0-3.558 2.202-5.69c1.467-1.424 3.444-2.145 5.919-2.145s4.431.724 5.901 2.144 2.207 3.294 2.207 5.666M110.935 21.06h-4.202V.5h4.202zM112.884 5.963h2.86V.5h4.052v5.463h4.278v3.02h-4.278v6.09c0 1.12.204 1.895.581 2.343.377.449 1.064.649 2.026.649h1.671v3.02h-3.72c-1.494 0-2.636-.4-3.444-1.223-.809-.823-1.189-1.995-1.189-3.519v-7.36h-2.863v-3.02z"})),Be||(Be=r.createElement("path",{fill:"#D40101",d:"m149.951 10.68-9.059-8.36a2.12 2.12 0 0 0-1.421-.543c-.526 0-1.033.194-1.421.544l-5.684 5.268c.745.271 1.414.71 1.952 1.282.539.572.933 1.26 1.149 2.01h7.673a.73.73 0 0 1 .504.204.69.69 0 0 1 .207.494v1.147a.68.68 0 0 1-.207.494.72.72 0 0 1-.504.204h-.886v1.623a.68.68 0 0 1-.205.494.72.72 0 0 1-.503.205h-1.945a.73.73 0 0 1-.503-.205.69.69 0 0 1-.205-.494v-1.623h-3.426a4.84 4.84 0 0 1-1.135 2.033 5 5 0 0 1-1.966 1.287l5.71 5.276c.388.349.895.543 1.421.543a2.12 2.12 0 0 0 1.421-.543l9.043-8.355a2.03 2.03 0 0 0-.01-2.985"})),je||(je=r.createElement("path",{fill:"#D40101",d:"M130.683 9.867a2.6 2.6 0 0 0-1.064.253c-.371.18-.686.455-.913.794a2.242 2.242 0 0 0-.113 2.305 2.3 2.3 0 0 0 .831.877 2.36 2.36 0 0 0 2.355.059c.362-.197.664-.484.875-.833a2.24 2.24 0 0 0 .324-1.153 2.21 2.21 0 0 0-.653-1.625 2.3 2.3 0 0 0-.751-.5 2.3 2.3 0 0 0-.891-.177"})))};class Fe extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.userId=null,this.token=null,this.initializeProperties()}get defaultState(){return{siteSettings:null,trustedDomain:this.baseUrl,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,onUpdateLocaleRequested:this.onUpdateLocaleRequested.bind(this)}}async componentDidMount(){await this.getSiteSettings(),this.initLocale()}initializeProperties(){const e="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}",t=new RegExp(`setup/(install|start)/(${e})/(${e})$`),s=window.location.pathname.match(t);s?(this.userId=s[2],this.token=s[3]):console.error("Unable to retrieve the user id and token from the url")}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new N).setBaseUrl(this.state.trustedDomain)}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new b(e),{body:s}=await t.findAll(),r=new ve(s);await this.setState({siteSettings:r})}initLocale(){const e=this.getUrlLocale()||this.getBrowserLocale()||this.getBrowserSimilarLocale()||this.state.siteSettings.locale;this.setState({locale:e}),this.setUrlLocale(e)}getUrlLocale(){const e=new URL(window.location.href).searchParams.get("locale");if(e){const t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale);if(t)return t.locale}}getBrowserLocale(){const e=this.state.siteSettings.supportedLocales.find(e=>navigator.language===e.locale);if(e)return e.locale}getBrowserSimilarLocale(){const e=navigator.language.split("-")[0],t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale.split("-")[0]);if(t)return t.locale}async onUpdateLocaleRequested(e){await this.setState({locale:e}),this.setUrlLocale(e)}setUrlLocale(e){const t=new URL(window.location.href);t.searchParams.set("locale",e),window.history.replaceState(null,null,t)}isReady(){return null!==this.state.siteSettings&&null!==this.state.locale}render(){return r.createElement(l.Provider,{value:this.state},this.isReady()&&r.createElement(xe,{loadingPath:`${this.state.trustedDomain}/locales/{{lng}}/{{ns}}.json`},r.createElement(O,{value:{userId:this.userId,token:this.token}},r.createElement("div",{id:"container",className:"container page login"},r.createElement("div",{className:"content"},r.createElement("div",{className:"header"},r.createElement("div",{className:"logo-svg"},r.createElement(Me,{role:"img",width:"20rem",height:"3.5rem"}))),r.createElement("div",{className:"login-form"},r.createElement(ie,null)),r.createElement(Ae,null)),r.createElement(me,null)))))}}const Ve=Fe,qe=document.createElement("div");document.body.appendChild(qe),n.render(r.createElement(Ve,null),qe)}},n={};function a(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e].call(s.exports,s,s.exports,a),s.exports}a.m=r,e=[],a.O=(t,s,r,n)=>{if(!s){var o=1/0;for(u=0;u<e.length;u++){for(var[s,r,n]=e[u],i=!0,l=0;l<s.length;l++)(!1&n||o>=n)&&Object.keys(a.O).every(e=>a.O[e](s[l]))?s.splice(l--,1):(i=!1,n<o&&(o=n));if(i){e.splice(u--,1);var c=r();void 0!==c&&(t=c)}}return t}n=n||0;for(var u=e.length;u>0&&e[u-1][2]>n;u--)e[u]=e[u-1];e[u]=[s,r,n]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},s=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var n=Object.create(null);a.r(n);var o={};t=t||[null,s({}),s([]),s(s)];for(var i=2&r&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=s(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,a.d(n,o),n},a.d=(e,t)=>{for(var s in t)a.o(t,s)&&!a.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},a.e=()=>Promise.resolve(),a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.j=793,(()=>{var e={793:0};a.O.j=t=>0===e[t];var t=(t,s)=>{var r,n,[o,i,l]=s,c=0;if(o.some(t=>0!==e[t])){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);if(l)var u=l(a)}for(t&&t(s);c<o.length;c++)n=o[c],a.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return a.O(u)},s=self.webpackChunkpassbolt_styleguide=self.webpackChunkpassbolt_styleguide||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))})();var o=a.O(void 0,[847],()=>a(576));o=a.O(o)})();
|
|
2
|
+
(()=>{"use strict";var e,t,s,r={576:(e,t,s)=>{var r=s(6540),n=s(961);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},a.apply(null,arguments)}const o=r.createContext({user:null,users:null,roles:null,rememberMeOptions:{},resources:null,resource:null,shareResources:null,selectedResources:null,selectedUser:null,folders:null,resourceCommentId:null,mustRefreshComments:!1,siteSettings:null,userSettings:null,onCheckIsAuthenticatedRequested:null});function i(e){return class extends r.Component{render(){return r.createElement(o.Consumer,null,t=>r.createElement(e,a({context:t},this.props)))}}}const l=o;var c=s(5556),u=s.n(c);class h extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const d=h;class p extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const m=p;class g extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const f=g,E=["GET","POST","PUT","DELETE"];class b{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.",{cause:e})}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}async buildFetchOptions(){const e=await this.options.getHeaders();return{credentials:"include",headers:{...this.getDefaultHeaders(),...e}}}async get(e,t){this.assertValidId(e);const s=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",s)}async delete(e,t,s,r){let n;this.assertValidId(e),void 0===r&&(r=!1),n=r?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,s||{}):this.buildUrl(`${this.baseUrl}/${e}`,s||{});let a=null;return t&&(a=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",n,a)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return this.fetchAndHandleResponse("GET",t)}async create(e,t){const s=this.buildUrl(this.baseUrl.toString(),t||{}),r=this.buildBody(e);return this.fetchAndHandleResponse("POST",s,r)}async update(e,t,s,r){let n;this.assertValidId(e),void 0===r&&(r=!1),n=r?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,s||{}):this.buildUrl(`${this.baseUrl}/${e}`,s||{});let a=null;return t&&(a=this.buildBody(t)),this.fetchAndHandleResponse("PUT",n,a)}async updateAll(e,t={}){const s=this.buildUrl(this.baseUrl.toString(),t),r=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",s,r)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(E.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if(!(e instanceof FormData)&&"string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string or a FormData.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const s=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,r]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof r)s.searchParams.append(e,r);else{if(!Array.isArray(r))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");r.forEach(t=>{s.searchParams.append(e,t)})}}return s}async sendRequest(e,t,s,r){this.assertUrl(t),this.assertMethod(e),s&&this.assertBody(s);const n="undefined"!=typeof customApiClientFetch?customApiClientFetch:fetch,a={...await this.buildFetchOptions(),...r};a.method=e,s&&(a.body=s);try{return await n(t.toString(),a)}catch(e){throw console.error(e),navigator.onLine?new f("Unable to reach the server, an unexpected error occurred"):new f("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,s,r){const n=await this.sendRequest(e,t,s,r);return this.parseResponseJson(n)}async parseResponseJson(e){let t;try{t=await e.json()}catch(t){throw console.debug(e.url.toString(),t),new m(t,e)}if(!e.ok){const s=t.header.message;throw new d(s,{code:e.status,body:t.body})}return t}}const v="chrome",w="edge",y="firefox";function S(){const e=window.navigator.userAgent.toLowerCase();let t;return t=e.indexOf("firefox")>-1?y:e.indexOf("samsungbrowser")>-1?"samsung":e.indexOf("opera")>-1||e.indexOf("opr")>-1?"opera":e.indexOf("trident")>-1?"internet-explorer":e.indexOf("edg")>-1?w:e.indexOf("chrome")>-1?v:e.indexOf("safari")>-1?"safari":"unknown",t}const x=class{constructor(e){e.setResourceName("auth"),this.apiClient=new b(e)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new d("An unexpected error happened during the legacy logout process",{code:t.status})}};function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},T.apply(null,arguments)}const C=r.createContext({userId:null,token:null,state:null,unexpectedError:null,onInitializeSetupRequested:()=>{},logoutUserAndRefresh:()=>{}});class R extends r.Component{constructor(e){super(e),this.state=Object.assign(this.defaultState,e.value),this.authLogoutService=new x(e.context.getApiClientOptions())}get defaultState(){return{userId:null,token:null,state:L.INITIAL_STATE,unexpectedError:null,onInitializeSetupRequested:this.onInitializeSetupRequested.bind(this),logoutUserAndRefresh:this.logoutUserAndRefresh.bind(this)}}async onInitializeSetupRequested(){return this.state.userId&&this.state.token?this.isBrowserSupported()?void await this.startSetup().then(this.handleStartSetupSuccess.bind(this)).catch(this.handleStartSetupError.bind(this)):this.setState({state:L.DOWNLOAD_SUPPORTED_BROWSER_STATE}):this.setState({state:L.REQUEST_INVITATION_ERROR})}handleStartSetupSuccess(){this.setState({state:L.INSTALL_EXTENSION_STATE})}async logoutUserAndRefresh(){try{await this.authLogoutService.logout()}catch(e){const t=new f(e.message);return this.setState({unexpectedError:t,state:L.UNEXPECTED_ERROR_STATE})}window.location.reload()}handleStartSetupError(e){if(e instanceof d){if(403===e.data.code)return this.setState({state:L.ERROR_ALREADY_SIGNED_IN_STATE});const t=Boolean(e.data.body?.token?.expired),s=Boolean(e.data.body?.token?.isActive);if(t||s)return this.setState({state:L.TOKEN_EXPIRED_STATE});if(400===e?.data?.code)return this.setState({state:L.REQUEST_INVITATION_ERROR})}return this.setState({state:L.UNEXPECTED_ERROR_STATE})}isBrowserSupported(){const e=S();return[v,y,w].includes(e)}async startSetup(){const e=this.props.context.getApiClientOptions();e.setResourceName("setup");const t=new b(e),{body:s}=await t.get(`install/${this.state.userId}/${this.state.token}`);return s}render(){return r.createElement(C.Provider,{value:this.state},this.props.children)}}R.propTypes={context:u().any,value:u().any,children:u().any};const O=i(R);function k(e){return class extends r.Component{render(){return r.createElement(C.Consumer,null,t=>r.createElement(e,T({apiSetupContext:t},this.props)))}}}const L={INITIAL_STATE:"Initial state",DOWNLOAD_SUPPORTED_BROWSER_STATE:"Download supported browser state",INSTALL_EXTENSION_STATE:"Install extension state",TOKEN_EXPIRED_STATE:"Token expired state",ERROR_ALREADY_SIGNED_IN_STATE:"Error, already signed in state",REQUEST_INVITATION_ERROR:"Request inviration error state",UNEXPECTED_ERROR_STATE:"Unexpected error state"};class N{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.",{cause:e})}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}async getHeaders(){const e=await this.getCsrfToken();if(e)return{"X-CSRF-Token":e}}async getCsrfToken(){if("undefined"==typeof browser||void 0===browser.cookies){const e=document?.cookie?.split("; ")?.find(e=>e.startsWith("csrfToken"))?.split("=");return e&&2===e.length?e[1]:null}const e=this.baseUrl.toString(),t="/"===e.slice(-1)?e:`${e}/`,s=await browser.cookies.get({name:"csrfToken",url:t});return s?.value||null}}var U,I,A=s(2389);function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},D.apply(null,arguments)}const P=function(e){return r.createElement("svg",D({width:18,height:18,fill:"none",className:"svg-icon spinner",viewBox:"0 0 18 18"},e),U||(U=r.createElement("circle",{id:"background",cx:8,cy:8,r:8,fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(1 1)"})),I||(I=r.createElement("circle",{id:"loading",r:8,fill:"none",stroke:"var(--spinner-color)",strokeLinecap:"round",strokeWidth:"var(--spinner-stroke-width)",transform:"translate(9 9)"})))};class _ extends r.Component{render(){return r.createElement("div",{className:"login-processing"},r.createElement("h1",null,this.props.title),r.createElement("div",{className:"processing-wrapper"},r.createElement(P,null)))}}_.propTypes={title:u().oneOfType([u().arrayOf(u().node),u().node,u().string])},_.defaultProps={title:r.createElement(A.x6,null,"Please wait...")};const B=(0,A.CI)("common")(_),j="https://download.passbolt.com/extension/chrome";class $ extends r.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){const e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return{browserName:S(),theme:e}}bindCallbacks(){this.handleRefreshClick=this.handleRefreshClick.bind(this)}get browserStoreThumbnailUrl(){const e="dark"===this.state.theme?"white":"black";switch(this.state.browserName){case y:return`${this.props.context.trustedDomain}/img/third_party/FirefoxAMO_${e}.svg`;case w:return`${this.props.context.trustedDomain}/img/third_party/edge-addon-${e}.svg`;default:return`${this.props.context.trustedDomain}/img/third_party/ChromeWebStore_${e}.svg`}}get storeUrl(){switch(this.state.browserName){case v:return j;case y:return"https://addons.mozilla.org/firefox/addon/passbolt";case w:return"https://microsoftedge.microsoft.com/addons/detail/passbolt-extension/ljeppgjhohmhpbdhjjjbiflabdgfkhpo";default:return j}}get storeClassName(){return`browser-webstore ${this.state.browserName}`}handleRefreshClick(){window.location.reload()}render(){return r.createElement("div",{className:"install-extension"},r.createElement("h1",null,r.createElement(A.x6,null,"Please install the browser extension.")),r.createElement("p",null,r.createElement(A.x6,null,"Please download the browser extension and refresh this page to continue.")),this.state.browserName&&r.createElement("a",{href:this.storeUrl,className:this.storeClassName,target:"_blank",rel:"noopener noreferrer"},r.createElement("img",{src:this.browserStoreThumbnailUrl,alt:"browser store thumbnail"})),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:this.storeUrl,className:"button primary big full-width",role:"button",target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Download extension")),r.createElement("button",{className:"link",type:"button",onClick:this.handleRefreshClick},r.createElement(A.x6,null,"Refresh to detect extension"))))}}$.propTypes={context:u().any};const M=i((0,A.CI)("common")($));class F extends r.Component{constructor(e){super(e),this.state=this.getDefaultState()}getDefaultState(){return{selectedBrowser:this.compatibleBrowserList[0]}}handleBrowserButtonClick(e){this.setState({selectedBrowser:e})}get compatibleBrowserList(){return[{name:"Mozilla Firefox",img:"firefox.svg",url:"https://www.mozilla.org/"},{name:"Google Chrome",img:"chrome.svg",url:"https://www.google.com/chrome/"},{name:"Microsoft Edge",img:"edge.svg",url:"https://www.microsoft.com/edge"},{name:"Brave",img:"brave.svg",url:"https://www.brave.com/"},{name:"Vivaldi",img:"vivaldi.svg",url:"https://www.vivaldi.com/"}]}render(){return r.createElement("div",{className:"browser-not-supported"},r.createElement("h1",null,r.createElement(A.x6,null,"Sorry, your browser is not supported.")),r.createElement("p",null,r.createElement(A.x6,null,"Please download one of these browsers to get started with passbolt:")),r.createElement("div",{className:"browser-button-list"},this.compatibleBrowserList.map((e,t)=>r.createElement("button",{key:t,className:"browser"+(e.name===this.state.selectedBrowser.name?" focused":""),target:"_blank",onClick:()=>this.handleBrowserButtonClick(e)},r.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.img}`})))),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:this.state.selectedBrowser.url,rel:"noopener noreferrer",className:"button primary big full-width",role:"button",target:"_blank"},r.createElement(A.x6,null,"Download ",{browserName:this.state.selectedBrowser.name}))))}}F.propTypes={context:u().any};const V=i((0,A.CI)("common")(F));class q extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"Access to this service requires an invitation.")),r.createElement("p",null,r.createElement(A.x6,null,"This email is not associated with any approved users on this domain.")," ",r.createElement(A.x6,null,"Please contact your administrator to request an invitation link.")),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Try with another email"))))}}q.propTypes={context:u().any};const z=i((0,A.CI)("common")(q));class H extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"The invitation is expired.")),r.createElement("p",null,r.createElement(A.x6,null,"You can request another invitation email by clicking on the button below.")),r.createElement("div",{className:"form-actions"},r.createElement("a",{href:`${this.props.context.trustedDomain}/users/recover`,className:"button primary big full-width",role:"button",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Request invitation"))))}}H.propTypes={context:u().any};const W=i((0,A.CI)("common")(H)),K="setup",X="recover",G="account-recovery";class J extends r.Component{render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,r.createElement(A.x6,null,"Cannot perform the action while being logged in")),r.createElement("p",null,{[K]:r.createElement(A.x6,null,"It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing."),[X]:r.createElement(A.x6,null,"It is not possible to perform the recovery of your account as you are still logged in. You need to log out first before continuing."),[G]:r.createElement(A.x6,null,"It is not possible to recover your private key of your account as you are still logged in. You need to log out first before continuing.")}[this.props.displayAs]),r.createElement("div",{className:"form-actions"},r.createElement("button",{onClick:this.props.onLogoutButtonClick.bind(this),className:"button primary big full-width",role:"button"},r.createElement(A.x6,null,"Sign out"))))}}J.propTypes={displayAs:u().oneOf([K,X,G]).isRequired,onLogoutButtonClick:u().func.isRequired};const Y=(0,A.CI)("common")(J);var Q;function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},Z.apply(null,arguments)}const ee=function(e){return r.createElement("svg",Z({xmlns:"http://www.w3.org/2000/svg",width:10,height:8,fill:"none",viewBox:"0 0 10 8"},e),Q||(Q=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m1 2 4 4 4-4"})))};var te;function se(){return se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},se.apply(null,arguments)}const re=function(e){return r.createElement("svg",se({xmlns:"http://www.w3.org/2000/svg",width:8,height:10,fill:"none",viewBox:"0 0 8 10"},e),te||(te=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"m2 9 4-4-4-4"})))};class ne extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}onClick(){this.props.context.port?this.props.context.port.request("passbolt.tab.reload"):window.location.reload()}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){const e=this.props?.error;return Boolean(e?.details)||Boolean(e?.data?.body)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return r.createElement("div",{className:"setup-error"},r.createElement("h1",null,this.props.title),r.createElement("p",null,this.props.message),r.createElement("p",null,this.props.error&&this.props.error.message),this.hasErrorDetails&&r.createElement("div",{className:"accordion error-details"},r.createElement("div",{className:"accordion-header"},r.createElement("button",{className:"no-border",type:"button",onClick:this.handleErrorDetailsToggle},this.state.showErrorDetails?r.createElement(ee,{className:"caret-down"}):r.createElement(re,{className:"caret-right"}),r.createElement("span",null,r.createElement(A.x6,null,"Error details")))),this.state.showErrorDetails&&r.createElement("div",{className:"accordion-content"},r.createElement("div",{className:"input text"},r.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},r.createElement(A.x6,null,"Error details")),r.createElement("textarea",{id:"js_field_debug",defaultValue:`${this.formatErrors()}`,readOnly:!0})))),r.createElement("div",{className:"form-actions"},r.createElement("button",{onClick:this.onClick.bind(this),className:"button primary big full-width",role:"button"},r.createElement(A.x6,null,"Try again"))))}}ne.defaultProps={title:r.createElement(A.x6,null,"Something went wrong!"),message:r.createElement(A.x6,null,"The operation failed with the following error:")},ne.propTypes={context:u().any,title:u().oneOfType([u().arrayOf(u().node),u().node,u().string]),message:u().oneOfType([u().arrayOf(u().node),u().node,u().string]),error:u().any};const ae=i((0,A.CI)("common")(ne));class oe extends r.Component{componentDidMount(){this.initializeSetup()}initializeSetup(){setTimeout(()=>this.props.apiSetupContext.onInitializeSetupRequested(),1e3)}render(){switch(this.props.apiSetupContext.state){case L.INSTALL_EXTENSION_STATE:return r.createElement(M,null);case L.DOWNLOAD_SUPPORTED_BROWSER_STATE:return r.createElement(V,null);case L.TOKEN_EXPIRED_STATE:return r.createElement(W,null);case L.ERROR_ALREADY_SIGNED_IN_STATE:return r.createElement(Y,{onLogoutButtonClick:this.props.apiSetupContext.logoutUserAndRefresh,displayAs:K});case L.REQUEST_INVITATION_ERROR:return r.createElement(z,null);case L.UNEXPECTED_ERROR_STATE:return r.createElement(ae,{error:this.props.apiSetupContext.unexpectedError});default:return r.createElement(B,null)}}}oe.propTypes={apiSetupContext:u().object};const ie=k(oe);var le;function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},ce.apply(null,arguments)}const ue=function(e){return r.createElement("svg",ce({xmlns:"http://www.w3.org/2000/svg",width:17,height:16,fill:"none",viewBox:"0 0 17 16"},e),le||(le=r.createElement("g",{clipPath:"url(#heart_svg__clip0_93_734678)"},r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13.497 9.333c.993-.973 2-2.14 2-3.666A3.667 3.667 0 0 0 11.83 2c-1.173 0-2 .333-3 1.333-1-1-1.827-1.333-3-1.333a3.667 3.667 0 0 0-3.667 3.667c0 1.533 1 2.7 2 3.666L8.83 14z"}))))};class he extends r.Component{render(){return r.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,r.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}he.defaultProps={direction:"right"},he.propTypes={children:u().any,message:u().any.isRequired,direction:u().string};const de=he;class pe extends r.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://www.passbolt.com/docs/hosting/faq/why-I-see-unsafe-mode-banner/"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return r.createElement("footer",{className:"footer"},r.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&r.createElement("li",{className:"error-message"},r.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Unsafe mode"))),this.termsUrl&&r.createElement("li",null,r.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Terms"))),this.privacyUrl&&r.createElement("li",null,r.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Privacy"))),r.createElement("li",null,r.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(A.x6,null,"Credits"))),r.createElement("li",null,this.versions&&r.createElement(de,{message:this.versions,direction:"left"},r.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(ue,null))),!this.versions&&r.createElement("a",{className:"button button-transparent inline",href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},r.createElement(ue,null)))))}}pe.propTypes={context:u().any,t:u().func};const me=i((0,A.CI)("common")(pe));var ge=s(5648);const fe=(e,t)=>t.split(".").reduce((e,t)=>e?.[t],e),Ee=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const s=t.whitelistedProtocols||[be.HTTP,be.HTTPS],r=[be.JAVASCRIPT],n=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&n&&(e=`${n}//${e}`);try{const t=new URL(e);return!r.includes(t.protocol)&&!!s.includes(t.protocol)&&t.href}catch(e){return console.error("Failed to sanitize URL:",e),!1}},be={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class ve{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const s=`passbolt.plugins.${e}`,r=fe(this.settings,s)||null;if(r&&"object"==typeof r){const e=fe(r,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}isFeatureBeta(e){(0,ge.A)(e);const t=`passbolt.plugins.${e}.isInBeta`;return fe(this.settings,t)||!1}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return fe(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return fe(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=fe(this.settings,"passbolt.legal.terms.url");return!!e&&Ee(e)}get privacyLink(){const e=fe(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Ee(e)}get registrationPublic(){return!0===fe(this.settings,"passbolt.registration.public")}get debug(){return!0===fe(this.settings,"app.debug")}get url(){return fe(this.settings,"app.url")||""}get version(){return fe(this.settings,"app.version.number")}get isCommunityEdition(){return"ce"===fe(this.settings,"passbolt.edition")}get locale(){return fe(this.settings,"app.locale")||ve.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return fe(this.settings,"passbolt.plugins.locale.options")||ve.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return fe(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[ve.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}var we=s(2635),ye=s(1347);class Se extends r.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await we.Ay.use(A.r9).use(ye.A).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:(e,t)=>this.getTranslationPath(e,t)},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}getTranslationPath(e,t){const s=e[0],r=t[0],n="en-GB"===s?"en-UK":s;return(this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json").replace("{{lng}}",n).replace("{{ns}}",r)}get supportedLocales(){let e=[];return this.props.context.siteSettings?.supportedLocales?e=this.props.context.siteSettings?.supportedLocales.map(e=>e.locale):e.push(this.locale),e.includes("en-UK")&&e.push("en-GB"),e}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await we.Ay.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return r.createElement(r.Fragment,null,this.isReady&&this.props.children)}}Se.propTypes={context:u().any,loadingPath:u().any,children:u().any};const xe=i(Se),Te=new class{allPropTypes=(...e)=>(...t)=>{const s=e.map(e=>e(...t)).filter(Boolean);if(0===s.length)return;const r=s.map(e=>e.message).join("\n");return new Error(r)}};var Ce;function Re(){return Re=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},Re.apply(null,arguments)}const Oe=function(e){return r.createElement("svg",Re({width:25,height:24,fill:"none",viewBox:"0 0 25 24"},e),Ce||(Ce=r.createElement("path",{stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M11.597 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16M21.597 21l-4.35-4.35"})))};class ke extends r.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter(e=>e.value!==this.state.selectedValue);return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find(e=>e.value===this.state.selectedValue);return e&&e.label||r.createElement(r.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=r.createRef(),this.selectItemsRef=r.createRef(),this.itemsRef=r.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:s}=e;let{top:r,left:n}=e;const a=this.getFirstParentWithTransform();if(a){const e=a.getBoundingClientRect();r-=e.top,n-=e.left}const o={position:"fixed",zIndex:1,width:t,height:s,top:r,left:n};this.setState({style:o})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,s=t.value,r=t.name;this.setState({[r]:s})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const s=t&&t.split(/\s+/)||[""];return e.filter(e=>s.every(t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return r.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},r.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},r.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},r.createElement("span",{className:"value"},this.selectedItemLabel),r.createElement(ee,null)),r.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&r.createElement(r.Fragment,null,r.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),r.createElement(Oe,{className:"search"})),r.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map(e=>r.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,title:e.title,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label)),!this.hasFilteredItems()&&this.props.search&&r.createElement("li",{className:"option no-results"},r.createElement(A.x6,null,"No results match")," ",r.createElement("span",null,this.state.search))))))}}ke.defaultProps={id:"",name:"select",className:"",direction:"bottom"},ke.propTypes={id:u().string,name:u().string,className:u().string,direction:u().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:u().bool,items:u().array,value:Te.allPropTypes(u().oneOfType([u().string,u().number,u().bool]),(e,t,s)=>{const r=e[t],n=e.items;if(null!==r&&n.length>0&&n.every(e=>e.value!==r))return new Error(`Invalid prop ${t} passed to ${s}. Expected the value ${r} in items.`)}),disabled:u().bool,onChange:u().func};const Le=(0,A.CI)("common")(ke);class Ne extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.bindHandlers()}async componentDidMount(){await this.initLocale()}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.props.context.locale!==e&&await this.setState({locale:this.props.context.locale})}get defaultState(){return{loading:!0,locale:null,processing:!1}}get areActionsAllowed(){return!this.state.processing}bindHandlers(){this.handleLocaleInputChange=this.handleLocaleInputChange.bind(this)}async handleLocaleInputChange(e){const t=e.target.value;await this.updateLocale(t)}async updateLocale(e){await this.toggleProcessing(),await this.props.context.onUpdateLocaleRequested(e),await this.toggleProcessing()}async initLocale(){await this.setState({locale:this.props.context.locale,loading:!1})}async toggleProcessing(){const e=this.state.processing;return this.setState({processing:!e})}isLoading(){return this.state.loading}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map(e=>({value:e.locale,label:e.label})):[]}render(){return r.createElement(r.Fragment,null,!this.isLoading()&&r.createElement("div",{className:"select-wrapper input"},r.createElement(Le,{id:"user-locale-input",className:"setup-extension",name:"locale",value:this.state.locale,disabled:!this.areActionsAllowed,items:this.supportedLocales,onChange:this.handleLocaleInputChange})))}}Ne.propTypes={context:u().any};const Ue=i(Ne);class Ie extends r.Component{get statesToHideLocaleSwitch(){return[L.INITIAL_STATE]}get mustDisplayLocaleSwitch(){return!this.statesToHideLocaleSwitch.includes(this.props.apiSetupContext.state)}render(){return r.createElement(r.Fragment,null,this.mustDisplayLocaleSwitch&&r.createElement(Ue,null))}}Ie.propTypes={apiSetupContext:u().any};const Ae=k(Ie);var De,Pe,_e,Be,je;function $e(){return $e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},$e.apply(null,arguments)}const Me=function(e){return r.createElement("svg",$e({xmlns:"http://www.w3.org/2000/svg",width:151,height:27,fill:"none","aria-labelledby":"logo-title logo-description",viewBox:"0 0 151 27"},e),De||(De=r.createElement("title",{id:"logo-title"},"Passbolt logo")),Pe||(Pe=r.createElement("desc",{id:"logo-description"},"This is the logo of passbolt.")),_e||(_e=r.createElement("path",{fill:"var(--icon-color)",d:"M4.648 9.234v8.607h2.48c1.646 0 2.786-.349 3.47-1.012.685-.664 1.013-1.823 1.013-3.395 0-1.52-.305-2.595-.938-3.218-.633-.673-1.695-.972-3.24-.972zM.597 5.963h7.797c2.357 0 4.178.676 5.496 2.048q1.976 2.058 1.974 5.689a8.6 8.6 0 0 1-.406 2.749 7.1 7.1 0 0 1-1.24 2.278 5.9 5.9 0 0 1-2.38 1.773c-.937.349-2.152.524-3.697.524H4.648V26.5H.597zM24.016 18.016h5.064v-3.119h-4.76c-.937 0-1.594.124-1.95.375-.357.25-.517.698-.517 1.321 0 .524.15.899.429 1.122.28.223.848.301 1.734.301M18.649 5.963h8.268c2.103 0 3.672.476 4.736 1.423 1.065.947 1.594 2.347 1.594 4.217v9.456H22.37c-1.52 0-2.708-.375-3.52-1.121-.81-.747-1.2-1.823-1.2-3.22 0-1.722.454-2.945 1.392-3.692s2.483-1.134 4.697-1.134h5.315v-.365c0-.898-.276-1.518-.809-1.896-.532-.377-1.47-.55-2.86-.55H18.65zM36.55 17.915h8.525c.76 0 1.318-.124 1.646-.35.183-.122.328-.29.423-.486.094-.197.134-.414.115-.63a1.2 1.2 0 0 0-.112-.632 1.24 1.24 0 0 0-.42-.492c-.355-.253-.91-.374-1.646-.374h-3.494c-2.067 0-3.467-.325-4.203-.947-.737-.623-1.088-1.747-1.088-3.32 0-1.62.431-2.82 1.318-3.592.886-.772 2.255-1.152 4.064-1.152h8.684v3.142h-7.134q-1.75 0-2.279.301c-.354.198-.532.547-.532 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.676c1.672 0 2.961.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.405 2.53-1.188 3.417-.37.427-.833.768-1.354.996-.522.23-1.09.34-1.661.325H36.549zM53.822 17.915h8.526c.76 0 1.318-.124 1.646-.35a1.23 1.23 0 0 0 .42-.487c.093-.196.132-.413.112-.629a1.2 1.2 0 0 0-.111-.632 1.24 1.24 0 0 0-.421-.492c-.354-.253-.91-.374-1.646-.374h-3.493c-2.067 0-3.467-.325-4.204-.947-.736-.623-1.088-1.752-1.088-3.324 0-1.62.432-2.82 1.318-3.593.886-.772 2.253-1.147 4.075-1.147h8.686v3.142h-7.141q-1.747 0-2.28.301c-.353.198-.531.547-.531 1.071-.017.193.016.387.096.564s.204.332.361.449c.302.223.809.324 1.468.324h3.671c1.672 0 2.963.397 3.824 1.172s1.315 1.871 1.315 3.32c0 1.397-.403 2.53-1.188 3.417-.37.427-.832.767-1.354.996a3.9 3.9 0 0 1-1.66.325H53.769v-3.106zM75.387.5v5.463h3.47c1.55 0 2.759.175 3.694.55.946.362 1.77.976 2.38 1.772a7.2 7.2 0 0 1 1.243 2.296c.281.888.417 1.814.403 2.744q0 3.63-1.974 5.689c-1.315 1.372-3.14 2.046-5.493 2.046h-7.8V.5zm2.462 8.734h-2.483v8.608h2.785c1.55 0 2.633-.324 3.243-.95s.935-1.721.935-3.268-.354-2.694-1.033-3.367c-.68-.673-1.832-1.023-3.447-1.023M92.3 13.525c0 1.445.328 2.532 1.013 3.367s1.62 1.198 2.86 1.198 2.152-.398 2.863-1.198 1.033-1.921 1.033-3.367-.356-2.547-1.033-3.344c-.677-.798-1.62-1.198-2.863-1.198a3.64 3.64 0 0 0-1.57.279 3.6 3.6 0 0 0-1.29.919c-.685.797-1.013 1.921-1.013 3.344m12.002 0q0 3.544-2.202 5.689c-1.47 1.397-3.42 2.121-5.901 2.121s-4.457-.699-5.924-2.121-2.202-3.292-2.202-5.664q0-3.558 2.202-5.69c1.467-1.424 3.444-2.145 5.919-2.145s4.431.724 5.901 2.144 2.207 3.294 2.207 5.666M110.935 21.06h-4.202V.5h4.202zM112.884 5.963h2.86V.5h4.052v5.463h4.278v3.02h-4.278v6.09c0 1.12.204 1.895.581 2.343.377.449 1.064.649 2.026.649h1.671v3.02h-3.72c-1.494 0-2.636-.4-3.444-1.223-.809-.823-1.189-1.995-1.189-3.519v-7.36h-2.863v-3.02z"})),Be||(Be=r.createElement("path",{fill:"#D40101",d:"m149.951 10.68-9.059-8.36a2.12 2.12 0 0 0-1.421-.543c-.526 0-1.033.194-1.421.544l-5.684 5.268c.745.271 1.414.71 1.952 1.282.539.572.933 1.26 1.149 2.01h7.673a.73.73 0 0 1 .504.204.69.69 0 0 1 .207.494v1.147a.68.68 0 0 1-.207.494.72.72 0 0 1-.504.204h-.886v1.623a.68.68 0 0 1-.205.494.72.72 0 0 1-.503.205h-1.945a.73.73 0 0 1-.503-.205.69.69 0 0 1-.205-.494v-1.623h-3.426a4.84 4.84 0 0 1-1.135 2.033 5 5 0 0 1-1.966 1.287l5.71 5.276c.388.349.895.543 1.421.543a2.12 2.12 0 0 0 1.421-.543l9.043-8.355a2.03 2.03 0 0 0-.01-2.985"})),je||(je=r.createElement("path",{fill:"#D40101",d:"M130.683 9.867a2.6 2.6 0 0 0-1.064.253c-.371.18-.686.455-.913.794a2.242 2.242 0 0 0-.113 2.305 2.3 2.3 0 0 0 .831.877 2.36 2.36 0 0 0 2.355.059c.362-.197.664-.484.875-.833a2.24 2.24 0 0 0 .324-1.153 2.21 2.21 0 0 0-.653-1.625 2.3 2.3 0 0 0-.751-.5 2.3 2.3 0 0 0-.891-.177"})))};class Fe extends r.Component{constructor(e){super(e),this.state=this.defaultState,this.userId=null,this.token=null,this.initializeProperties()}get defaultState(){return{siteSettings:null,trustedDomain:this.baseUrl,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,onUpdateLocaleRequested:this.onUpdateLocaleRequested.bind(this)}}async componentDidMount(){await this.getSiteSettings(),this.initLocale()}initializeProperties(){const e="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[0-5][a-fA-F0-9]{3}-[089aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}",t=new RegExp(`setup/(install|start)/(${e})/(${e})$`),s=window.location.pathname.match(t);s?(this.userId=s[2],this.token=s[3]):console.error("Unable to retrieve the user id and token from the url")}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new N).setBaseUrl(this.state.trustedDomain)}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new b(e),{body:s}=await t.findAll(),r=new ve(s);await this.setState({siteSettings:r})}initLocale(){const e=this.getUrlLocale()||this.getBrowserLocale()||this.getBrowserSimilarLocale()||this.state.siteSettings.locale;this.setState({locale:e}),this.setUrlLocale(e)}getUrlLocale(){const e=new URL(window.location.href).searchParams.get("locale");if(e){const t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale);if(t)return t.locale}}getBrowserLocale(){const e=this.state.siteSettings.supportedLocales.find(e=>navigator.language===e.locale);if(e)return e.locale}getBrowserSimilarLocale(){const e=navigator.language.split("-")[0],t=this.state.siteSettings.supportedLocales.find(t=>e===t.locale.split("-")[0]);if(t)return t.locale}async onUpdateLocaleRequested(e){await this.setState({locale:e}),this.setUrlLocale(e)}setUrlLocale(e){const t=new URL(window.location.href);t.searchParams.set("locale",e),window.history.replaceState(null,null,t)}isReady(){return null!==this.state.siteSettings&&null!==this.state.locale}render(){return r.createElement(l.Provider,{value:this.state},this.isReady()&&r.createElement(xe,{loadingPath:`${this.state.trustedDomain}/locales/{{lng}}/{{ns}}.json`},r.createElement(O,{value:{userId:this.userId,token:this.token}},r.createElement("div",{id:"container",className:"container page login"},r.createElement("div",{className:"content"},r.createElement("div",{className:"header"},r.createElement("div",{className:"logo-svg"},r.createElement(Me,{role:"img",width:"20rem",height:"3.5rem"}))),r.createElement("div",{className:"login-form"},r.createElement(ie,null)),r.createElement(Ae,null)),r.createElement(me,null)))))}}const Ve=Fe,qe=document.createElement("div");document.body.appendChild(qe),n.render(r.createElement(Ve,null),qe)}},n={};function a(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e].call(s.exports,s,s.exports,a),s.exports}a.m=r,e=[],a.O=(t,s,r,n)=>{if(!s){var o=1/0;for(u=0;u<e.length;u++){for(var[s,r,n]=e[u],i=!0,l=0;l<s.length;l++)(!1&n||o>=n)&&Object.keys(a.O).every(e=>a.O[e](s[l]))?s.splice(l--,1):(i=!1,n<o&&(o=n));if(i){e.splice(u--,1);var c=r();void 0!==c&&(t=c)}}return t}n=n||0;for(var u=e.length;u>0&&e[u-1][2]>n;u--)e[u]=e[u-1];e[u]=[s,r,n]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},s=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var n=Object.create(null);a.r(n);var o={};t=t||[null,s({}),s([]),s(s)];for(var i=2&r&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=s(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,a.d(n,o),n},a.d=(e,t)=>{for(var s in t)a.o(t,s)&&!a.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},a.e=()=>Promise.resolve(),a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.j=793,(()=>{var e={793:0};a.O.j=t=>0===e[t];var t=(t,s)=>{var r,n,[o,i,l]=s,c=0;if(o.some(t=>0!==e[t])){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);if(l)var u=l(a)}for(t&&t(s);c<o.length;c++)n=o[c],a.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return a.O(u)},s=self.webpackChunkpassbolt_styleguide=self.webpackChunkpassbolt_styleguide||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))})();var o=a.O(void 0,[847],()=>a(576));o=a.O(o)})();
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ import {withAppContext} from "../../../../shared/context/AppContext/AppContext";
|
|
|
17
17
|
import PropTypes from "prop-types";
|
|
18
18
|
import {Trans, withTranslation} from "react-i18next";
|
|
19
19
|
|
|
20
|
-
const CHROME_STORE_BROWSER_EXTENSION_URL = "https://
|
|
20
|
+
export const CHROME_STORE_BROWSER_EXTENSION_URL = "https://download.passbolt.com/extension/chrome";
|
|
21
21
|
const FIREFOX_STORE_BROWSER_EXTENSION_URL = "https://addons.mozilla.org/firefox/addon/passbolt";
|
|
22
22
|
const EDGE_STORE_BROWSER_EXTENSION_URL = "https://microsoftedge.microsoft.com/addons/detail/passbolt-extension/ljeppgjhohmhpbdhjjjbiflabdgfkhpo";
|
|
23
23
|
|
package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
import InstallExtensionTestPage from "./InstallExtension.test.page";
|
|
20
20
|
import {defaultProps} from "./InstallExtension.test.data";
|
|
21
|
+
import {CHROME_STORE_BROWSER_EXTENSION_URL} from "./InstallExtension";
|
|
21
22
|
|
|
22
23
|
beforeAll(() => {
|
|
23
24
|
Object.defineProperty(window, 'matchMedia', {
|
|
@@ -80,6 +81,8 @@ describe("As AN I should see install extension page", () => {
|
|
|
80
81
|
expect(page.message).toBe('Please download the browser extension and refresh this page to continue.');
|
|
81
82
|
// download
|
|
82
83
|
expect(page.download).toBe('Download extension');
|
|
84
|
+
// download
|
|
85
|
+
expect(page.downloadUrl).toBe(CHROME_STORE_BROWSER_EXTENSION_URL);
|
|
83
86
|
// link
|
|
84
87
|
expect(page.linkContent).toBe('Refresh to detect extension');
|
|
85
88
|
});
|
package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.page.js
CHANGED
|
@@ -63,6 +63,13 @@ export default class InstallExtensionTestPage {
|
|
|
63
63
|
return this._page.container.querySelector('.install-extension .form-actions .button.primary.big').textContent;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Returns the download button url
|
|
68
|
+
*/
|
|
69
|
+
get downloadUrl() {
|
|
70
|
+
return this._page.container.querySelector('.install-extension .form-actions .button.primary.big').href;
|
|
71
|
+
}
|
|
72
|
+
|
|
66
73
|
/**
|
|
67
74
|
* Returns the link to refresh
|
|
68
75
|
*/
|