passbolt-styleguide 3.3.3 → 3.4.0-alpha2
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 +4 -4
- package/build/css/public.min.css +5 -6
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -7
- package/build/css/themes/default/api_main.min.css +4 -9
- package/build/css/themes/default/api_reports.min.css +4 -9
- package/build/css/themes/default/api_webinstaller.min.css +4 -9
- package/build/css/themes/default/ext_app.min.css +4 -9
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +3 -3
- package/build/css/themes/default/ext_in_form_cta.min.css +9 -0
- package/build/css/themes/default/ext_in_form_menu.min.css +9 -0
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +9 -0
- package/build/css/themes/midgar/api_main.min.css +4 -9
- package/build/css/themes/midgar/api_reports.min.css +4 -9
- package/build/css/themes/midgar/ext_app.min.css +4 -9
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +9 -0
- package/build/css/themes/midgar/ext_in_form_menu.min.css +9 -0
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +5 -5
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-recover.js.LICENSE.txt +0 -28
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-setup.js.LICENSE.txt +0 -15
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-triage.js.LICENSE.txt +0 -14
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +146 -84
- package/package.json +31 -26
- package/src/img/controls/chevron-down_blue.svg +3 -0
- package/src/img/diagrams/functional_overview.png +0 -0
- package/src/img/diagrams/functional_overview.svg +4 -0
- package/src/img/diagrams/howitworks.svg +2797 -0
- package/src/img/diagrams/mobile-transfer.svg +296 -0
- package/src/img/diagrams/sequence_diagram_form_authenticate.png +0 -0
- package/src/img/diagrams/sequence_diagram_gpg_authenticate.png +0 -0
- package/src/img/diagrams/totp.svg +251 -0
- package/src/img/illustrations/pin_passbolt.gif +0 -0
- package/src/img/illustrations/wave-pin_my_extension.svg +1 -0
- package/src/img/logo/icon-32-badge-1.png +0 -0
- package/src/img/logo/icon-32-badge-2.png +0 -0
- package/src/img/logo/icon-32-badge-3.png +0 -0
- package/src/img/logo/icon-32-badge-4.png +0 -0
- package/src/img/logo/icon-32-badge-5+.png +0 -0
- package/src/img/logo/icon-32-badge-5.png +0 -0
- package/src/img/logo/icon-32-signout.png +0 -0
- package/src/img/logo/icon-badge-1.svg +1 -0
- package/src/img/logo/icon-badge-2.svg +1 -0
- package/src/img/logo/icon-badge-3.svg +1 -0
- package/src/img/logo/icon-badge-4.svg +1 -0
- package/src/img/logo/icon-badge-5+.svg +1 -0
- package/src/img/logo/icon-badge-5.svg +1 -0
- package/src/img/logo/icon-inactive.svg +1 -0
- package/src/img/logo/icon-without-badge.svg +1 -0
- package/src/img/third_party/ChromeWebStore_black.svg +1 -0
- package/src/img/third_party/ChromeWebStore_white.svg +1 -0
- package/src/img/third_party/edge-addon-black.svg +1 -0
- package/src/img/third_party/edge-addon-white.svg +1 -0
- package/src/locales/de-DE/common.json +820 -0
- package/src/locales/en-UK/common.json +86 -20
- package/src/locales/fr/common.json +750 -0
- package/src/locales/fr-FR/common.json +92 -22
- package/src/locales/sv-SE/common.json +820 -0
- package/src/react-extension/ExtApp.js +16 -10
- package/src/react-extension/ExtBootstrapApp.js +1 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -2
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +2 -2
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +22 -8
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +3 -0
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +10 -8
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +21 -19
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +6 -6
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +0 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +5 -8
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +20 -38
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +4 -1
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +4 -4
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +2 -3
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +5 -9
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +34 -32
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +0 -3
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.page.js +2 -2
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +1 -1
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -2
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +1 -1
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +12 -14
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +2 -1
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +1 -2
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -19
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +1 -1
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +14 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.js +65 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.page.js +38 -0
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +15 -6
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +27 -0
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.js +107 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.data.js +11 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.js +65 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.page.js +73 -0
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +34 -0
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +8 -11
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +1 -1
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +3 -1
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +2 -1
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.js +1 -1
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +5 -11
- package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +5 -1
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.data.js +0 -2
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.js +4 -5
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.page.js +0 -1
- package/src/react-extension/components/Common/Avatar/UserAvatar.js +2 -1
- package/src/react-extension/components/Common/Error/ShowErrorDetails/ShowErrorDetails.js +126 -0
- package/src/react-extension/components/Common/Icons/AnimatedFeedback.js +58 -0
- package/src/react-extension/components/Common/Icons/Icon.js +16 -0
- package/src/react-extension/components/Common/Icons/Icon.test.stories.js +78 -0
- package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +4 -0
- package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +2 -1
- package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -4
- package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +34 -0
- package/src/react-extension/components/Common/Tab/Tab.js +65 -0
- package/src/react-extension/components/Common/Tab/Tabs.js +87 -0
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +85 -66
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.data.js +80 -1
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +18 -39
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +27 -8
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +70 -4
- package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +1 -1
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayDragResource.js +68 -0
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +20 -47
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.page.js +4 -1
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +2 -2
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.data.js +1 -7
- package/src/react-extension/components/Resource/EditResource/EditResource.js +93 -68
- package/src/react-extension/components/Resource/EditResource/EditResource.test.data.js +80 -1
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +10 -39
- package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +26 -11
- package/src/react-extension/components/Resource/ExportResources/ExportResources.js +1 -1
- package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +10 -12
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +5 -11
- package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.js +4 -4
- package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js +109 -0
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +41 -193
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.data.js +10 -5
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.js +9 -12
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.page.js +6 -2
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.js +83 -58
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.data.js +52 -59
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.js +25 -20
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.page.js +11 -5
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +7 -2
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.test.js +3 -7
- package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.page.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.js +1 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.data.js +47 -0
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +34 -3
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.page.js +46 -9
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +124 -4
- package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +0 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResources.js +6 -5
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +10 -12
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.js +1 -1
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.page.object.js +1 -1
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +8 -14
- package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +8 -14
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +9 -8
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.page.js +1 -1
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +8 -15
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +0 -1
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +2 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +1 -1
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +0 -3
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +0 -6
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +0 -5
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +1 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +0 -7
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +0 -2
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +150 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +30 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +191 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +73 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +296 -0
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +112 -0
- package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +0 -2
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +0 -4
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.test.page.js +1 -1
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +5 -1
- package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
- package/src/react-extension/components/Share/ShareDialog.test.stories.js +12 -10
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -9
- package/src/react-extension/components/User/CreateUser/CreateUser.js +4 -4
- package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +3 -3
- package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +3 -1
- package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +5 -8
- package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -2
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.page.js +1 -1
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +35 -2
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.data.js +2 -1
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.js +6 -0
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.page.js +19 -6
- package/src/react-extension/components/User/EditUser/EditUser.js +3 -3
- package/src/react-extension/components/User/EditUser/EditUser.test.page.js +2 -2
- package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +3 -1
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.js +2 -2
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.js +1 -1
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.js +1 -1
- package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +1 -1
- package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +0 -1
- package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +0 -2
- package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +8 -12
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +1 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +2 -2
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +11 -3
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.data.js +7 -0
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +1 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +12 -8
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +92 -21
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.js +2 -2
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.page.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +12 -10
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +4 -10
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +65 -25
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +14 -13
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +21 -6
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspace/DisplayUserSettingsWorkspace.js +13 -1
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -1
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +3 -3
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +26 -4
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +7 -10
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.js +749 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.data.js +32 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.js +60 -0
- package/src/react-extension/components/UserSetting/TransferToMobile/TransferToMobile.test.page.js +110 -0
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +3 -2
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +5 -8
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +2 -2
- package/src/react-extension/contexts/ApiAppContext.js +1 -1
- package/src/react-extension/contexts/ApiRecoverContext.js +1 -1
- package/src/react-extension/contexts/ApiSetupContext.js +1 -1
- package/src/react-extension/contexts/AuthenticationContext.js +21 -2
- package/src/react-extension/contexts/AuthenticationContext.test.js +40 -0
- package/src/react-extension/contexts/DragContext.js +122 -0
- package/src/react-extension/contexts/DragContext.test.js +53 -0
- package/src/react-extension/contexts/NavigationContext.js +11 -0
- package/src/react-extension/contexts/ResourcePasswordGeneratorContext.js +144 -0
- package/src/react-extension/contexts/ResourceWorkspaceContext.js +5 -4
- package/src/react-extension/contexts/ResourceWorkspaceContext.test.data.js +0 -1
- package/src/react-extension/contexts/ResourceWorkspaceContext.test.page.js +0 -1
- package/src/react-extension/contexts/UserWorkspaceContext.js +31 -4
- package/src/react-extension/contexts/UserWorkspaceContext.test.data.js +17 -287
- package/src/react-extension/lib/Crypto/sha512.js +17 -0
- package/src/react-extension/test/fixture/Settings/siteSettings.js +6 -0
- package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +42 -7
- package/src/react-quickaccess/ExtQuickAccess.js +75 -28
- package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +22 -5
- package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +41 -0
- package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +23 -0
- package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +8 -4
- package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +10 -6
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +9 -5
- package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +7 -7
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +10 -7
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +9 -5
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.js +150 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.data.js +20 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.js +67 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePassphraseGenerator.test.page.js +109 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +189 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.data.js +40 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.js +67 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.test.page.js +121 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +304 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +102 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.js +76 -0
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.page.js +158 -0
- package/src/react-quickaccess/components/Header/Header.js +10 -8
- package/src/react-quickaccess/components/Header/Header.test.stories.js +4 -7
- package/src/react-quickaccess/components/HomePage/HomePage.js +40 -11
- package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +14 -10
- package/src/react-quickaccess/components/HomePage/canSuggestUrl.js +8 -3
- package/src/react-quickaccess/components/HomePage/canSuggestUrl.test.js +6 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +58 -18
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +4 -6
- package/src/react-quickaccess/components/ManageQuickAccessMode/ManageQuickAccessMode.js +103 -0
- package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +2 -2
- package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +4 -6
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +5 -3
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +6 -6
- package/src/react-quickaccess/components/PrivateRoute/PrivateRoute.js +1 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +234 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +28 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +44 -0
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +166 -39
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +108 -2
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +28 -25
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +6 -6
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +6 -3
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +5 -3
- package/src/react-quickaccess/components/Search/Search.js +13 -1
- package/src/react-quickaccess/components/Search/Search.test.stories.js +4 -6
- package/src/react-quickaccess/contexts/PrepareResourceContext.js +221 -0
- package/src/react-web-integration/AuthLogin/AuthLogin.js +72 -0
- package/src/react-web-integration/Autofill/Autofill.js +331 -0
- package/src/react-web-integration/BrowserIntegrationBootstrap.js +64 -0
- package/src/react-web-integration/Events/Quickaccess/QuickAccessEvent.js +24 -0
- package/src/react-web-integration/ExtInFormCallToAction.js +56 -0
- package/src/react-web-integration/ExtInFormMenu.js +70 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.js +161 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.data.js +39 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.js +48 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.page.js +42 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +91 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +360 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +198 -0
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenuItem.js +103 -0
- package/src/react-web-integration/contexts/AppContext.js +39 -0
- package/src/react-web-integration/lib/Dom/DomUtils.js +94 -0
- package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +263 -0
- package/src/react-web-integration/lib/InForm/InFormCredentialsFormField.js +118 -0
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +77 -0
- package/src/react-web-integration/lib/InForm/InFormManager.js +253 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.data.js +46 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.js +82 -0
- package/src/react-web-integration/lib/InForm/InformManager.test.page.js +116 -0
- package/src/react-web-integration/lib/InForm/InformMenuField.js +182 -0
- package/src/shared/components/Internationalisation/TranslationProvider.js +145 -0
- package/src/shared/lib/Browser/detectBrowserName.js +2 -1
- package/src/shared/lib/Secret/SecretComplexity.js +2 -2
- package/src/shared/lib/SecretGenerator/PassphraseGenerator.js +112 -0
- package/src/shared/lib/SecretGenerator/PassphraseGenerator.test.js +48 -0
- package/src/shared/lib/SecretGenerator/PassphraseGeneratorWords.js +7789 -0
- package/src/shared/lib/SecretGenerator/PasswordGenerator.js +103 -0
- package/src/shared/lib/SecretGenerator/SecretGenerator.js +45 -0
- package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.js +190 -0
- package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.test.js +95 -0
- package/src/shared/lib/Settings/SiteSettings.js +8 -0
- package/src/shared/lib/apiClient/apiClient.test.js +1 -1
- package/.babelrc +0 -11
- package/.editorconfig +0 -13
- package/.eslintrc.json +0 -197
- package/.gitlab-ci.yml +0 -28
- package/.jest.config.json +0 -6
- package/.jest.setup.js +0 -8
- package/.jest.transform.js +0 -7
- package/.storybook/main.js +0 -15
- package/.storybook/preview-body.html +0 -5
- package/.storybook/preview.js +0 -6
- package/Gruntfile.js +0 -199
- package/build/css/themes/default/ext_config_debug.min.css +0 -13
- package/build/css/themes/default/ext_legacy.min.css +0 -13
- package/build/css/themes/midgar/ext_legacy.min.css +0 -13
- package/crowdin.yml +0 -4
- package/docker-compose-dev.yml +0 -10
- package/jest.config.json +0 -6
- package/src/img/controls/colorpicker/marker.png +0 -0
- package/src/img/controls/colorpicker/mask.png +0 -0
- package/src/img/controls/colorpicker/wheel.png +0 -0
- package/src/img/controls/overlay-opacity-50.png +0 -0
- package/src/img/third_party/ChromeWebStore_black.png +0 -0
- package/src/img/third_party/ChromeWebStore_white.png +0 -0
- package/src/js/accordion.js +0 -10
- package/src/js/autocomplete.js +0 -241
- package/src/js/autocomplete.min.js +0 -3
- package/src/js/bootstrap-scrollspy.js +0 -172
- package/src/js/chosen.jquery.js +0 -1356
- package/src/js/colorpicker.js +0 -32
- package/src/js/download.js +0 -128
- package/src/js/farbtastic.js +0 -345
- package/src/js/swiper.min.js +0 -18
- package/src/react-quickaccess/components/Internationalisation/TranslationProvider.js +0 -151
- package/storybook-static/favicon.ico +0 -0
- package/storybook-static/iframe.html +0 -133
- package/storybook-static/index.html +0 -47
- package/storybook-static/main.2d01924b12554c6c15af.bundle.js +0 -1
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js +0 -3
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -153
- package/storybook-static/main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/storybook-static/runtime~main.6a9b04192e3176eff72a.bundle.js +0 -1
- package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js +0 -2
- package/storybook-static/runtime~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/storybook-static/static/media/chosen-sprite.6768c197.png +0 -0
- package/storybook-static/static/media/chosen-sprite@2x.a0b7f3f1.png +0 -0
- package/storybook-static/static/media/dot_black.a2c44078.svg +0 -6
- package/storybook-static/static/media/dot_red.7b34541d.svg +0 -6
- package/storybook-static/static/media/dot_white.f60f7331.svg +0 -6
- package/storybook-static/static/media/fontawesome-webfont.1e59d233.ttf +0 -0
- package/storybook-static/static/media/fontawesome-webfont.20fd1704.woff2 +0 -0
- package/storybook-static/static/media/fontawesome-webfont.8b43027f.eot +0 -0
- package/storybook-static/static/media/fontawesome-webfont.c1e38fd9.svg +0 -2671
- package/storybook-static/static/media/fontawesome-webfont.f691f37e.woff +0 -0
- package/storybook-static/static/media/infinite-bar.f5327dc3.gif +0 -0
- package/storybook-static/static/media/loading_dark.ea474c7f.svg +0 -21
- package/storybook-static/static/media/loading_light.061977b5.svg +0 -15
- package/storybook-static/static/media/logo.e2b062a5.svg +0 -1
- package/storybook-static/static/media/logo_white.cb32e694.svg +0 -1
- package/storybook-static/static/media/opensans-bold.a6b4768c.woff +0 -0
- package/storybook-static/static/media/opensans-regular.7812bd0b.woff +0 -0
- package/storybook-static/static/media/passphrase_intro.37a1ba4e.png +0 -0
- package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js +0 -2
- package/storybook-static/vendors~main.4abf29e4f956d5befb41.bundle.js.LICENSE.txt +0 -105
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js +0 -3
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.LICENSE.txt +0 -145
- package/storybook-static/vendors~main.b0c44c8759149ccf4f67.bundle.js.map +0 -1
- package/webpack-api.config.js +0 -83
- package/webpack-ext.config.js +0 -84
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Bootstrap the legacy auth login page.
|
|
17
|
+
* The workflows have changed and a user visiting the legacy api login page with an unconfigured browser extension
|
|
18
|
+
* should not be requested to download the extension.
|
|
19
|
+
* @deprecated to be removed with v4
|
|
20
|
+
*/
|
|
21
|
+
function legacyAuthLogin() {
|
|
22
|
+
if (!isLegacyApi()) return;
|
|
23
|
+
|
|
24
|
+
const baseElements = document.getElementsByTagName('base')
|
|
25
|
+
if (!baseElements || !baseElements.length) return;
|
|
26
|
+
const baseUrl = baseElements[0].attributes.href.value.replace(/\/*$/g, ''); // Remove last slash
|
|
27
|
+
|
|
28
|
+
// Plugin check warning instead of error
|
|
29
|
+
const pluginCheckElements = document.getElementsByClassName("plugin-check");
|
|
30
|
+
if (!pluginCheckElements || !pluginCheckElements.length) return;
|
|
31
|
+
pluginCheckElements[0].classList.remove("error");
|
|
32
|
+
pluginCheckElements[0].classList.add("warning");
|
|
33
|
+
|
|
34
|
+
// Plugin check feedback
|
|
35
|
+
const pluginCheckMessageElements = document.querySelectorAll(".plugin-check .message");
|
|
36
|
+
if (!pluginCheckMessageElements || !pluginCheckMessageElements.length) return;
|
|
37
|
+
pluginCheckMessageElements[0].textContent = "The plugin is installed but not configured. Please contact your domain administrator to request an invitation, or ";
|
|
38
|
+
|
|
39
|
+
// Plugin check recover feedback link
|
|
40
|
+
const pluginCheckRecoverLinkElement = document.createElement('a');
|
|
41
|
+
const pluginCheckRecoverLinkTextElement = document.createTextNode("recover your account if you already have one!");
|
|
42
|
+
pluginCheckRecoverLinkElement.appendChild(pluginCheckRecoverLinkTextElement);
|
|
43
|
+
pluginCheckRecoverLinkElement.href = `${baseUrl}/users/recover`;
|
|
44
|
+
pluginCheckRecoverLinkElement.rel = "noopener,noreferrer";
|
|
45
|
+
pluginCheckMessageElements[0].appendChild(pluginCheckRecoverLinkElement);
|
|
46
|
+
|
|
47
|
+
// Download plugin big icon to it's fine rocket icon!
|
|
48
|
+
const downloadPluginElements = document.querySelectorAll(".fa-download.huge");
|
|
49
|
+
if (!downloadPluginElements || !downloadPluginElements.length) return;
|
|
50
|
+
downloadPluginElements[0].classList.remove("fa-download");
|
|
51
|
+
downloadPluginElements[0].classList.add("fa-rocket");
|
|
52
|
+
|
|
53
|
+
// Remove download CTA plugin
|
|
54
|
+
const downloadPluginButtonElements = document.querySelectorAll(".button.primary");
|
|
55
|
+
if (!downloadPluginButtonElements || !downloadPluginButtonElements.length) return;
|
|
56
|
+
downloadPluginButtonElements[0].remove();
|
|
57
|
+
|
|
58
|
+
// It's fine feedback!
|
|
59
|
+
const usersLoginFormFeedbackElements = document.querySelectorAll(".users.login.form .feedback");
|
|
60
|
+
if (!usersLoginFormFeedbackElements || !usersLoginFormFeedbackElements.length) return;
|
|
61
|
+
const usersLoginFormFeedbackElement = document.createElement('p');
|
|
62
|
+
const usersLoginFormFeedbackTextElement = document.createTextNode("You need an account to login.");
|
|
63
|
+
usersLoginFormFeedbackElement.appendChild(usersLoginFormFeedbackTextElement);
|
|
64
|
+
usersLoginFormFeedbackElements[0].appendChild(usersLoginFormFeedbackElement);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function isLegacyApi() {
|
|
68
|
+
const legacyElements = document.querySelectorAll("html.passbolt .js_main-login-section");
|
|
69
|
+
return legacyElements && legacyElements.length !== 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const AuthLogin = {legacyAuthLogin};
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {fireEvent} from "@testing-library/dom/dist/events";
|
|
16
|
+
|
|
17
|
+
const PASSWORD_INPUT_SELECTOR = "input[type='password']:not([hidden]):not([disabled]), input[type='Password']:not([hidden]):not([disabled]), input[type='PASSWORD']:not([hidden]):not([disabled])";
|
|
18
|
+
const USERNAME_INPUT_SELECTOR = "input[type='text']:not([hidden]):not([disabled]), input[type='Text']:not([hidden]):not([disabled]), input[type='TEXT']:not([hidden]):not([disabled]), input[type='email']:not([hidden]):not([disabled]), input[type='Email']:not([hidden]):not([disabled]), input[type='EMAIL']:not([hidden]):not([disabled]), input:not([type]):not([hidden]):not([disabled])";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Fill the login form.
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} formData
|
|
24
|
+
* - {string} loginUsername The username to use
|
|
25
|
+
* - {string} secret The password to use
|
|
26
|
+
* - {string} url to get domain
|
|
27
|
+
*/
|
|
28
|
+
const fillForm = function (formData) {
|
|
29
|
+
try {
|
|
30
|
+
// Validate the fillForm parameters
|
|
31
|
+
validateData(formData);
|
|
32
|
+
|
|
33
|
+
// Check the requested document, current active document is initiated from same origin
|
|
34
|
+
if (!isRequestInitiatedFromSameOrigin(formData.url, document.location.origin)) {
|
|
35
|
+
throw new Error('The request is not initiated from same origin');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Get password element
|
|
39
|
+
const passwordElement = getPasswordElement(formData);
|
|
40
|
+
let usernameElement = null;
|
|
41
|
+
// If password element exists
|
|
42
|
+
// Get username element by using `password's` parent element as reference
|
|
43
|
+
if (passwordElement !== null) {
|
|
44
|
+
usernameElement = getUsernameElementBasedOnPasswordElement(formData, passwordElement.parentElement);
|
|
45
|
+
// If username element exists, fill username
|
|
46
|
+
if (usernameElement !== null) {
|
|
47
|
+
fillInputField(usernameElement, formData.username);
|
|
48
|
+
}
|
|
49
|
+
// Fill password
|
|
50
|
+
fillInputField(passwordElement, formData.secret);
|
|
51
|
+
} else {
|
|
52
|
+
// When no password element found on the page
|
|
53
|
+
// Check for the username element by giving `document` as reference
|
|
54
|
+
usernameElement = getUsernameElement(formData, document);
|
|
55
|
+
// If username element exists, fill username
|
|
56
|
+
if (usernameElement !== null) {
|
|
57
|
+
fillInputField(usernameElement, formData.username);
|
|
58
|
+
} else {
|
|
59
|
+
throw new Error('Unable to find the username element on this page.');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Throw an error when no password and username elements found on the page
|
|
63
|
+
if (passwordElement === null && usernameElement === null) {
|
|
64
|
+
throw new Error('Unable to find the input elements on this page.');
|
|
65
|
+
} else {
|
|
66
|
+
// Success message
|
|
67
|
+
port.emit(formData.requestId, 'SUCCESS');
|
|
68
|
+
}
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error(error);
|
|
71
|
+
port.emit(formData.requestId, 'ERROR', { name: "Error", message: error.message });
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Check the requested document, top document and an iframe form is initiated from same domain.
|
|
77
|
+
*
|
|
78
|
+
* @param {string} requestedUrl The requested document url
|
|
79
|
+
* @param {string} documentUrl The current active document url
|
|
80
|
+
* @return {Boolean} true
|
|
81
|
+
*/
|
|
82
|
+
const isRequestInitiatedFromSameOrigin = function (requestedUrl, documentUrl) {
|
|
83
|
+
// requestedUrl - from quickaccess
|
|
84
|
+
const parsedRequestedUrl = new URL(requestedUrl);
|
|
85
|
+
// Request initiated document origin
|
|
86
|
+
const requestedOrigin = parsedRequestedUrl.origin;
|
|
87
|
+
// documentUrl - from current active page
|
|
88
|
+
const parsedDocumentUrl = new URL(documentUrl);
|
|
89
|
+
// Top level document/an iframe document origin
|
|
90
|
+
const documentOrigin = parsedDocumentUrl.origin;
|
|
91
|
+
|
|
92
|
+
// Requested document and top/iframe document origin is same
|
|
93
|
+
return requestedOrigin === documentOrigin;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validate the fillForm parameters
|
|
98
|
+
* @param {object} formData
|
|
99
|
+
* - {string} username The autofill request username parameter
|
|
100
|
+
* - {string} secret The autofill request secret parameter
|
|
101
|
+
* - {url} url The autofill request url parameter
|
|
102
|
+
*/
|
|
103
|
+
const validateData = function (formData) {
|
|
104
|
+
const { username, secret, url } = formData;
|
|
105
|
+
if (typeof username !== 'string') {
|
|
106
|
+
throw new Error('The parameter username is not valid');
|
|
107
|
+
}
|
|
108
|
+
if (typeof secret !== 'string') {
|
|
109
|
+
throw new Error('The parameter secret is not valid');
|
|
110
|
+
}
|
|
111
|
+
if (typeof url !== 'string') {
|
|
112
|
+
throw new Error('The parameter url is not valid');
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Fill form field.
|
|
118
|
+
* @param {DomElement} element The element to fill
|
|
119
|
+
* @param {string} value The value to use
|
|
120
|
+
*/
|
|
121
|
+
const fillInputField = function (element, value) {
|
|
122
|
+
// In order to ensure a high level of compatibility with most forms (even ones
|
|
123
|
+
// controlled by javascript), the process needs to simulate how a user will
|
|
124
|
+
// interact with the form:
|
|
125
|
+
// 1. Focus the element by clicking on it;
|
|
126
|
+
// 2. Once focused, trigger an input event to change the value of the field.
|
|
127
|
+
|
|
128
|
+
if (element || '') {
|
|
129
|
+
element.addEventListener('click', function clickHandler(event) {
|
|
130
|
+
fireEvent.input(element, { target: { value } });
|
|
131
|
+
event.target.removeEventListener(event.type, clickHandler); // Remove the event listener after it has fired
|
|
132
|
+
}, false);
|
|
133
|
+
fireEvent.click(element, { button: 0 });
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Get input elements from an iframe
|
|
139
|
+
* @param {string} type - either `password` or `username` to find elements
|
|
140
|
+
* @param {Object} formData - to check same origin request
|
|
141
|
+
*/
|
|
142
|
+
const getInputElementFromIframe = function (type, formData) {
|
|
143
|
+
const iframes = document.querySelectorAll("iframe");
|
|
144
|
+
let inputElement = null;
|
|
145
|
+
for (let i in iframes) {
|
|
146
|
+
// Get accessible iframe document
|
|
147
|
+
const contentDocument = getAccessedIframeContentDocument(iframes[i]);
|
|
148
|
+
if (!contentDocument) {
|
|
149
|
+
// The iframe document is not accessible.
|
|
150
|
+
// It is the case when the iframe is protected by CSP.
|
|
151
|
+
continue;
|
|
152
|
+
} else {
|
|
153
|
+
// Proceed to search input elements in the iframe document
|
|
154
|
+
// When it's accessible cross check whether the iframe is requested from same origin.
|
|
155
|
+
if (isRequestInitiatedFromSameOrigin(formData.url, contentDocument.location.origin)) {
|
|
156
|
+
inputElement = findInputElementInIframe(type, contentDocument);
|
|
157
|
+
if (inputElement || '') {
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return inputElement;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Returns an accessible iframe document in the page
|
|
168
|
+
* @param {DomElement} ifram found on the page
|
|
169
|
+
* @return {DomElement} iframe document
|
|
170
|
+
*/
|
|
171
|
+
const getAccessedIframeContentDocument = function (iframe) {
|
|
172
|
+
let iframeContentDocument = null;
|
|
173
|
+
try {
|
|
174
|
+
iframeContentDocument = iframe.contentDocument;
|
|
175
|
+
} catch (error) {
|
|
176
|
+
console.error(error);
|
|
177
|
+
}
|
|
178
|
+
return iframeContentDocument;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Returns an input element in the iframe
|
|
183
|
+
* @param {string} type - either `password` or `username` to find elements
|
|
184
|
+
* @param {DomElement} iframe document to start the search.
|
|
185
|
+
* @return {DomElement} iframe document
|
|
186
|
+
*/
|
|
187
|
+
const findInputElementInIframe = function (type, iframeDocument) {
|
|
188
|
+
let inputElement = null;
|
|
189
|
+
if (type === 'password') {
|
|
190
|
+
inputElement = iframeDocument.querySelectorAll(PASSWORD_INPUT_SELECTOR);
|
|
191
|
+
// Password element has been found.
|
|
192
|
+
if (inputElement.length) {
|
|
193
|
+
return inputElement[0];
|
|
194
|
+
}
|
|
195
|
+
} else if (type === 'username') {
|
|
196
|
+
inputElement = iframeDocument.querySelectorAll(USERNAME_INPUT_SELECTOR);
|
|
197
|
+
if (inputElement.length) {
|
|
198
|
+
// When username element found, extract it from an array of dom elements.
|
|
199
|
+
inputElement = extractUsernameElementWithFallback(inputElement);
|
|
200
|
+
// Username element has been found.
|
|
201
|
+
if (inputElement) {
|
|
202
|
+
return inputElement;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Find the password element on the page.
|
|
211
|
+
* @return {DomElement/null}
|
|
212
|
+
*/
|
|
213
|
+
const getPasswordElement = function (formData) {
|
|
214
|
+
let passwordElements = document.querySelectorAll(PASSWORD_INPUT_SELECTOR);
|
|
215
|
+
|
|
216
|
+
let passwordElement = null;
|
|
217
|
+
|
|
218
|
+
// A password element has been found.
|
|
219
|
+
if (passwordElements.length) {
|
|
220
|
+
passwordElement = passwordElements[0];
|
|
221
|
+
} else {
|
|
222
|
+
// If no password element found on the page, the login form could be served by an iframe.
|
|
223
|
+
// Search the password element in the page iframes. By instance reddit.com login page serves its login
|
|
224
|
+
// form in an iframe.
|
|
225
|
+
passwordElement = getInputElementFromIframe('password', formData);
|
|
226
|
+
}
|
|
227
|
+
return passwordElement;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Find the username element on the page based on password's parent as reference element.
|
|
232
|
+
* @param {DomElement} referenceElement The element reference to start the search.
|
|
233
|
+
* @return {DomElement/null}
|
|
234
|
+
*/
|
|
235
|
+
const getUsernameElementBasedOnPasswordElement = function (formData, referenceElement) {
|
|
236
|
+
// No parent element found.
|
|
237
|
+
if (referenceElement || '') {
|
|
238
|
+
const parentElement = referenceElement.parentElement;
|
|
239
|
+
if (!parentElement) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
let usernameElement = null;
|
|
245
|
+
|
|
246
|
+
// The username field can be an input field of type email or text.
|
|
247
|
+
const elements = referenceElement.querySelectorAll(USERNAME_INPUT_SELECTOR);
|
|
248
|
+
|
|
249
|
+
// No input fields found in the reference element.
|
|
250
|
+
// Search in the parent.
|
|
251
|
+
if (!elements.length) {
|
|
252
|
+
return getUsernameElementBasedOnPasswordElement(formData, referenceElement.parentElement);
|
|
253
|
+
} else {
|
|
254
|
+
// When username element found, extract it from an array of dom elements.
|
|
255
|
+
usernameElement = extractUsernameElementWithFallback(elements);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// If no username/email element found on the page, the login form could be served by an iframe.
|
|
259
|
+
// Search the username/email element in the page iframes. By instance reddit.com signup page serves its login
|
|
260
|
+
// form in an iframe.
|
|
261
|
+
if (!usernameElement) {
|
|
262
|
+
usernameElement = getInputElementFromIframe('username', formData);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// A username element has been found.
|
|
266
|
+
return usernameElement;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Find the username element on the page.
|
|
271
|
+
* @param {DomElement} fallbackUsernameElement The element reference to start the search.
|
|
272
|
+
* @return {DomElement/null}
|
|
273
|
+
*/
|
|
274
|
+
const getUsernameElement = function (formData, fallbackUsernameElement) {
|
|
275
|
+
let usernameElement = null;
|
|
276
|
+
|
|
277
|
+
// The username field can be an input field of type email or text.
|
|
278
|
+
const elements = fallbackUsernameElement.querySelectorAll(USERNAME_INPUT_SELECTOR);
|
|
279
|
+
|
|
280
|
+
// When username element found, extract it from an array of dom elements.
|
|
281
|
+
if (elements.length) {
|
|
282
|
+
usernameElement = extractUsernameElementWithFallback(elements);
|
|
283
|
+
} else {
|
|
284
|
+
// If no username/email element found on the page, the login form could be served by an iframe.
|
|
285
|
+
// Search the username/email element in the page iframes. By instance reddit.com signup page serves its login
|
|
286
|
+
// form in an iframe.
|
|
287
|
+
usernameElement = getInputElementFromIframe('username', formData);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// A username element has been found.
|
|
291
|
+
return usernameElement;
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Extract the username element from an array of dom elements.
|
|
296
|
+
* @param {array} elements An array of dom elements
|
|
297
|
+
* @return {DomElement/null}
|
|
298
|
+
*/
|
|
299
|
+
const extractUsernameElementWithFallback = function (elements) {
|
|
300
|
+
let usernameElement = null;
|
|
301
|
+
// Filter elements to find the field that has the highest odd to be the username field.
|
|
302
|
+
const inputAttributes = ['id', 'class', 'name', 'placeholder'];
|
|
303
|
+
// @todo Translations should be added in order to increase the algorithm success.
|
|
304
|
+
const inputAttrValues = ['user', 'email', 'name', 'login'];
|
|
305
|
+
|
|
306
|
+
// Iterate over visible input list to find the matching input based on filter elements.
|
|
307
|
+
foundBreakPoint: {
|
|
308
|
+
for (let i = 0; i < elements.length; i++) {
|
|
309
|
+
const element = elements[i];
|
|
310
|
+
for (let j = 0; j < inputAttributes.length; j++) {
|
|
311
|
+
for (let k = 0; k < inputAttrValues.length; k++) {
|
|
312
|
+
const matchedInput = element.querySelectorAll(`input[${inputAttributes[j]}*='${inputAttrValues[k]}' i]`);
|
|
313
|
+
if (matchedInput.length) {
|
|
314
|
+
usernameElement = matchedInput[0];
|
|
315
|
+
break foundBreakPoint;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// When filters fail to find matched elements on the page, use first element from an array of dom elements as username element
|
|
323
|
+
if (!usernameElement) {
|
|
324
|
+
usernameElement = elements[0];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Return either matched username element based on filters or fallback element
|
|
328
|
+
return usernameElement;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
export const Autofill = {fillForm};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {QuickAccessEvent} from "./Events/Quickaccess/QuickAccessEvent";
|
|
16
|
+
import {AuthLogin} from "./AuthLogin/AuthLogin";
|
|
17
|
+
import InFormManager from "./lib/InForm/InFormManager";
|
|
18
|
+
import SiteSettings from "../shared/lib/Settings/SiteSettings";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Bootstrap the browser integration with browsed pages.
|
|
22
|
+
*/
|
|
23
|
+
async function init() {
|
|
24
|
+
AuthLogin.legacyAuthLogin();
|
|
25
|
+
|
|
26
|
+
if (!await isBrowserExtensionConfigured()) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
QuickAccessEvent.fillForm();
|
|
31
|
+
|
|
32
|
+
const siteSettings = await getSiteSettings();
|
|
33
|
+
if (siteSettings?.canIUse('inFormIntegration')) {
|
|
34
|
+
InFormManager.initialize();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if the browser extension is configured.
|
|
40
|
+
* @returns {Promise<unknown>}
|
|
41
|
+
*/
|
|
42
|
+
async function isBrowserExtensionConfigured() {
|
|
43
|
+
try {
|
|
44
|
+
return await port.request('passbolt.addon.is-configured');
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error(error);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Get the site settings.
|
|
53
|
+
* @returns {Promise<SiteSettings>}
|
|
54
|
+
*/
|
|
55
|
+
async function getSiteSettings() {
|
|
56
|
+
try {
|
|
57
|
+
const siteSettingsDto = await port.request('passbolt.organization-settings.get', false);
|
|
58
|
+
return new SiteSettings(siteSettingsDto);
|
|
59
|
+
} catch(error) {
|
|
60
|
+
console.error(error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const BrowserIntegrationBootstrap = {init};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {Autofill} from "../../Autofill/Autofill";
|
|
16
|
+
|
|
17
|
+
function fillForm() {
|
|
18
|
+
port.on('passbolt.quickaccess.fill-form', function (requestId, username, secret, url) {
|
|
19
|
+
const quickaccessFormData = {requestId, username, secret, url};
|
|
20
|
+
Autofill.fillForm(quickaccessFormData);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const QuickAccessEvent = {fillForm};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
import AppContext from "./contexts/AppContext";
|
|
18
|
+
import AskInFormMenuDisplay from "./components/AskInFormMenuDisplay/AskInFormMenuDisplay";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Entry point of the in-fprm call to action
|
|
22
|
+
*/
|
|
23
|
+
class ExtInFormCallToAction extends React.Component {
|
|
24
|
+
constructor(props) {
|
|
25
|
+
super(props);
|
|
26
|
+
this.state = this.defaultState;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Returns the default stare
|
|
31
|
+
*/
|
|
32
|
+
get defaultState() {
|
|
33
|
+
return {
|
|
34
|
+
port: this.props.port
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Render the component
|
|
40
|
+
*/
|
|
41
|
+
render() {
|
|
42
|
+
return (
|
|
43
|
+
<AppContext.Provider value={this.state}>
|
|
44
|
+
<div className="web-integration">
|
|
45
|
+
<AskInFormMenuDisplay />
|
|
46
|
+
</div>
|
|
47
|
+
</AppContext.Provider>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
ExtInFormCallToAction.propTypes = {
|
|
53
|
+
port: PropTypes.object
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export default ExtInFormCallToAction;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2021 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.3.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
import AppContext from "./contexts/AppContext";
|
|
18
|
+
import DisplayInFormMenu from "./components/DisplayInFormMenu/DisplayInFormMenu";
|
|
19
|
+
import TranslationProvider from "../shared/components/Internationalisation/TranslationProvider";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Entry point of the in-form menu
|
|
23
|
+
*/
|
|
24
|
+
class ExtInForm extends React.Component {
|
|
25
|
+
constructor(props) {
|
|
26
|
+
super(props);
|
|
27
|
+
this.state = this.defaultState;
|
|
28
|
+
this.initLocale();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Returns the default stare
|
|
33
|
+
*/
|
|
34
|
+
get defaultState() {
|
|
35
|
+
return {
|
|
36
|
+
locale: "en-UK",
|
|
37
|
+
port: this.props.port
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Init the locale
|
|
43
|
+
* @returns {Promise<void>}
|
|
44
|
+
*/
|
|
45
|
+
async initLocale() {
|
|
46
|
+
const {locale} = await this.props.port.request("passbolt.locale.get");
|
|
47
|
+
this.setState({locale});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Render the component
|
|
52
|
+
*/
|
|
53
|
+
render() {
|
|
54
|
+
return (
|
|
55
|
+
<AppContext.Provider value={this.state}>
|
|
56
|
+
<TranslationProvider loadingPath="/data/locales/{{lng}}/{{ns}}.json" locale={this.state.locale}>
|
|
57
|
+
<div className="web-integration">
|
|
58
|
+
<DisplayInFormMenu/>
|
|
59
|
+
</div>
|
|
60
|
+
</TranslationProvider>
|
|
61
|
+
</AppContext.Provider>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
ExtInForm.propTypes = {
|
|
67
|
+
port: PropTypes.object
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export default ExtInForm;
|