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,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 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) 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.4.0
|
|
13
|
+
*/
|
|
14
|
+
import React from "react";
|
|
15
|
+
import PropTypes from "prop-types";
|
|
16
|
+
import AppContext from "../../../contexts/AppContext";
|
|
17
|
+
import {withResourceWorkspace} from "../../../contexts/ResourceWorkspaceContext";
|
|
18
|
+
|
|
19
|
+
class DisplayDragResource extends React.Component {
|
|
20
|
+
/**
|
|
21
|
+
* the resource selected
|
|
22
|
+
* @returns {*}
|
|
23
|
+
*/
|
|
24
|
+
get selectedResources() {
|
|
25
|
+
return this.props.resourceWorkspaceContext.selectedResources;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* is multiple resources selected
|
|
30
|
+
* @returns {boolean}
|
|
31
|
+
*/
|
|
32
|
+
isMultipleSelected() {
|
|
33
|
+
return this.props.resourceWorkspaceContext.selectedResources.length > 1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get the number of resources
|
|
38
|
+
* @returns {string|*}
|
|
39
|
+
*/
|
|
40
|
+
get numberOfResources() {
|
|
41
|
+
return this.props.resourceWorkspaceContext.selectedResources.length > 99 ? '99+' : this.props.resourceWorkspaceContext.selectedResources.length;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Render the component.
|
|
46
|
+
* @returns {JSX}
|
|
47
|
+
*/
|
|
48
|
+
render() {
|
|
49
|
+
return (
|
|
50
|
+
<div className={`${this.isMultipleSelected() ? "drag-and-drop-multiple" : "drag-and-drop"}`}>
|
|
51
|
+
{this.selectedResources[0].name}
|
|
52
|
+
{this.isMultipleSelected() &&
|
|
53
|
+
<span className="count">
|
|
54
|
+
{this.numberOfResources}
|
|
55
|
+
</span>
|
|
56
|
+
}
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
DisplayDragResource.contextType = AppContext;
|
|
63
|
+
|
|
64
|
+
DisplayDragResource.propTypes = {
|
|
65
|
+
resourceWorkspaceContext: PropTypes.any
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default withResourceWorkspace(DisplayDragResource);
|
package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js
CHANGED
|
@@ -29,6 +29,8 @@ import {withContextualMenu} from "../../../contexts/ContextualMenuContext";
|
|
|
29
29
|
import sanitizeUrl, {urlProtocols} from "../../../lib/Sanitize/sanitizeUrl";
|
|
30
30
|
import {Trans, withTranslation} from "react-i18next";
|
|
31
31
|
import {DateTime} from "luxon";
|
|
32
|
+
import {withDrag} from "../../../contexts/DragContext";
|
|
33
|
+
import DisplayDragResource from "./DisplayDragResource";
|
|
32
34
|
|
|
33
35
|
/**
|
|
34
36
|
* This component allows to display the filtered resources into a grid
|
|
@@ -53,7 +55,6 @@ class DisplayResourcesList extends React.Component {
|
|
|
53
55
|
return {
|
|
54
56
|
resources: [], // The current list of resources to display
|
|
55
57
|
selectStrategy: "",
|
|
56
|
-
previewedPassword: null, // The previewed password.
|
|
57
58
|
};
|
|
58
59
|
}
|
|
59
60
|
|
|
@@ -109,7 +110,6 @@ class DisplayResourcesList extends React.Component {
|
|
|
109
110
|
*/
|
|
110
111
|
createRefs() {
|
|
111
112
|
this.listRef = React.createRef();
|
|
112
|
-
this.dragFeedbackElement = React.createRef();
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/**
|
|
@@ -130,7 +130,6 @@ class DisplayResourcesList extends React.Component {
|
|
|
130
130
|
async handleResourceSelected(event, resource) {
|
|
131
131
|
event.preventDefault();
|
|
132
132
|
event.stopPropagation();
|
|
133
|
-
|
|
134
133
|
await this.selectResource(resource, event);
|
|
135
134
|
}
|
|
136
135
|
|
|
@@ -164,6 +163,8 @@ class DisplayResourcesList extends React.Component {
|
|
|
164
163
|
}
|
|
165
164
|
|
|
166
165
|
async handleCheckboxWrapperClick(event, resource) {
|
|
166
|
+
// Prevent event fired twice due to the input + label
|
|
167
|
+
event.preventDefault();
|
|
167
168
|
/*
|
|
168
169
|
* We want the td to extend the clickable area of the checkbox.
|
|
169
170
|
* If we propagate the event, the tr will listen to the click and select only the clicked row.
|
|
@@ -216,7 +217,7 @@ class DisplayResourcesList extends React.Component {
|
|
|
216
217
|
* @param resource A resource
|
|
217
218
|
*/
|
|
218
219
|
isResourceSelected(resource) {
|
|
219
|
-
return this.
|
|
220
|
+
return this.selectedResources.some(selectedResource => resource.id === selectedResource.id);
|
|
220
221
|
}
|
|
221
222
|
|
|
222
223
|
async handleCopyUsernameClick(ev, resource) {
|
|
@@ -377,17 +378,15 @@ class DisplayResourcesList extends React.Component {
|
|
|
377
378
|
if (!this.isResourceSelected(resource)) {
|
|
378
379
|
await this.props.resourceWorkspaceContext.onResourceSelected.single(resource);
|
|
379
380
|
}
|
|
380
|
-
event.dataTransfer.setDragImage(this.dragFeedbackElement.current, 5, 5);
|
|
381
381
|
const draggedItems = {resources: this.props.resourceWorkspaceContext.selectedResources, folders: []};
|
|
382
|
-
|
|
383
|
-
triggerEvent.initCustomEvent("passbolt.resources.drag-start", true, true, draggedItems);
|
|
384
|
-
document.dispatchEvent(triggerEvent);
|
|
382
|
+
this.props.dragContext.onDragStart(event, DisplayDragResource, draggedItems);
|
|
385
383
|
}
|
|
386
384
|
|
|
385
|
+
/**
|
|
386
|
+
* Handle when the user stop dragging content.
|
|
387
|
+
*/
|
|
387
388
|
handleDragEndEvent() {
|
|
388
|
-
|
|
389
|
-
trigerEvent.initCustomEvent("passbolt.resources.drag-end", true, true);
|
|
390
|
-
document.dispatchEvent(trigerEvent);
|
|
389
|
+
this.props.dragContext.onDragEnd();
|
|
391
390
|
}
|
|
392
391
|
|
|
393
392
|
/**
|
|
@@ -549,7 +548,9 @@ class DisplayResourcesList extends React.Component {
|
|
|
549
548
|
<div className="ready">
|
|
550
549
|
<div className="input checkbox">
|
|
551
550
|
<input type="checkbox" id={`checkbox_multiple_select_checkbox_${resource.id}`} checked={isSelected} readOnly={true}/>
|
|
552
|
-
<label htmlFor={`checkbox_multiple_select_checkbox_${resource.id}`}
|
|
551
|
+
<label htmlFor={`checkbox_multiple_select_checkbox_${resource.id}`}>
|
|
552
|
+
<span className="visually-hidden"><Trans>Select resource</Trans></span>
|
|
553
|
+
</label>
|
|
553
554
|
</div>
|
|
554
555
|
</div>
|
|
555
556
|
</td>
|
|
@@ -608,37 +609,6 @@ class DisplayResourcesList extends React.Component {
|
|
|
608
609
|
);
|
|
609
610
|
}
|
|
610
611
|
|
|
611
|
-
/**
|
|
612
|
-
* Render the drag tooltip of the selected resources
|
|
613
|
-
* @returns {JSX.Element}
|
|
614
|
-
*/
|
|
615
|
-
renderDragFeedback() {
|
|
616
|
-
const isSelected = this.props.resourceWorkspaceContext.selectedResources.length > 0;
|
|
617
|
-
const isMultipleSelected = this.props.resourceWorkspaceContext.selectedResources.length > 1;
|
|
618
|
-
let dragFeedbackText = "";
|
|
619
|
-
let dragElementClassname = "";
|
|
620
|
-
|
|
621
|
-
if (isSelected) {
|
|
622
|
-
const isSelected = resource => resource.id === this.props.resourceWorkspaceContext.selectedResources[0].id;
|
|
623
|
-
const firstSelectedResource = this.resources.find(isSelected);
|
|
624
|
-
if (firstSelectedResource) {
|
|
625
|
-
dragElementClassname = isMultipleSelected ? "drag-and-drop-multiple" : "drag-and-drop";
|
|
626
|
-
dragFeedbackText = firstSelectedResource.name;
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
return (
|
|
631
|
-
<div ref={this.dragFeedbackElement} className={dragElementClassname}>
|
|
632
|
-
{dragFeedbackText}
|
|
633
|
-
{isMultipleSelected &&
|
|
634
|
-
<span className="count">
|
|
635
|
-
{this.props.resourceWorkspaceContext.selectedResources.length}
|
|
636
|
-
</span>
|
|
637
|
-
}
|
|
638
|
-
</div>
|
|
639
|
-
);
|
|
640
|
-
}
|
|
641
|
-
|
|
642
612
|
/**
|
|
643
613
|
* Get the translate function
|
|
644
614
|
* @returns {function(...[*]=)}
|
|
@@ -674,7 +644,7 @@ class DisplayResourcesList extends React.Component {
|
|
|
674
644
|
<p><Trans>Share a password with this group or wait for a team member to share one with this group.</Trans></p>
|
|
675
645
|
</div>
|
|
676
646
|
}
|
|
677
|
-
{isEmpty && filterType === ResourceWorkspaceFilterTypes.FOLDER &&
|
|
647
|
+
{isEmpty && (filterType === ResourceWorkspaceFilterTypes.FOLDER || filterType === ResourceWorkspaceFilterTypes.ROOT_FOLDER) &&
|
|
678
648
|
<div className="empty-content">
|
|
679
649
|
<h2><Trans>No passwords in this folder yet.</Trans></h2>
|
|
680
650
|
<p><Trans>It does feel a bit empty here.</Trans></p>
|
|
@@ -706,7 +676,6 @@ class DisplayResourcesList extends React.Component {
|
|
|
706
676
|
}
|
|
707
677
|
{!isEmpty &&
|
|
708
678
|
<React.Fragment>
|
|
709
|
-
{this.renderDragFeedback()}
|
|
710
679
|
<div className="tableview-header">
|
|
711
680
|
<table>
|
|
712
681
|
<thead>
|
|
@@ -714,11 +683,14 @@ class DisplayResourcesList extends React.Component {
|
|
|
714
683
|
<th className="cell-multiple-select selections s-cell">
|
|
715
684
|
<div className="input checkbox">
|
|
716
685
|
<input
|
|
686
|
+
id="passwords-select-all"
|
|
717
687
|
type="checkbox"
|
|
718
688
|
name="select all"
|
|
719
689
|
checked={selectAll}
|
|
720
690
|
onChange={this.handleSelectAllChange}/>
|
|
721
|
-
<label htmlFor="
|
|
691
|
+
<label htmlFor="passwords-select-all">
|
|
692
|
+
<span className="visually-hidden">select all</span>
|
|
693
|
+
</label>
|
|
722
694
|
</div>
|
|
723
695
|
</th>
|
|
724
696
|
<th className="cell-favorite selections s-cell sortable">
|
|
@@ -840,7 +812,8 @@ DisplayResourcesList.propTypes = {
|
|
|
840
812
|
actionFeedbackContext: PropTypes.any, // The action feedback context
|
|
841
813
|
contextualMenuContext: PropTypes.any, // The contextual menu context
|
|
842
814
|
history: PropTypes.any,
|
|
815
|
+
dragContext: PropTypes.any,
|
|
843
816
|
t: PropTypes.func, // The translation function
|
|
844
817
|
};
|
|
845
818
|
|
|
846
|
-
export default withAppContext(withRouter(withActionFeedback(withContextualMenu(withResourceWorkspace(withTranslation('common')(DisplayResourcesList))))));
|
|
819
|
+
export default withAppContext(withRouter(withActionFeedback(withContextualMenu(withResourceWorkspace(withDrag(withTranslation('common')(DisplayResourcesList)))))));
|
|
@@ -20,6 +20,7 @@ import AppContext from "../../../contexts/AppContext";
|
|
|
20
20
|
import {BrowserRouter as Router} from "react-router-dom";
|
|
21
21
|
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
22
22
|
import DisplayResourcesList from "./DisplayResourcesList";
|
|
23
|
+
import {DragContext} from "../../../contexts/DragContext";
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* The DisplayResourcesListPage component represented as a page
|
|
@@ -35,7 +36,9 @@ export default class DisplayResourcesListPage {
|
|
|
35
36
|
<MockTranslationProvider>
|
|
36
37
|
<AppContext.Provider value={appContext}>
|
|
37
38
|
<Router>
|
|
38
|
-
<
|
|
39
|
+
<DragContext.Provider value={props.dragContext}>
|
|
40
|
+
<DisplayResourcesList {...props}/>
|
|
41
|
+
</DragContext.Provider>
|
|
39
42
|
</Router>
|
|
40
43
|
</AppContext.Provider>
|
|
41
44
|
</MockTranslationProvider>
|
|
@@ -292,7 +292,7 @@ class DisplayResourcesWorkspaceMenu extends React.Component {
|
|
|
292
292
|
* Returns true if the user can export
|
|
293
293
|
*/
|
|
294
294
|
canExport() {
|
|
295
|
-
return this.hasResourceSelected() && this.props.context.siteSettings.
|
|
295
|
+
return this.hasResourceSelected() && this.props.context.siteSettings.canIUse("export");
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
/**
|
|
@@ -457,7 +457,7 @@ class DisplayResourcesWorkspaceMenu extends React.Component {
|
|
|
457
457
|
<li>
|
|
458
458
|
<a className={`button button-toggle info ${this.hasLockDetail() ? "selected" : ""}`}
|
|
459
459
|
onClick={this.handleViewDetailClickEvent}>
|
|
460
|
-
<Icon name="info-circle"/>
|
|
460
|
+
<Icon name="info-circle" big={true}/>
|
|
461
461
|
<span className="visuallyhidden"><Trans>View detail</Trans></span>
|
|
462
462
|
</a>
|
|
463
463
|
</li>
|
|
@@ -12,13 +12,7 @@ export function defaultAppContext(appContext) {
|
|
|
12
12
|
port: new MockPort(),
|
|
13
13
|
userSettings: new UserSettings(userSettingsFixture),
|
|
14
14
|
siteSettings: {
|
|
15
|
-
|
|
16
|
-
passbolt: {
|
|
17
|
-
plugins: {
|
|
18
|
-
export: 'something'
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
15
|
+
canIUse: () => true
|
|
22
16
|
}
|
|
23
17
|
};
|
|
24
18
|
return Object.assign(defaultAppContext, appContext || {});
|
|
@@ -16,7 +16,6 @@ import PropTypes from "prop-types";
|
|
|
16
16
|
import {withAppContext} from "../../../contexts/AppContext";
|
|
17
17
|
import Icon from "../../Common/Icons/Icon";
|
|
18
18
|
import Tooltip from "../../Common/Tooltip/Tooltip";
|
|
19
|
-
import SecretComplexity from "../../../../shared/lib/Secret/SecretComplexity";
|
|
20
19
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
21
20
|
import {withDialog} from "../../../contexts/DialogContext";
|
|
22
21
|
import NotifyError from "../../Common/Error/NotifyError/NotifyError";
|
|
@@ -25,6 +24,10 @@ import FormSubmitButton from "../../Common/Inputs/FormSubmitButton/FormSubmitBut
|
|
|
25
24
|
import FormCancelButton from "../../Common/Inputs/FormSubmitButton/FormCancelButton";
|
|
26
25
|
import {withResourceWorkspace} from "../../../contexts/ResourceWorkspaceContext";
|
|
27
26
|
import {Trans, withTranslation} from "react-i18next";
|
|
27
|
+
import {SecretGenerator} from "../../../../shared/lib/SecretGenerator/SecretGenerator";
|
|
28
|
+
import GenerateResourcePassword from "../../ResourcePassword/GenerateResourcePassword/GenerateResourcePassword";
|
|
29
|
+
import {withResourcePasswordGeneratorContext} from "../../../contexts/ResourcePasswordGeneratorContext";
|
|
30
|
+
import {SecretGeneratorComplexity} from "../../../../shared/lib/SecretGenerator/SecretGeneratorComplexity";
|
|
28
31
|
|
|
29
32
|
/** Resource password max length */
|
|
30
33
|
const RESOURCE_PASSWORD_MAX_LENGTH = 4096;
|
|
@@ -74,6 +77,7 @@ class EditResource extends Component {
|
|
|
74
77
|
this.handleNameInputKeyUp = this.handleNameInputKeyUp.bind(this);
|
|
75
78
|
this.handlePasswordInputKeyUp = this.handlePasswordInputKeyUp.bind(this);
|
|
76
79
|
this.handleViewPasswordButtonClick = this.handleViewPasswordButtonClick.bind(this);
|
|
80
|
+
this.handleOpenGenerator = this.handleOpenGenerator.bind(this);
|
|
77
81
|
this.handleGeneratePasswordButtonClick = this.handleGeneratePasswordButtonClick.bind(this);
|
|
78
82
|
this.handleDescriptionInputFocus = this.handleDescriptionInputFocus.bind(this);
|
|
79
83
|
this.handleDescriptionInputBlur = this.handleDescriptionInputBlur.bind(this);
|
|
@@ -90,10 +94,21 @@ class EditResource extends Component {
|
|
|
90
94
|
this.descriptionInputRef = React.createRef();
|
|
91
95
|
}
|
|
92
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Whenever the component has been mounted
|
|
99
|
+
*/
|
|
93
100
|
componentDidMount() {
|
|
94
101
|
this.initialize();
|
|
95
102
|
}
|
|
96
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Whenever the component has been changed (props)
|
|
106
|
+
* @param prevProps The previous component props
|
|
107
|
+
*/
|
|
108
|
+
componentDidUpdate(prevProps) {
|
|
109
|
+
this.handleLastGeneratedPasswordChanged(prevProps.resourcePasswordGeneratorContext.lastGeneratedPassword);
|
|
110
|
+
}
|
|
111
|
+
|
|
97
112
|
async initialize() {
|
|
98
113
|
const isDecrypted = await this.decryptSecret();
|
|
99
114
|
if (isDecrypted) {
|
|
@@ -102,6 +117,28 @@ class EditResource extends Component {
|
|
|
102
117
|
}
|
|
103
118
|
}
|
|
104
119
|
|
|
120
|
+
/*
|
|
121
|
+
* =============================================================
|
|
122
|
+
* Resource password generator
|
|
123
|
+
* =============================================================
|
|
124
|
+
*/
|
|
125
|
+
get currentGeneratorConfiguration() {
|
|
126
|
+
const type = this.props.resourcePasswordGeneratorContext.settings.default_generator;
|
|
127
|
+
return this.props.resourcePasswordGeneratorContext.settings.generators.find(generator => generator.type === type);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Whenever a new password has been generated through the generator
|
|
132
|
+
* @param previousLastGeneratedPassword The previous last generated password value
|
|
133
|
+
*/
|
|
134
|
+
handleLastGeneratedPasswordChanged(previousLastGeneratedPassword) {
|
|
135
|
+
const currentLastGeneratedPassword = this.props.resourcePasswordGeneratorContext.lastGeneratedPassword;
|
|
136
|
+
const hasLastGeneratedPasswordChanged = previousLastGeneratedPassword !== currentLastGeneratedPassword;
|
|
137
|
+
if (hasLastGeneratedPasswordChanged) {
|
|
138
|
+
this.setState({password: currentLastGeneratedPassword});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
105
142
|
/*
|
|
106
143
|
* =============================================================
|
|
107
144
|
* Resource type helpers
|
|
@@ -457,10 +494,17 @@ class EditResource extends Component {
|
|
|
457
494
|
if (this.hasAllInputDisabled()) {
|
|
458
495
|
return;
|
|
459
496
|
}
|
|
460
|
-
const password =
|
|
497
|
+
const password = SecretGenerator.generate(this.currentGeneratorConfiguration);
|
|
461
498
|
this.setState({password: password});
|
|
462
499
|
}
|
|
463
500
|
|
|
501
|
+
/**
|
|
502
|
+
* Whenever the user wants to open the password generator
|
|
503
|
+
*/
|
|
504
|
+
handleOpenGenerator() {
|
|
505
|
+
this.props.dialogContext.open(GenerateResourcePassword);
|
|
506
|
+
}
|
|
507
|
+
|
|
464
508
|
/**
|
|
465
509
|
* Handle close button click.
|
|
466
510
|
*/
|
|
@@ -539,52 +583,7 @@ class EditResource extends Component {
|
|
|
539
583
|
return plaintext;
|
|
540
584
|
}
|
|
541
585
|
|
|
542
|
-
/*
|
|
543
|
-
* =============================================================
|
|
544
|
-
* Security token style
|
|
545
|
-
* =============================================================
|
|
546
|
-
*/
|
|
547
|
-
/**
|
|
548
|
-
* Get the password input style.
|
|
549
|
-
* @return {Object}
|
|
550
|
-
*/
|
|
551
|
-
getPasswordInputStyle() {
|
|
552
|
-
if (this.state.passwordInputHasFocus) {
|
|
553
|
-
const backgroundColor = this.props.context.userSettings.getSecurityTokenBackgroundColor();
|
|
554
|
-
const textColor = this.props.context.userSettings.getSecurityTokenTextColor();
|
|
555
586
|
|
|
556
|
-
return {
|
|
557
|
-
background: backgroundColor,
|
|
558
|
-
color: textColor
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
return {
|
|
563
|
-
background: "",
|
|
564
|
-
color: "",
|
|
565
|
-
};
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
/**
|
|
569
|
-
* Get the security token style.
|
|
570
|
-
* @return {Object}
|
|
571
|
-
*/
|
|
572
|
-
getSecurityTokenStyle() {
|
|
573
|
-
const backgroundColor = this.props.context.userSettings.getSecurityTokenBackgroundColor();
|
|
574
|
-
const textColor = this.props.context.userSettings.getSecurityTokenTextColor();
|
|
575
|
-
|
|
576
|
-
if (this.state.passwordInputHasFocus) {
|
|
577
|
-
return {
|
|
578
|
-
background: textColor,
|
|
579
|
-
color: backgroundColor,
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
return {
|
|
584
|
-
background: backgroundColor,
|
|
585
|
-
color: textColor,
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
587
|
|
|
589
588
|
/*
|
|
590
589
|
* =============================================================
|
|
@@ -638,6 +637,14 @@ class EditResource extends Component {
|
|
|
638
637
|
return (this.state.isSecretDecrypting && this.mustEncryptDescription());
|
|
639
638
|
}
|
|
640
639
|
|
|
640
|
+
/**
|
|
641
|
+
* Returns true if the logged in user can use the password generator capability.
|
|
642
|
+
* @returns {boolean}
|
|
643
|
+
*/
|
|
644
|
+
get canUsePasswordGenerator() {
|
|
645
|
+
return this.props.context.siteSettings.canIUse('passwordGenerator');
|
|
646
|
+
}
|
|
647
|
+
|
|
641
648
|
/**
|
|
642
649
|
* Get the translate function
|
|
643
650
|
* @returns {function(...[*]=)}
|
|
@@ -652,10 +659,8 @@ class EditResource extends Component {
|
|
|
652
659
|
* =============================================================
|
|
653
660
|
*/
|
|
654
661
|
render() {
|
|
655
|
-
const
|
|
656
|
-
const
|
|
657
|
-
const securityTokenCode = this.props.context.userSettings.getSecurityTokenCode();
|
|
658
|
-
const passwordStrength = SecretComplexity.getStrength(this.state.password);
|
|
662
|
+
const passwordEntropy = SecretGenerator.entropy(this.state.password);
|
|
663
|
+
const passwordStrength = SecretGeneratorComplexity.strength(passwordEntropy);
|
|
659
664
|
const passwordPlaceholder = this.getPasswordInputPlaceholder();
|
|
660
665
|
/*
|
|
661
666
|
* The parser can't find the translation for passwordStrength.label
|
|
@@ -680,7 +685,7 @@ class EditResource extends Component {
|
|
|
680
685
|
disabled={this.hasAllInputDisabled()} ref={this.nameInputRef} className="required fluid" maxLength="64"
|
|
681
686
|
required="required" autoComplete="off" autoFocus={true}/>
|
|
682
687
|
{this.state.nameError &&
|
|
683
|
-
<div className="name error
|
|
688
|
+
<div className="name error-message">{this.state.nameError}</div>
|
|
684
689
|
}
|
|
685
690
|
</div>
|
|
686
691
|
<div className={`input text ${this.state.uriError ? "error" : ""}`}>
|
|
@@ -689,7 +694,7 @@ class EditResource extends Component {
|
|
|
689
694
|
autoComplete="off" value={this.state.uri} onChange={this.handleInputChange} placeholder={this.translate("URI")}
|
|
690
695
|
disabled={this.hasAllInputDisabled()}/>
|
|
691
696
|
{this.state.uriError &&
|
|
692
|
-
<div className="error
|
|
697
|
+
<div className="error-message">{this.state.uriError}</div>
|
|
693
698
|
}
|
|
694
699
|
</div>
|
|
695
700
|
<div className={`input text ${this.state.usernameError ? "error" : ""}`}>
|
|
@@ -698,7 +703,7 @@ class EditResource extends Component {
|
|
|
698
703
|
autoComplete="off" value={this.state.username} onChange={this.handleInputChange} placeholder={this.translate("Username")}
|
|
699
704
|
disabled={this.hasAllInputDisabled()}/>
|
|
700
705
|
{this.state.usernameError &&
|
|
701
|
-
<div className="error
|
|
706
|
+
<div className="error-message">{this.state.usernameError}</div>
|
|
702
707
|
}
|
|
703
708
|
</div>
|
|
704
709
|
<div className={`input-password-wrapper input required ${this.state.passwordError ? "error" : ""}`}>
|
|
@@ -709,18 +714,16 @@ class EditResource extends Component {
|
|
|
709
714
|
onKeyUp={this.handlePasswordInputKeyUp} value={this.state.password}
|
|
710
715
|
placeholder={passwordPlaceholder} onFocus={this.handlePasswordInputFocus}
|
|
711
716
|
onBlur={this.handlePasswordInputBlur} onChange={this.handleInputChange}
|
|
712
|
-
disabled={this.hasAllInputDisabled() || this.isPasswordDisabled()}
|
|
713
|
-
|
|
714
|
-
|
|
717
|
+
disabled={this.hasAllInputDisabled() || this.isPasswordDisabled()}
|
|
718
|
+
autoComplete="new-password"
|
|
719
|
+
ref={this.passwordInputRef}/>
|
|
720
|
+
<a onClick={this.handleViewPasswordButtonClick}
|
|
721
|
+
className={`password-view button button-icon toggle ${this.state.viewPassword ? "selected" : ""}`}>
|
|
722
|
+
<Icon name='eye-open' big={true}/>
|
|
723
|
+
<span className="visually-hidden">view</span>
|
|
724
|
+
</a>
|
|
715
725
|
</div>
|
|
716
726
|
<ul className="actions inline">
|
|
717
|
-
<li>
|
|
718
|
-
<a onClick={this.handleViewPasswordButtonClick}
|
|
719
|
-
className={`password-view button button-icon toggle ${this.state.viewPassword ? "selected" : ""} ${this.hasAllInputDisabled() ? "disabled" : ""}`}>
|
|
720
|
-
<Icon name='eye-open' big={true}/>
|
|
721
|
-
<span className="visually-hidden">view</span>
|
|
722
|
-
</a>
|
|
723
|
-
</li>
|
|
724
727
|
<li>
|
|
725
728
|
<a onClick={this.handleGeneratePasswordButtonClick}
|
|
726
729
|
className={`password-generate button-icon button ${this.hasAllInputDisabled() ? "disabled" : ""}`}>
|
|
@@ -728,16 +731,32 @@ class EditResource extends Component {
|
|
|
728
731
|
<span className="visually-hidden">generate</span>
|
|
729
732
|
</a>
|
|
730
733
|
</li>
|
|
734
|
+
{this.canUsePasswordGenerator &&
|
|
735
|
+
<li>
|
|
736
|
+
<a onClick={this.handleOpenGenerator}
|
|
737
|
+
className="password-generator button-icon button">
|
|
738
|
+
<Icon name='cog' big={true}/>
|
|
739
|
+
<span className="visually-hidden">open generator</span>
|
|
740
|
+
</a>
|
|
741
|
+
</li>
|
|
742
|
+
}
|
|
731
743
|
</ul>
|
|
732
744
|
<div className={`password-complexity ${passwordStrength.id}`}>
|
|
733
745
|
<span className="progress">
|
|
734
746
|
<span className={`progress-bar ${passwordStrength.id}`}/>
|
|
735
747
|
</span>
|
|
736
|
-
<span className="complexity-text"
|
|
748
|
+
<span className="complexity-text">
|
|
749
|
+
<div>
|
|
750
|
+
<Trans>Complexity:</Trans> <strong>{this.translate(passwordStrength.label)}</strong>
|
|
751
|
+
</div>
|
|
752
|
+
<div>
|
|
753
|
+
<Trans>Entropy:</Trans> <strong>{passwordEntropy.toFixed(1)} bits</strong>
|
|
754
|
+
</div>
|
|
755
|
+
</span>
|
|
737
756
|
</div>
|
|
738
757
|
{this.state.passwordError &&
|
|
739
758
|
<div className="input text">
|
|
740
|
-
<div className="password message
|
|
759
|
+
<div className="password error-message">{this.state.passwordError}</div>
|
|
741
760
|
</div>
|
|
742
761
|
}
|
|
743
762
|
{this.state.passwordWarning &&
|
|
@@ -770,7 +789,7 @@ class EditResource extends Component {
|
|
|
770
789
|
onKeyUp={this.handleDescriptionInputKeyUp}>
|
|
771
790
|
</textarea>
|
|
772
791
|
{this.state.descriptionError &&
|
|
773
|
-
<div className="error
|
|
792
|
+
<div className="error-message">{this.state.descriptionError}</div>
|
|
774
793
|
}
|
|
775
794
|
{this.state.descriptionWarning &&
|
|
776
795
|
<div className="warning message">{this.state.descriptionWarning}</div>
|
|
@@ -790,10 +809,16 @@ class EditResource extends Component {
|
|
|
790
809
|
EditResource.propTypes = {
|
|
791
810
|
context: PropTypes.any, // The application context
|
|
792
811
|
onClose: PropTypes.func,
|
|
812
|
+
resourcePasswordGeneratorContext: PropTypes.any, // The resource password generator context
|
|
793
813
|
resourceWorkspaceContext: PropTypes.any, // The resource workspace context
|
|
794
814
|
actionFeedbackContext: PropTypes.any, // The action feedback context
|
|
795
815
|
dialogContext: PropTypes.any, // The dialog context,
|
|
796
816
|
t: PropTypes.func, // The translation function
|
|
797
817
|
};
|
|
798
818
|
|
|
799
|
-
export default withAppContext(
|
|
819
|
+
export default withAppContext(
|
|
820
|
+
withResourceWorkspace(
|
|
821
|
+
withResourcePasswordGeneratorContext(
|
|
822
|
+
withActionFeedback(
|
|
823
|
+
withDialog(
|
|
824
|
+
withTranslation('common')(EditResource))))));
|
|
@@ -33,7 +33,86 @@ export function defaultProps() {
|
|
|
33
33
|
id: mockResource.id
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
|
-
|
|
36
|
+
resourcePasswordGeneratorContext: {
|
|
37
|
+
settings: {
|
|
38
|
+
"default_generator": "passphrase",
|
|
39
|
+
"generators": [
|
|
40
|
+
{
|
|
41
|
+
"name": "Password",
|
|
42
|
+
"type": "password",
|
|
43
|
+
"default_options": {
|
|
44
|
+
"length": 18,
|
|
45
|
+
"look_alike": true,
|
|
46
|
+
"min_length": 8,
|
|
47
|
+
"max_length": 128,
|
|
48
|
+
},
|
|
49
|
+
"masks": [
|
|
50
|
+
{
|
|
51
|
+
"name": "upper",
|
|
52
|
+
"label": "A-Z",
|
|
53
|
+
"characters": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "lower",
|
|
57
|
+
"label": "a-z",
|
|
58
|
+
"characters": "abcdefghijklmnopqrstuvwxyz",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "digit",
|
|
62
|
+
"label": "0-9",
|
|
63
|
+
"characters": "0123456789",
|
|
64
|
+
"required": true,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "parenthesis",
|
|
68
|
+
"label": "{ [ ( | ) ] ] }",
|
|
69
|
+
"characters": "([|])",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "special_char1",
|
|
73
|
+
"label": "# $ % & @ ^ ~",
|
|
74
|
+
"characters": "#$%&@^~"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "special_char2",
|
|
78
|
+
"label": ". , : ;",
|
|
79
|
+
"characters": ".,:;"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "special_char5",
|
|
83
|
+
"label": "< * + ! ? =",
|
|
84
|
+
"characters": "<*+!?="
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "emoji",
|
|
88
|
+
"label": "๐",
|
|
89
|
+
"characters": "๐๐๐๐๐๐
๐๐คฃ๐ฅฒโบ๏ธ๐๐๐๐๐๐๐๐ฅฐ๐๐๐๐๐๐๐๐๐คช๐คจ๐ง๐ค๐๐ฅธ๐คฉ๐ฅณ๐๐๐๐๐๐๐โน๏ธ๐ฃ๐๐ซ๐ฉ๐ฅบ๐ข๐ญ๐ค๐ ๐ก๐คฌ๐คฏ๐ณ๐ฅต๐ฅถ๐ฑ๐จ๐ฐ๐ฅ๐๐ค๐ค๐คญ๐คซ๐คฅ๐ถ๐๐๐ฌ๐๐ฏ๐ฆ๐ง๐ฎ๐ฒ๐ฅฑ๐ด๐คค๐ช๐ต๐ค๐ฅด๐คข๐คฎ๐คง๐ท๐ค๐ค๐ค๐ค ๐๐ฟ๐น๐บ๐คก๐ฉ๐ป๐โ ๏ธ๐ฝ๐พ๐ค๐๐บ๐ธ๐น๐ป๐ผ๐ฝ๐๐ฟ๐พ"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "ascii",
|
|
93
|
+
"label": "ascii",
|
|
94
|
+
"characters": "%&ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยฎยฏยฐยฑยฒยณยตยถยทยธยนยบยปยผยฝยพยฟรร รรร
รรรรรรรรรรรรรรรรรรรรรรรรรรร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟลลล ลกลธฦโโโ โกโขโฆโฐโฌโข"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "Passphrase",
|
|
100
|
+
"type": "passphrase",
|
|
101
|
+
"default_options": {
|
|
102
|
+
"word_count": 8,
|
|
103
|
+
"word_case": "lowercase",
|
|
104
|
+
"min_word": 4,
|
|
105
|
+
"max_word": 40,
|
|
106
|
+
"separator": " "
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
onClose: jest.fn(),
|
|
113
|
+
dialogContext: {
|
|
114
|
+
open: jest.fn()
|
|
115
|
+
}
|
|
37
116
|
};
|
|
38
117
|
}
|
|
39
118
|
|