From ae961cdde5241bac0da3dee16bbb7a28a483d77e Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Mon, 4 Dec 2023 19:02:34 +0100 Subject: [PATCH 01/27] PB-28867 Improve folder serialization performance --- .../Folders/FoldersIndexController.php | 29 +++++++++++++++++-- .../Folders/FoldersIndexControllerTest.php | 1 + 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/plugins/PassboltCe/Folders/src/Controller/Folders/FoldersIndexController.php b/plugins/PassboltCe/Folders/src/Controller/Folders/FoldersIndexController.php index fa91400210..aa8c721c84 100644 --- a/plugins/PassboltCe/Folders/src/Controller/Folders/FoldersIndexController.php +++ b/plugins/PassboltCe/Folders/src/Controller/Folders/FoldersIndexController.php @@ -18,6 +18,7 @@ namespace Passbolt\Folders\Controller\Folders; use App\Controller\AppController; +use Cake\Utility\Hash; /** * @property \Passbolt\Folders\Model\Table\FoldersTable $Folders @@ -76,8 +77,30 @@ public function index() ]; $options = $this->QueryString->get($whitelist); - $resources = $this->Folders->findIndex($this->User->id(), $options); - $this->paginate($resources); - $this->success(__('The operation was successful.'), $resources); + $folders = $this->Folders->findIndex($this->User->id(), $options); + $folders->disableHydration(); + $folders = $this->paginate($folders)->toArray(); + $folders = $this->removeJoinDataFromResults($folders, $options); + + $this->success(__('The operation was successful.'), $folders); + } + + /** + * @param array $folders folders paginated + * @param array $options options passed in the request + * @return array + */ + private function removeJoinDataFromResults(array $folders, array $options): array + { + // Since hydration is disabled, the ResultSet skips the creation of entity classes, and hidden fields are not hidden anymore + // When belongsToMany associations are contained, we remove here the _joinData needed for Cake to build the result set. + // This cannot be made at the formatResult level. + $containsChildrenFolder = $options['contain']['children_folders'] ?? false; + $containsChildrenResources = $options['contain']['children_resources'] ?? false; + if ($containsChildrenFolder || $containsChildrenResources) { + $folders = Hash::remove($folders, '{n}.{s}.{n}._joinData'); + } + + return $folders; } } diff --git a/plugins/PassboltCe/Folders/tests/TestCase/Controller/Folders/FoldersIndexControllerTest.php b/plugins/PassboltCe/Folders/tests/TestCase/Controller/Folders/FoldersIndexControllerTest.php index 6c9a56f146..ce40e6a9e3 100644 --- a/plugins/PassboltCe/Folders/tests/TestCase/Controller/Folders/FoldersIndexControllerTest.php +++ b/plugins/PassboltCe/Folders/tests/TestCase/Controller/Folders/FoldersIndexControllerTest.php @@ -416,6 +416,7 @@ public function testFoldersIndexSuccess_ContainChildrenFolders() $this->assertCount(2, $folder->children_folders); foreach ($folder->children_folders as $childFolder) { $this->assertFolderAttributes($childFolder); + $this->assertObjectNotHasAttribute('_joinData', $childFolder); } $childrenFolderIds = Hash::extract($folder->children_folders, '{n}.id'); $this->assertContains($resource1->id, $childrenFolderIds); From 31e159a647572673a7c0eef1046bd3dcd062369b Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Tue, 5 Dec 2023 09:41:46 +0100 Subject: [PATCH 02/27] PB-28867 Fixes a regularly failing test --- .../EmailDigest/tests/TestCase/Command/PreviewCommandTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/PreviewCommandTest.php b/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/PreviewCommandTest.php index 08ba007c58..fffc83d34c 100644 --- a/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/PreviewCommandTest.php +++ b/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/PreviewCommandTest.php @@ -163,6 +163,6 @@ public function testPreviewCommand_ThresholdExceeded(): void $this->assertMailCount(0); // Make sure preview doesn't send emails $this->assertOutputContains('From: No reply '); $this->assertOutputContains('To: john@test.test'); - $this->assertOutputContains('Subject: ' . $operator->profile->full_name . ' has made changes on several resources'); + $this->assertOutputContains('Subject: ' . h($operator->profile->full_name) . ' has made changes on several resources'); } } From 84ede9989a70e9e56edf83f0aaf6bb89cda66ebe Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Mon, 29 Jan 2024 17:07:13 +0100 Subject: [PATCH 03/27] PB-29514 Fixes a regularly filing test --- .../Resources/PasswordExpiryResourcesUpdateControllerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PassboltCe/PasswordExpiry/tests/TestCase/Controller/Resources/PasswordExpiryResourcesUpdateControllerTest.php b/plugins/PassboltCe/PasswordExpiry/tests/TestCase/Controller/Resources/PasswordExpiryResourcesUpdateControllerTest.php index 1256544d4e..e2434d6a13 100644 --- a/plugins/PassboltCe/PasswordExpiry/tests/TestCase/Controller/Resources/PasswordExpiryResourcesUpdateControllerTest.php +++ b/plugins/PassboltCe/PasswordExpiry/tests/TestCase/Controller/Resources/PasswordExpiryResourcesUpdateControllerTest.php @@ -102,7 +102,7 @@ public function testPasswordExpiryResourcesUpdateController_Update_Expiry_Date_I $this->assertEmailQueueCount($expectedEmails); $emailDataToOwner = [ 'email' => $ownerWithAccess->username, - 'subject' => $operator->profile->full_name . ' marked the password ' . $resourceUpdated->name . ' as expired', + 'subject' => h($operator->profile->full_name) . ' marked the password ' . $resourceUpdated->name . ' as expired', ]; if (!$isResourceAlreadyExpired) { $this->assertEmailIsInQueue($emailDataToOwner); From 133d948be5aab570487a19dd748c7c79d5c7f683 Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Thu, 8 Feb 2024 12:19:59 +0100 Subject: [PATCH 04/27] PB-28635 As a user I want to use on e single command to send emails --- bin/cron | 8 +--- config/default.php | 3 ++ .../PassboltCe/EmailDigest/config/config.php | 1 - .../TestCase/Command/SenderCommandTest.php | 37 +++++++++++++++++++ src/Application.php | 21 +++++++++++ src/BaseSolutionBootstrapper.php | 2 +- 6 files changed, 63 insertions(+), 9 deletions(-) diff --git a/bin/cron b/bin/cron index 5367477390..0ffd67dab0 100755 --- a/bin/cron +++ b/bin/cron @@ -4,12 +4,6 @@ set -euo pipefail -DIGEST_ENABLED=${PASSBOLT_PLUGINS_EMAIL_DIGEST_ENABLED:-1} - DIR=$(dirname "$(readlink -f "$0")") -if [[ "$DIGEST_ENABLED" = 1 ]]; then - "$DIR"/cake passbolt email_digest send -else - "$DIR"/cake EmailQueue.sender -fi +"$DIR"/cake passbolt email_digest send diff --git a/config/default.php b/config/default.php index be90f8594f..4bd7cf2419 100644 --- a/config/default.php +++ b/config/default.php @@ -259,6 +259,9 @@ 'desktop' => [ 'enabled' => filter_var(env('PASSBOLT_PLUGINS_DESKTOP_ENABLED', true), FILTER_VALIDATE_BOOLEAN) ], + 'emailDigest' => [ + 'enabled' => filter_var(env('PASSBOLT_PLUGINS_EMAIL_DIGEST_ENABLED', true), FILTER_VALIDATE_BOOLEAN), + ], 'jwtAuthentication' => [ 'enabled' => filter_var(env('PASSBOLT_PLUGINS_JWT_AUTHENTICATION_ENABLED', true), FILTER_VALIDATE_BOOLEAN) ], diff --git a/plugins/PassboltCe/EmailDigest/config/config.php b/plugins/PassboltCe/EmailDigest/config/config.php index a60ff2bf24..9eb1398f66 100644 --- a/plugins/PassboltCe/EmailDigest/config/config.php +++ b/plugins/PassboltCe/EmailDigest/config/config.php @@ -17,7 +17,6 @@ 'plugins' => [ 'emailDigest' => [ 'version' => '1.0.0', - 'enabled' => env('PASSBOLT_PLUGINS_EMAIL_DIGEST_ENABLED', true), 'batchSizeLimit' => filter_var( env('PASSBOLT_PLUGINS_EMAIL_DIGEST_BATCH_SIZE_LIMIT', '100'), FILTER_VALIDATE_INT diff --git a/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/SenderCommandTest.php b/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/SenderCommandTest.php index 424dd644de..2afb4ad16d 100644 --- a/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/SenderCommandTest.php +++ b/plugins/PassboltCe/EmailDigest/tests/TestCase/Command/SenderCommandTest.php @@ -30,6 +30,7 @@ use Cake\I18n\I18n; use Cake\Mailer\Mailer; use Cake\Network\Exception\SocketException; +use Passbolt\EmailDigest\EmailDigestPlugin; use Passbolt\EmailDigest\Test\Factory\EmailQueueFactory; use Passbolt\EmailDigest\Test\Lib\EmailDigestMockTestTrait; use Passbolt\EmailDigest\Utility\Digest\DigestTemplateRegistry; @@ -262,4 +263,40 @@ public function testSenderCommandMultipleDigests() $this->assertMailContainsAt(1, $subject); $this->assertMailContainsAt(1, $nEmailsSent . ' group memberships were affected.'); } + + /** + * If the email plugin is disabled, fall back on the legacy email queue command + */ + public function testSenderCommandMultipleDigests_With_Plugin_Disabled() + { + $this->disableFeaturePlugin(EmailDigestPlugin::class); + + $nEmailsSent = 15; + + $operator = UserFactory::make()->withAvatar()->getEntity(); + $recipient = 'john@test.test'; + EmailQueueFactory::make($nEmailsSent) + ->setRecipient($recipient) + ->setTemplate(ResourceCreateEmailRedactor::TEMPLATE) + ->setField('template_vars.body.user', $operator) + ->setField('template_vars.body.resource', [ + // Dummy data to render email without any warnings + 'id' => UuidFactory::uuid(), + 'created' => 'now', + 'name' => 'My pass', + 'secrets' => [['data' => 'foo bar baz']], + ]) + ->setField('template_vars.body.showUsername', false) + ->setField('template_vars.body.showUri', false) + ->setField('template_vars.body.showDescription', false) + ->setField('template_vars.body.showSecret', false) + ->persist(); + + $this->exec('passbolt email_digest send'); + $this->assertExitSuccess(); + + $sentCount = EmailQueueFactory::find()->where(['sent' => true])->count(); + $this->assertSame($nEmailsSent, $sentCount); + $this->assertMailCount($nEmailsSent); + } } diff --git a/src/Application.php b/src/Application.php index 1506287de0..5bffaba9e7 100644 --- a/src/Application.php +++ b/src/Application.php @@ -41,9 +41,11 @@ use App\ServiceProvider\SetupServiceProvider; use App\ServiceProvider\TestEmailServiceProvider; use App\ServiceProvider\UserServiceProvider; +use App\Utility\Application\FeaturePluginAwareTrait; use Authentication\AuthenticationServiceInterface; use Authentication\AuthenticationServiceProviderInterface; use Authentication\Middleware\AuthenticationMiddleware; +use Cake\Console\CommandCollection; use Cake\Core\Configure; use Cake\Core\ContainerInterface; use Cake\Core\Exception\MissingPluginException; @@ -57,6 +59,8 @@ use Cake\Routing\Middleware\AssetMiddleware; use Cake\Routing\Middleware\RoutingMiddleware; use Cake\Routing\Router; +use EmailQueue\Shell\SenderShell; +use Passbolt\EmailDigest\EmailDigestPlugin; use Passbolt\SelfRegistration\Service\DryRun\SelfRegistrationDefaultDryRunService; use Passbolt\SelfRegistration\Service\DryRun\SelfRegistrationDryRunServiceInterface; use Passbolt\WebInstaller\Middleware\WebInstallerMiddleware; @@ -64,6 +68,8 @@ class Application extends BaseApplication implements AuthenticationServiceProviderInterface { + use FeaturePluginAwareTrait; + /** * @var \App\BaseSolutionBootstrapper|null */ @@ -323,4 +329,19 @@ public function getAuthenticationService(ServerRequestInterface $request): Authe return $auth; } + + /** + * @inheritDoc + */ + public function console(CommandCollection $commands): CommandCollection + { + parent::console($commands); + + // If the email digest plugin is disabled, fallback on the sender shell + if (!$this->isFeaturePluginEnabled(EmailDigestPlugin::class)) { + $commands->add('passbolt email_digest send', SenderShell::class); + } + + return $commands; + } } diff --git a/src/BaseSolutionBootstrapper.php b/src/BaseSolutionBootstrapper.php index 27f4dd9895..1ff3e86136 100644 --- a/src/BaseSolutionBootstrapper.php +++ b/src/BaseSolutionBootstrapper.php @@ -64,7 +64,7 @@ public function addFeaturePlugins(Application $app): void $this->addFeaturePluginIfEnabled($app, 'TotpResourceTypes', ['bootstrap' => true, 'routes' => false]); $app->addPlugin('Passbolt/RememberMe', ['bootstrap' => true, 'routes' => false]); $app->addPlugin('Passbolt/EmailNotificationSettings', ['bootstrap' => true, 'routes' => true]); - $app->addPlugin('Passbolt/EmailDigest', ['bootstrap' => true, 'routes' => true]); + $this->addFeaturePluginIfEnabled($app, 'EmailDigest'); $app->addPlugin('Passbolt/Reports', ['bootstrap' => true, 'routes' => true]); $this->addFeaturePluginIfEnabled($app, 'Mobile'); $this->addFeaturePluginIfEnabled($app, 'SelfRegistration'); From 5e865b5cfa66bc18c673ef363787338d887ecf87 Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Thu, 8 Feb 2024 17:32:18 +0100 Subject: [PATCH 05/27] PB-29621 As a user I should get a 400 if the local passed in the URL is not a string --- .../Locale/src/Model/Behavior/LocaleBehavior.php | 6 +++--- .../Locale/src/Service/RequestLocaleParserService.php | 4 ++++ .../tests/TestCase/Service/LocaleServiceTest.php | 4 ++-- .../Service/RequestLocaleParserServiceTest.php | 11 +++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/PassboltCe/Locale/src/Model/Behavior/LocaleBehavior.php b/plugins/PassboltCe/Locale/src/Model/Behavior/LocaleBehavior.php index 32980a016c..22712153d7 100644 --- a/plugins/PassboltCe/Locale/src/Model/Behavior/LocaleBehavior.php +++ b/plugins/PassboltCe/Locale/src/Model/Behavior/LocaleBehavior.php @@ -17,6 +17,7 @@ namespace Passbolt\Locale\Model\Behavior; +use Cake\Collection\CollectionInterface; use Cake\Core\InstanceConfigTrait; use Cake\Datasource\EntityInterface; use Cake\ORM\Behavior; @@ -95,16 +96,15 @@ public function findLocale(Query $query): Query */ public function formatResults(Query $query): Query { - return $query->formatResults(function (\Cake\Collection\CollectionInterface $results) { + return $query->formatResults(function (CollectionInterface $results) { return $results->map(function ($entity) { if (is_null($entity->locale)) { $locale = GetOrgLocaleService::getLocale(); } else { $locale = $entity->locale->value; } - $entity = $this->addLocalePropertyToEntity($entity, $locale); - return $entity; + return $this->addLocalePropertyToEntity($entity, $locale); }); }); } diff --git a/plugins/PassboltCe/Locale/src/Service/RequestLocaleParserService.php b/plugins/PassboltCe/Locale/src/Service/RequestLocaleParserService.php index 8d0dd1e034..54134ed704 100644 --- a/plugins/PassboltCe/Locale/src/Service/RequestLocaleParserService.php +++ b/plugins/PassboltCe/Locale/src/Service/RequestLocaleParserService.php @@ -17,6 +17,7 @@ namespace Passbolt\Locale\Service; +use Cake\Http\Exception\BadRequestException; use Cake\Utility\Hash; use Psr\Http\Message\ServerRequestInterface; @@ -69,6 +70,9 @@ public function getLocale(): string protected function readUriLocale(): ?string { $locale = $this->request->getQueryParams()[self::QUERY_KEY] ?? ''; + if (!is_string($locale)) { + throw new BadRequestException(__('The locale should be a string.')); + } if ($this->isValidLocale($locale)) { return $this->dasherizeLocale($locale); } diff --git a/plugins/PassboltCe/Locale/tests/TestCase/Service/LocaleServiceTest.php b/plugins/PassboltCe/Locale/tests/TestCase/Service/LocaleServiceTest.php index 685aacc281..f004af25c4 100644 --- a/plugins/PassboltCe/Locale/tests/TestCase/Service/LocaleServiceTest.php +++ b/plugins/PassboltCe/Locale/tests/TestCase/Service/LocaleServiceTest.php @@ -84,7 +84,7 @@ public function testLocaleServiceLocaleIsValid(?string $locale, bool $expected): ); } - public function dataProviderForTestLocaleServiceLocaleTranslateString_On_Existing_Locale_English_Default() + public function dataProviderForTestLocaleServiceLocaleTranslateString_On_Existing_Locale_English_Default(): array { return [ ['fr-FR', 'Courriel envoyé de: admin@passbolt.com'], @@ -96,7 +96,7 @@ public function dataProviderForTestLocaleServiceLocaleTranslateString_On_Existin ]; } - public function dataProviderForTestLocaleServiceLocaleTranslateString_On_Existing_Locale_French_Default() + public function dataProviderForTestLocaleServiceLocaleTranslateString_On_Existing_Locale_French_Default(): array { return [ ['fr-FR', 'Courriel envoyé de: admin@passbolt.com'], diff --git a/plugins/PassboltCe/Locale/tests/TestCase/Service/RequestLocaleParserServiceTest.php b/plugins/PassboltCe/Locale/tests/TestCase/Service/RequestLocaleParserServiceTest.php index b57ada1bcf..7c3d3b6ac1 100644 --- a/plugins/PassboltCe/Locale/tests/TestCase/Service/RequestLocaleParserServiceTest.php +++ b/plugins/PassboltCe/Locale/tests/TestCase/Service/RequestLocaleParserServiceTest.php @@ -20,6 +20,7 @@ use App\Test\Factory\OrganizationSettingFactory; use App\Test\Factory\UserFactory; use Authentication\Authenticator\Result; +use Cake\Http\Exception\BadRequestException; use Cake\TestSuite\TestCase; use CakephpTestSuiteLight\Fixture\TruncateDirtyTables; use Passbolt\Locale\Service\GetOrgLocaleService; @@ -119,4 +120,14 @@ public function testRequestLocaleParserService_Get_Authenticated_User_Locale() $service->getLocale() ); } + + public function testRequestLocaleParserServiceGetLocaleWithArrayLocaleFormatShouldThrow400(): void + { + $request = $this->createMock(ServerRequestInterface::class); + $request->method('getQueryParams')->willReturn([RequestLocaleParserService::QUERY_KEY => ['foo']]); + + $this->expectException(BadRequestException::class); + $this->expectExceptionMessage('The locale should be a string.'); + (new RequestLocaleParserService($request))->getLocale(); + } } From df473ff4e0bf7fd1f663fe3b3575af7a325dab25 Mon Sep 17 00:00:00 2001 From: Ishan Vyas Date: Fri, 9 Feb 2024 15:55:06 +0530 Subject: [PATCH 06/27] PB-29625 Set COMPOSER_ALLOW_SUPERUSER to fix pipelines failing See: https://github.com/composer/composer/issues/11839 --- .gitlab-ci/jobs/php_unit_tests/runner.yml | 2 ++ .gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml | 1 + .gitlab-ci/jobs/security_check.yml | 1 + 3 files changed, 4 insertions(+) diff --git a/.gitlab-ci/jobs/php_unit_tests/runner.yml b/.gitlab-ci/jobs/php_unit_tests/runner.yml index acda2d9835..a27c8ee58d 100644 --- a/.gitlab-ci/jobs/php_unit_tests/runner.yml +++ b/.gitlab-ci/jobs/php_unit_tests/runner.yml @@ -51,6 +51,8 @@ KUBERNETES_SERVICE_CPU_REQUEST: 1 KUBERNETES_SERVICE_MEMORY_REQUEST: 3Gi + + COMPOSER_ALLOW_SUPERUSER: 1 services: - $CI_REGISTRY_USER/dind:latest script: diff --git a/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml b/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml index c2cbc47961..3c69d54eec 100644 --- a/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml +++ b/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml @@ -75,6 +75,7 @@ # This is the development dummy fingerprint PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: 2FC8945833C51946E937F9FED47B0811573EE67E PHPUNIT_COMMAND: vendor/bin/phpunit --log-junit unitreport.xml + COMPOSER_ALLOW_SUPERUSER: 1 image: $CI_REGISTRY_IMAGE_TEST:$PHP_VERSION script: - cp config/app.default.php config/app.php diff --git a/.gitlab-ci/jobs/security_check.yml b/.gitlab-ci/jobs/security_check.yml index c34ffe946f..aa4f129e5c 100644 --- a/.gitlab-ci/jobs/security_check.yml +++ b/.gitlab-ci/jobs/security_check.yml @@ -2,6 +2,7 @@ stage: unit-test variables: PHP_VERSION: "7.4" + COMPOSER_ALLOW_SUPERUSER: 1 image: $CI_REGISTRY_IMAGE_TEST:$PHP_VERSION allow_failure: true script: From 8a8defef1e99a85cc0a0eefedf0528f2996b1b88 Mon Sep 17 00:00:00 2001 From: Ishan Vyas Date: Fri, 9 Feb 2024 16:19:52 +0530 Subject: [PATCH 07/27] PB-29109 Support PHP 8.3 for passbolt API PB-29376 Bump Duo_Universal_Php to 1.0.2 in order to have a valid composer.json in dependencies for a more cleaner build process (#506) --- .../sequential/php_unit_tests.yml | 10 ++ composer.json | 17 +-- composer.lock | 137 ++++++++++-------- .../Duo/MfaDuoVerifyDuoCodeService.php | 4 - ...faDuoStartDuoAuthenticationServiceTest.php | 4 +- .../Duo/MfaDuoVerifyDuoCodeServiceTest.php | 41 ------ .../Reports/ReportsViewController.php | 8 +- .../Reports/src/Service/ReportPool.php | 2 +- .../Reports/src/Service/ReportViewService.php | 6 +- .../Reports/src/Utility/AbstractReport.php | 3 +- psalm-baseline-v5-upgrade.xml | 4 - .../Table/Avatars/AddContainAvatarTest.php | 4 + .../Avatars/AvatarsCacheServiceTest.php | 4 + 13 files changed, 113 insertions(+), 131 deletions(-) diff --git a/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml b/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml index 3c69d54eec..46e7dc474d 100644 --- a/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml +++ b/.gitlab-ci/jobs/php_unit_tests/sequential/php_unit_tests.yml @@ -261,3 +261,13 @@ seq-php8.0-mariadb8.0: # rules: # - if: '$TEST_DISABLED == null && $CI_COMMIT_BRANCH == "master"' # - if: '$TEST_DISABLED == null && $CI_COMMIT_BRANCH == "develop"' + +seq-php8.3-mysql8: + variables: + PHP_VERSION: "8.3" + DATABASE_ENGINE_VERSION: '$CI_REGISTRY/mysql-8.0' + extends: + - .mysql-template + - .test-template + rules: + - if: '$TEST_DISABLED == null' diff --git a/composer.json b/composer.json index cb0714d0f7..e9ed78e346 100644 --- a/composer.json +++ b/composer.json @@ -53,11 +53,6 @@ "url": "https://github.com/passbolt/phinx.git", "no-api": true }, - { - "type": "vcs", - "url": "https://github.com/passbolt/yubikey.git", - "no-api": true - }, { "type": "vcs", "url": "https://github.com/bcrowe/cakephp-api-pagination.git", @@ -84,17 +79,17 @@ "mobiledetect/mobiledetectlib": "^2.8.39", "ramsey/uuid": "^4.2.3", "singpolyma/openpgp-php": "dev-master#9920173e0e0b17a98a5b90fdd6d03db4ebadc8fe", - "donatj/phpuseragentparser": "^1.6.0", + "donatj/phpuseragentparser": "^1.8.0", "lorenzo/cakephp-email-queue": "^5.1.0", "imagine/imagine": "^1.3.2", "league/flysystem": "^2.4.5", - "cakephp/authentication": "^2.9.0", - "bcrowe/cakephp-api-pagination": "^3.0.0", + "cakephp/authentication": "^2.10.0", + "bcrowe/cakephp-api-pagination": "^3.0.1", "firebase/php-jwt": "^6.2.0", "spomky-labs/otphp": "^10.0.0", "bacon/bacon-qr-code": "^2.0.7", - "enygma/yubikey": "dev-master#31802c4f5ef24df87c4710e5893bdf8ad73554be", - "duosecurity/duo_universal_php": "^1.0" + "enygma/yubikey": "^3.5", + "duosecurity/duo_universal_php": "^1.0.2" }, "require-dev": { "phpstan/phpstan": "~1.10.0", @@ -105,7 +100,7 @@ "cakephp/cakephp-codesniffer": "^4.5", "passbolt/passbolt-selenium-api": "^4.5", "passbolt/passbolt-test-data": "^4.4", - "vierge-noire/cakephp-fixture-factories": "^v2.9.0", + "vierge-noire/cakephp-fixture-factories": "^v2.9.3", "cakephp/localized": "4.0.0", "vimeo/psalm": "^5.0.0", "cakedc/cakephp-phpstan": "^2.0", diff --git a/composer.lock b/composer.lock index d94e3752fc..0476f7a5df 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a3b35da33812bc79c4e98fb829190cf7", + "content-hash": "07e725e1afd53b3ca7cffcc9537c19bf", "packages": [ { "name": "bacon/bacon-qr-code", @@ -62,16 +62,16 @@ }, { "name": "bcrowe/cakephp-api-pagination", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/bcrowe/cakephp-api-pagination.git", - "reference": "c6fd911e0cabe6b50a0e78e9c657c0a17159a2f8" + "reference": "584c35af81f54e98986e18154800baf35e97060b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bcrowe/cakephp-api-pagination/zipball/c6fd911e0cabe6b50a0e78e9c657c0a17159a2f8", - "reference": "c6fd911e0cabe6b50a0e78e9c657c0a17159a2f8", + "url": "https://api.github.com/repos/bcrowe/cakephp-api-pagination/zipball/584c35af81f54e98986e18154800baf35e97060b", + "reference": "584c35af81f54e98986e18154800baf35e97060b", "shasum": "" }, "require": { @@ -132,7 +132,7 @@ "cakephp4", "pagination" ], - "time": "2023-07-12T22:49:34+00:00" + "time": "2024-01-13T16:14:01+00:00" }, { "name": "beberlei/assert", @@ -263,20 +263,20 @@ }, { "name": "cakephp/authentication", - "version": "2.9.0", + "version": "2.10.2", "source": { "type": "git", "url": "https://github.com/cakephp/authentication.git", - "reference": "71cfa8ab1b3e34699400528714a3575c5778e27d" + "reference": "64964e5a503a7d2a5560dfabc1b5d4439f61cdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/authentication/zipball/71cfa8ab1b3e34699400528714a3575c5778e27d", - "reference": "71cfa8ab1b3e34699400528714a3575c5778e27d", + "url": "https://api.github.com/repos/cakephp/authentication/zipball/64964e5a503a7d2a5560dfabc1b5d4439f61cdae", + "reference": "64964e5a503a7d2a5560dfabc1b5d4439f61cdae", "shasum": "" }, "require": { - "cakephp/http": "^4.0", + "cakephp/http": "^4.4", "laminas/laminas-diactoros": "^2.2.2", "psr/http-client": "^1.0", "psr/http-message": "^1.0", @@ -284,9 +284,9 @@ "psr/http-server-middleware": "^1.0" }, "require-dev": { - "cakephp/cakephp": "^4.0", + "cakephp/cakephp": "^4.4", "cakephp/cakephp-codesniffer": "^4.0", - "firebase/php-jwt": "^5.5", + "firebase/php-jwt": "^6.2", "phpunit/phpunit": "^8.5 || ^9.3" }, "suggest": { @@ -327,7 +327,7 @@ "issues": "https://github.com/cakephp/authentication/issues", "source": "https://github.com/cakephp/authentication" }, - "time": "2022-01-06T20:01:45+00:00" + "time": "2023-10-01T18:57:13+00:00" }, { "name": "cakephp/cakephp", @@ -521,7 +521,7 @@ }, "require-dev": { "cakephp/bake": "^2.6.0", - "cakephp/cakephp": "^4.3.0", + "cakephp/cakephp": "^4.5.0", "cakephp/cakephp-codesniffer": "^4.1", "phpunit/phpunit": "^9.5.0" }, @@ -1320,19 +1320,20 @@ }, { "name": "donatj/phpuseragentparser", - "version": "v1.7.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/donatj/PhpUserAgent.git", - "reference": "a35900b93530715f8669c10e49756adde5c8e6fc" + "reference": "b8c16fd6e963651c6d86f66cb782ce599d62418e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/a35900b93530715f8669c10e49756adde5c8e6fc", - "reference": "a35900b93530715f8669c10e49756adde5c8e6fc", + "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/b8c16fd6e963651c6d86f66cb782ce599d62418e", + "reference": "b8c16fd6e963651c6d86f66cb782ce599d62418e", "shasum": "" }, "require": { + "ext-ctype": "*", "php": ">=5.4.0" }, "require-dev": { @@ -1373,7 +1374,7 @@ ], "support": { "issues": "https://github.com/donatj/PhpUserAgent/issues", - "source": "https://github.com/donatj/PhpUserAgent/tree/v1.7.0" + "source": "https://github.com/donatj/PhpUserAgent/tree/v1.8.0" }, "funding": [ { @@ -1383,31 +1384,36 @@ { "url": "https://github.com/donatj", "type": "github" + }, + { + "url": "https://ko-fi.com/donatj", + "type": "ko_fi" } ], - "time": "2022-08-06T15:41:58+00:00" + "time": "2023-10-27T05:22:44+00:00" }, { "name": "duosecurity/duo_universal_php", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/duosecurity/duo_universal_php.git", - "reference": "d7d9bd3bf996d16ff7f4af57b45ed5ca3144cd16" + "reference": "8734a47480d2d2f0539e8ee782675e052025d026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/duosecurity/duo_universal_php/zipball/d7d9bd3bf996d16ff7f4af57b45ed5ca3144cd16", - "reference": "d7d9bd3bf996d16ff7f4af57b45ed5ca3144cd16", + "url": "https://api.github.com/repos/duosecurity/duo_universal_php/zipball/8734a47480d2d2f0539e8ee782675e052025d026", + "reference": "8734a47480d2d2f0539e8ee782675e052025d026", "shasum": "" }, "require": { "ext-curl": "*", + "ext-json": "*", "firebase/php-jwt": "^6.0", "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.0", + "phpunit/phpunit": "^9.0", "squizlabs/php_codesniffer": "3.*" }, "type": "library", @@ -1422,22 +1428,22 @@ "support": { "email": "support@duosecurity.com", "issues": "https://github.com/duosecurity/duo_universal_php/issues", - "source": "https://github.com/duosecurity/duo_universal_php/tree/1.0.1" + "source": "https://github.com/duosecurity/duo_universal_php/tree/1.0.2" }, - "time": "2022-07-06T13:56:13+00:00" + "time": "2023-01-13T18:47:58+00:00" }, { "name": "enygma/yubikey", - "version": "dev-master", + "version": "3.5", "source": { "type": "git", - "url": "https://github.com/passbolt/yubikey.git", - "reference": "31802c4f5ef24df87c4710e5893bdf8ad73554be" + "url": "https://github.com/enygma/yubikey.git", + "reference": "26c194dc1751d3978388e109030aa76afeade7aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/passbolt/yubikey/zipball/31802c4f5ef24df87c4710e5893bdf8ad73554be", - "reference": "31802c4f5ef24df87c4710e5893bdf8ad73554be", + "url": "https://api.github.com/repos/enygma/yubikey/zipball/26c194dc1751d3978388e109030aa76afeade7aa", + "reference": "26c194dc1751d3978388e109030aa76afeade7aa", "shasum": "" }, "require": { @@ -1447,13 +1453,13 @@ "codeclimate/php-test-reporter": "dev-master", "phpunit/phpunit": "4.3.2" }, - "default-branch": true, "type": "library", "autoload": { "psr-0": { "Yubikey": "src/" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -1473,7 +1479,11 @@ "yubico", "yubikey" ], - "time": "2023-01-09T16:41:59+00:00" + "support": { + "issues": "https://github.com/enygma/yubikey/issues", + "source": "https://github.com/enygma/yubikey/tree/3.5" + }, + "time": "2023-11-29T16:57:14+00:00" }, { "name": "firebase/php-jwt", @@ -3403,7 +3413,7 @@ "description": "Pure-PHP implementation of the OpenPGP Message Format (RFC 4880)", "support": { "issues": "https://github.com/singpolyma/openpgp-php/issues", - "source": "https://github.com/singpolyma/openpgp-php/tree/0.6.0" + "source": "https://github.com/singpolyma/openpgp-php/tree/master" }, "funding": [ { @@ -5537,20 +5547,20 @@ }, { "name": "fakerphp/faker", - "version": "v1.20.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -5561,7 +5571,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -5571,11 +5582,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.20-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -5598,9 +5604,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2022-07-20T13:12:54+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -8184,12 +8190,12 @@ "version": "3.7.2", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", "shasum": "" }, @@ -8234,6 +8240,20 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], "time": "2023-02-22T23:07:41+00:00" }, { @@ -8525,21 +8545,21 @@ }, { "name": "vierge-noire/cakephp-fixture-factories", - "version": "v2.9.1", + "version": "v2.9.3", "source": { "type": "git", "url": "https://github.com/vierge-noire/cakephp-fixture-factories.git", - "reference": "f3d7fec2ba142ef8be6491affe1019abc7490c8b" + "reference": "9bb9ee5eb198877185a69dcdce3471dbb77c190d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vierge-noire/cakephp-fixture-factories/zipball/f3d7fec2ba142ef8be6491affe1019abc7490c8b", - "reference": "f3d7fec2ba142ef8be6491affe1019abc7490c8b", + "url": "https://api.github.com/repos/vierge-noire/cakephp-fixture-factories/zipball/9bb9ee5eb198877185a69dcdce3471dbb77c190d", + "reference": "9bb9ee5eb198877185a69dcdce3471dbb77c190d", "shasum": "" }, "require": { "cakephp/orm": "^4.2", - "fakerphp/faker": "^1.15", + "fakerphp/faker": "^1.23", "php": ">=7.2", "vierge-noire/cakephp-test-suite-light": "^2.1" }, @@ -8582,9 +8602,9 @@ ], "support": { "issues": "https://github.com/vierge-noire/cakephp-fixture-factories/issues", - "source": "https://github.com/vierge-noire/cakephp-fixture-factories/tree/v2.9.1" + "source": "https://github.com/vierge-noire/cakephp-fixture-factories/tree/v2.9.3" }, - "time": "2023-07-14T14:41:57+00:00" + "time": "2024-02-09T08:58:59+00:00" }, { "name": "vierge-noire/cakephp-test-suite-light", @@ -8812,7 +8832,6 @@ "cakephp/migrations": 20, "robmorgan/phinx": 20, "singpolyma/openpgp-php": 20, - "enygma/yubikey": 20, "psy/psysh": 0 }, "prefer-stable": true, diff --git a/plugins/PassboltCe/MultiFactorAuthentication/src/Service/Duo/MfaDuoVerifyDuoCodeService.php b/plugins/PassboltCe/MultiFactorAuthentication/src/Service/Duo/MfaDuoVerifyDuoCodeService.php index e8c596611a..e2327892b6 100644 --- a/plugins/PassboltCe/MultiFactorAuthentication/src/Service/Duo/MfaDuoVerifyDuoCodeService.php +++ b/plugins/PassboltCe/MultiFactorAuthentication/src/Service/Duo/MfaDuoVerifyDuoCodeService.php @@ -103,10 +103,6 @@ private function requestDuoAuthenticationDetails(string $duoCode, string $operat throw new UnauthorizedException(__('Unable to verify Duo code against Duo service.'), null, $e); } - if (!is_array($duoAuthenticationData)) { - throw new InternalErrorException('Duo authentication details should be an array.'); - } - return $duoAuthenticationData; } diff --git a/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoStartDuoAuthenticationServiceTest.php b/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoStartDuoAuthenticationServiceTest.php index a1f3cb3a0e..9d70a2ed23 100644 --- a/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoStartDuoAuthenticationServiceTest.php +++ b/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoStartDuoAuthenticationServiceTest.php @@ -36,7 +36,7 @@ class MfaDuoStartDuoAuthenticationServiceTest extends TestCase public function testMfaDuoStartDuoAuthenticationService_Success() { $user = UserFactory::make()->persist(); - $uac = new UserAccessControl(Role::USER, $user->id); + $uac = new UserAccessControl(Role::USER, $user->id, 'duo@test.test'); $mock = DuoSdkClientMock::createDefault($this, $user); $service = new MfaDuoStartDuoAuthenticationService(AuthenticationToken::TYPE_MFA_SETUP, $mock->getClient()); @@ -54,7 +54,7 @@ public function testMfaDuoStartDuoAuthenticationService_Success() public function testMfaDuoStartDuoAuthenticationService_Success_WithRedirect() { $user = UserFactory::make()->persist(); - $uac = new UserAccessControl(Role::USER, $user->id); + $uac = new UserAccessControl(Role::USER, $user->id, 'duo@test.test'); $redirectPath = '/redirect/path'; $duoSdkClientMock = DuoSdkClientMock::createDefault($this, $user)->getClient(); $service = new MfaDuoStartDuoAuthenticationService(AuthenticationToken::TYPE_MFA_SETUP, $duoSdkClientMock); diff --git a/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoVerifyDuoCodeServiceTest.php b/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoVerifyDuoCodeServiceTest.php index d0da2bd85c..ab058db0fa 100644 --- a/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoVerifyDuoCodeServiceTest.php +++ b/plugins/PassboltCe/MultiFactorAuthentication/tests/TestCase/Service/Duo/MfaDuoVerifyDuoCodeServiceTest.php @@ -22,7 +22,6 @@ use App\Test\Factory\UserFactory; use App\Utility\UserAccessControl; use Cake\Core\Configure; -use Cake\Http\Exception\InternalErrorException; use Cake\Http\Exception\UnauthorizedException; use Cake\TestSuite\TestCase; use CakephpTestSuiteLight\Fixture\TruncateDirtyTables; @@ -76,46 +75,6 @@ public function testMfaDuoVerifyDuoCodeService_Error_CannotRetrieveAuthenticatio $this->assertTextContains('Unable to verify Duo code against Duo service', $th->getMessage()); } - public function testMfaDuoVerifyDuoCodeService_Error_AuthenticationDetailsDuoException() - { - $settings = $this->getDefaultMfaOrgSettings(); - $this->mockMfaOrgSettings($settings); - $user = UserFactory::make()->persist(); - $uac = new UserAccessControl(Role::USER, $user->id, $user->username); - $duoCode = 'not-so-random-duo-code'; - - $duoSdkClientMock = (new DuoSdkClientMock($this))->mockInvalidExchangeAuthorizationCodeFor2FAResult(); - $service = new MfaDuoVerifyDuoCodeService(AuthenticationToken::TYPE_MFA_VERIFY, $duoSdkClientMock->getClient()); - - try { - $service->verify($uac, $duoCode); - } catch (\Throwable $th) { - } - - $this->assertInstanceOf(InternalErrorException::class, $th); - $this->assertTextContains('Duo authentication details should be an array.', $th->getMessage()); - } - - public function testMfaDuoVerifyDuoCodeService_Error_WrongAuthenticationDetailsType() - { - $settings = $this->getDefaultMfaOrgSettings(); - $this->mockMfaOrgSettings($settings); - $user = UserFactory::make()->persist(); - $uac = new UserAccessControl(Role::USER, $user->id, $user->username); - $duoCode = 'not-so-random-duo-code'; - - $duoSdkClientMock = (new DuoSdkClientMock($this))->mockInvalidExchangeAuthorizationCodeFor2FAResult(); - $service = new MfaDuoVerifyDuoCodeService(AuthenticationToken::TYPE_MFA_VERIFY, $duoSdkClientMock->getClient()); - - try { - $service->verify($uac, $duoCode); - } catch (\Throwable $th) { - } - - $this->assertInstanceOf(InternalErrorException::class, $th); - $this->assertTextContains('Duo authentication details should be an array.', $th->getMessage()); - } - public function testMfaDuoVerifyDuoCodeService_Error_CallbackWrongIss() { $settings = $this->getDefaultMfaOrgSettings(); diff --git a/plugins/PassboltCe/Reports/src/Controller/Reports/ReportsViewController.php b/plugins/PassboltCe/Reports/src/Controller/Reports/ReportsViewController.php index 12ab596adf..0fe177d58d 100644 --- a/plugins/PassboltCe/Reports/src/Controller/Reports/ReportsViewController.php +++ b/plugins/PassboltCe/Reports/src/Controller/Reports/ReportsViewController.php @@ -23,7 +23,7 @@ use Cake\Http\Exception\ForbiddenException; use InvalidArgumentException; use Passbolt\Reports\Service\ReportViewService; -use Passbolt\Reports\Utility\ReportInterface; +use Passbolt\Reports\Utility\AbstractReport; /** * ReportsViewController Class @@ -86,7 +86,7 @@ public function view(string $reportSlug) if (!$this->request->is('json')) { $this->renderReportInHtml($report); } else { - $this->success(__('The operation was successful.'), $report); + $this->success(__('The operation was successful.'), $report->jsonSerialize()); } } @@ -109,10 +109,10 @@ private function formatRequestData(FindIndexOptions $supportedOptions) /** * Set view variables, theme and template for html render * - * @param \Passbolt\Reports\Utility\ReportInterface $report Instance of Report to render + * @param \Passbolt\Reports\Utility\AbstractReport $report Instance of Report to render * @return void */ - private function renderReportInHtml(ReportInterface $report) + private function renderReportInHtml(AbstractReport $report) { $this->viewBuilder() ->setTemplatePath('Reports/html') diff --git a/plugins/PassboltCe/Reports/src/Service/ReportPool.php b/plugins/PassboltCe/Reports/src/Service/ReportPool.php index 7f622ad9e6..9550f488dd 100644 --- a/plugins/PassboltCe/Reports/src/Service/ReportPool.php +++ b/plugins/PassboltCe/Reports/src/Service/ReportPool.php @@ -98,7 +98,7 @@ public function addReports(array $reports) } /** - * Return a an array of callable to instantiate to get a report + * Returns an array of callable to instantiate to get a report * Each Report is created callable to avoid to instantiate a report collection when it will * not be used, but still maintain of a list of the report somewhere * diff --git a/plugins/PassboltCe/Reports/src/Service/ReportViewService.php b/plugins/PassboltCe/Reports/src/Service/ReportViewService.php index 2a27dd07e5..6e4beb469c 100644 --- a/plugins/PassboltCe/Reports/src/Service/ReportViewService.php +++ b/plugins/PassboltCe/Reports/src/Service/ReportViewService.php @@ -39,12 +39,12 @@ public function __construct(?ReportPool $reportPool = null) } /** - * Build a object implementing ReportInterface for given slug + * Build a object implementing AbstractReport for given slug * * @param string $reportSlug Slug of the report * @param array|null $parameters The report parameters * @throws \ReflectionException - * @return \Passbolt\Reports\Utility\ReportInterface + * @return \Passbolt\Reports\Utility\AbstractReport */ public function getReport(string $reportSlug, ?array $parameters = []) { @@ -58,7 +58,7 @@ public function getReport(string $reportSlug, ?array $parameters = []) $reflectionClass = new \ReflectionClass($reportClass); - /** @var \Passbolt\Reports\Utility\ReportInterface $report */ + /** @var \Passbolt\Reports\Utility\AbstractReport $report */ $report = $reflectionClass->newInstance(...$parameters); return $report; diff --git a/plugins/PassboltCe/Reports/src/Utility/AbstractReport.php b/plugins/PassboltCe/Reports/src/Utility/AbstractReport.php index e0d18523e7..2b57d8a570 100644 --- a/plugins/PassboltCe/Reports/src/Utility/AbstractReport.php +++ b/plugins/PassboltCe/Reports/src/Utility/AbstractReport.php @@ -19,9 +19,8 @@ use App\Model\Entity\User; use App\Model\Table\Dto\FindIndexOptions; use Cake\I18n\FrozenTime; -use JsonSerializable; -abstract class AbstractReport implements ReportInterface, JsonSerializable +abstract class AbstractReport implements ReportInterface { /** * @var string $name report name diff --git a/psalm-baseline-v5-upgrade.xml b/psalm-baseline-v5-upgrade.xml index 89101313ca..8cad0068b9 100644 --- a/psalm-baseline-v5-upgrade.xml +++ b/psalm-baseline-v5-upgrade.xml @@ -469,10 +469,6 @@ id]]> id]]> id]]> - id]]> - id]]> - username]]> - username]]> username]]> username]]> username]]> diff --git a/tests/TestCase/Model/Table/Avatars/AddContainAvatarTest.php b/tests/TestCase/Model/Table/Avatars/AddContainAvatarTest.php index 6fd6563c64..d6745fe311 100644 --- a/tests/TestCase/Model/Table/Avatars/AddContainAvatarTest.php +++ b/tests/TestCase/Model/Table/Avatars/AddContainAvatarTest.php @@ -20,6 +20,7 @@ use App\Model\Table\AvatarsTable; use App\Test\Factory\UserFactory; use Cake\ORM\Locator\LocatorAwareTrait; +use Cake\ORM\Table; use Cake\TestSuite\TestCase; use CakephpTestSuiteLight\Fixture\TruncateDirtyTables; @@ -31,9 +32,12 @@ class AddContainAvatarTest extends TestCase use LocatorAwareTrait; use TruncateDirtyTables; + private ?Table $Users = null; + public function setUp(): void { parent::setUp(); + $this->Users = $this->fetchTable('Users'); $this->loadRoutes(); } diff --git a/tests/TestCase/Service/Avatars/AvatarsCacheServiceTest.php b/tests/TestCase/Service/Avatars/AvatarsCacheServiceTest.php index ee4b69cf05..46a049b472 100644 --- a/tests/TestCase/Service/Avatars/AvatarsCacheServiceTest.php +++ b/tests/TestCase/Service/Avatars/AvatarsCacheServiceTest.php @@ -21,6 +21,7 @@ use App\Service\Avatars\AvatarsCacheService; use App\Test\Lib\Model\AvatarsIntegrationTestTrait; use App\Utility\UuidFactory; +use Cake\ORM\Table; use Cake\ORM\TableRegistry; use Cake\TestSuite\TestCase; use Laminas\Diactoros\Stream; @@ -34,9 +35,12 @@ class AvatarsCacheServiceTest extends TestCase public AvatarsCacheService $avatarsCacheService; + public ?Table $Avatars = null; + public function setUp(): void { parent::setUp(); + $this->Avatars = TableRegistry::getTableLocator()->get('Avatars'); $this->avatarsCacheService = new AvatarsCacheService($this->filesystemAdapter); } From 47aaefd10db878b5e5d720e00406c1de7073fc32 Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Mon, 12 Feb 2024 11:30:21 +0100 Subject: [PATCH 08/27] PB-29680 Update composer/composer to v2.7.0 --- composer.json | 2 +- composer.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index e9ed78e346..179bafcfe9 100644 --- a/composer.json +++ b/composer.json @@ -69,7 +69,7 @@ "ext-openssl": "*", "ext-pdo": "*", "ext-curl": "*", - "composer/composer": "^2.6.4", + "composer/composer": "^2.7.0", "cakephp/cakephp": "^4.4.15", "cakephp/chronos": "2.4.*", "longwave/laminas-diactoros": "^2.14.1", diff --git a/composer.lock b/composer.lock index 0476f7a5df..c4c1756db6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "07e725e1afd53b3ca7cffcc9537c19bf", + "content-hash": "a897d3f433e85c8fbe82e53202a0d464", "packages": [ { "name": "bacon/bacon-qr-code", @@ -792,16 +792,16 @@ }, { "name": "composer/composer", - "version": "2.6.4", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "d75d17c16a863438027d1d96401cddcd6aa5bb60" + "reference": "aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/d75d17c16a863438027d1d96401cddcd6aa5bb60", - "reference": "d75d17c16a863438027d1d96401cddcd6aa5bb60", + "url": "https://api.github.com/repos/composer/composer/zipball/aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc", + "reference": "aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc", "shasum": "" }, "require": { @@ -833,7 +833,7 @@ "phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-strict-rules": "^1", "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.0 || ^7" + "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -846,7 +846,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" }, "phpstan": { "includes": [ @@ -886,7 +886,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.6.4" + "source": "https://github.com/composer/composer/tree/2.7.1" }, "funding": [ { @@ -902,7 +902,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T08:54:47+00:00" + "time": "2024-02-09T14:26:28+00:00" }, { "name": "composer/metadata-minifier", @@ -8851,5 +8851,5 @@ "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } From b3c9a324ac5aaba561201f4fb840a5c09ea400ab Mon Sep 17 00:00:00 2001 From: Benjamin Monnot Date: Mon, 12 Feb 2024 16:39:50 +0100 Subject: [PATCH 09/27] PB-29809 Styleguide version bump to v4.5.4 --- package-lock.json | 14 +- package.json | 2 +- .../themes/default/api_authentication.min.css | 4 +- webroot/css/themes/default/api_main.min.css | 4 +- .../themes/default/ext_authentication.min.css | 4 +- .../themes/midgar/api_authentication.min.css | 4 +- webroot/css/themes/midgar/api_main.min.css | 4 +- .../themes/midgar/ext_authentication.min.css | 4 +- webroot/js/app/api-app.js | 2 +- webroot/locales/de-DE/common.json | 4 +- webroot/locales/es-ES/common.json | 404 +++++++++--------- webroot/locales/fr-FR/common.json | 234 +++++----- webroot/locales/ko-KR/common.json | 94 ++-- webroot/locales/nl-NL/common.json | 2 +- webroot/locales/ru-RU/common.json | 22 +- 15 files changed, 401 insertions(+), 401 deletions(-) diff --git a/package-lock.json b/package-lock.json index dcad2229c9..61324d6817 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "jquery": "^3.5.1", "lockfile-lint": "^4.12.1", "openpgp": "5.2.1", - "passbolt-styleguide": "^4.5.0" + "passbolt-styleguide": "^4.5.4" }, "engines": { "node": ">=16.14.0", @@ -2361,9 +2361,9 @@ } }, "node_modules/passbolt-styleguide": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/passbolt-styleguide/-/passbolt-styleguide-4.5.0.tgz", - "integrity": "sha512-/EiX8qlByp9IEVpoIV/P3HhQtemGAfqhEKrIki8UxUpb1xvXyuvav8gmX9pQetpaAI3TsNgbPwny9tw2A4K/+Q==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/passbolt-styleguide/-/passbolt-styleguide-4.5.4.tgz", + "integrity": "sha512-RT1B2nMXvGMBvYz+OORanKfbnrESx/FVreiEgRaVd7GmMvc+8cEd/wzlP9ME2lHRbsRrUQIHTxUx+pPS7V7x2A==", "dev": true, "dependencies": { "@testing-library/dom": "^8.11.3", @@ -5238,9 +5238,9 @@ "dev": true }, "passbolt-styleguide": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/passbolt-styleguide/-/passbolt-styleguide-4.5.0.tgz", - "integrity": "sha512-/EiX8qlByp9IEVpoIV/P3HhQtemGAfqhEKrIki8UxUpb1xvXyuvav8gmX9pQetpaAI3TsNgbPwny9tw2A4K/+Q==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/passbolt-styleguide/-/passbolt-styleguide-4.5.4.tgz", + "integrity": "sha512-RT1B2nMXvGMBvYz+OORanKfbnrESx/FVreiEgRaVd7GmMvc+8cEd/wzlP9ME2lHRbsRrUQIHTxUx+pPS7V7x2A==", "dev": true, "requires": { "@testing-library/dom": "^8.11.3", diff --git a/package.json b/package.json index 9c01dc2f13..0923b51190 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "jquery": "^3.5.1", "lockfile-lint": "^4.12.1", "openpgp": "5.2.1", - "passbolt-styleguide": "^4.5.0" + "passbolt-styleguide": "^4.5.4" }, "scripts": { "lint": "npm run lint:lockfile", diff --git a/webroot/css/themes/default/api_authentication.min.css b/webroot/css/themes/default/api_authentication.min.css index f4f6208e17..7a1e9ac728 100644 --- a/webroot/css/themes/default/api_authentication.min.css +++ b/webroot/css/themes/default/api_authentication.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/css/themes/default/api_main.min.css b/webroot/css/themes/default/api_main.min.css index 6572dd0de2..88ab79fb76 100644 --- a/webroot/css/themes/default/api_main.min.css +++ b/webroot/css/themes/default/api_main.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/css/themes/default/ext_authentication.min.css b/webroot/css/themes/default/ext_authentication.min.css index f4f6208e17..7a1e9ac728 100644 --- a/webroot/css/themes/default/ext_authentication.min.css +++ b/webroot/css/themes/default/ext_authentication.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/css/themes/midgar/api_authentication.min.css b/webroot/css/themes/midgar/api_authentication.min.css index 3d6c9f33df..29a2b7c438 100644 --- a/webroot/css/themes/midgar/api_authentication.min.css +++ b/webroot/css/themes/midgar/api_authentication.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/css/themes/midgar/api_main.min.css b/webroot/css/themes/midgar/api_main.min.css index 3d9120a790..d01224f56b 100644 --- a/webroot/css/themes/midgar/api_main.min.css +++ b/webroot/css/themes/midgar/api_main.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/css/themes/midgar/ext_authentication.min.css b/webroot/css/themes/midgar/ext_authentication.min.css index 3d6c9f33df..29a2b7c438 100644 --- a/webroot/css/themes/midgar/ext_authentication.min.css +++ b/webroot/css/themes/midgar/ext_authentication.min.css @@ -1,7 +1,7 @@ /**! * @name passbolt-styleguide - * @version v4.5.0 - * @date 2024-01-29 + * @version v4.5.4 + * @date 2024-02-12 * @copyright Copyright 2023 Passbolt SA * @source https://github.com/passbolt/passbolt_styleguide * @license AGPL-3.0 diff --git a/webroot/js/app/api-app.js b/webroot/js/app/api-app.js index ae4ce910c8..33282d5db0 100644 --- a/webroot/js/app/api-app.js +++ b/webroot/js/app/api-app.js @@ -1,2 +1,2 @@ /*! For license information please see api-app.js.LICENSE.txt */ -(()=>{"use strict";var e,t,a,n={9494:(e,t,a)=>{var n=a(7294),i=a(3935),s=a(5697),o=a.n(s),r=a(2045);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},displayError:()=>{},remove:()=>{}});class m extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{feedbacks:[],displaySuccess:this.displaySuccess.bind(this),displayError:this.displayError.bind(this),remove:this.remove.bind(this)}}async displaySuccess(e){await this.setState({feedbacks:[...this.state.feedbacks,{id:(0,r.Z)(),type:"success",message:e}]})}async displayError(e){await this.setState({feedbacks:[...this.state.feedbacks,{id:(0,r.Z)(),type:"error",message:e}]})}async remove(e){await this.setState({feedbacks:this.state.feedbacks.filter((t=>e.id!==t.id))})}render(){return n.createElement(c.Provider,{value:this.state},this.props.children)}}function d(e){return class extends n.Component{render(){return n.createElement(c.Consumer,null,(t=>n.createElement(e,l({actionFeedbackContext:t},this.props))))}}}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},close:()=>{}});class u extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{dialogs:[],open:(e,t)=>{const a=(0,r.Z)();return this.setState({dialogs:[...this.state.dialogs,{key:a,Dialog:e,DialogProps:t}]}),a},close:e=>this.setState({dialogs:this.state.dialogs.filter((t=>e!==t.key))})}}render(){return n.createElement(p.Provider,{value:this.state},this.props.children)}}function g(e){return class extends n.Component{render(){return n.createElement(p.Consumer,null,(t=>n.createElement(e,h({dialogContext:t},this.props))))}}}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},hide:()=>{}});class y extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{contextualMenus:[],show:(e,t)=>this.setState({contextualMenus:[...this.state.contextualMenus,{ContextualMenuComponent:e,componentProps:t}]}),hide:e=>this.setState({contextualMenus:this.state.contextualMenus.filter(((t,a)=>a!==e))})}}render(){return n.createElement(f.Provider,{value:this.state},this.props.children)}}y.displayName="ContextualMenuContextProvider",y.propTypes={children:o().any};var v=a(9116),k=a(570);class E extends n.Component{static get DEFAULT_WAIT_TO_CLOSE_TIME_IN_MS(){return 500}constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{shouldRender:!0,isPersisted:!1,timeoutId:null}}componentDidMount(){this.displayWithTimer(this.props.displayTimeInMs)}componentDidUpdate(e){const t=e&&e.feedback.id!==this.props.feedback.id,a=e&&this.props.displayTimeInMs&&e.displayTimeInMs!==this.props.displayTimeInMs;t?(this.setState({shouldRender:!0}),this.displayWithTimer(this.props.displayTimeInMs)):a&&this.updateTimer(this.props.displayTimeInMs)}componentWillUnmount(){this.state.timeoutId&&clearTimeout(this.state.timeoutId)}bindCallbacks(){this.persist=this.persist.bind(this),this.displayWithTimer=this.displayWithTimer.bind(this),this.close=this.close.bind(this)}displayWithTimer(e){this.state.timeoutId&&clearTimeout(this.state.timeoutId);const t=setTimeout(this.close,e),a=Date.now();this.setState({timeoutId:t,time:a})}updateTimer(e){const t=e-(Date.now()-this.state.time);t>0?this.displayWithTimer(t):(clearTimeout(this.state.timeoutId),this.close())}persist(){this.state.timeoutId&&!this.state.isPersisted&&(clearTimeout(this.state.timeoutId),this.setState({isPersisted:!0}))}close(){this.setState({shouldRender:!1}),setTimeout(this.props.onClose,E.DEFAULT_WAIT_TO_CLOSE_TIME_IN_MS)}render(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"notification",onMouseOver:this.persist,onMouseLeave:this.displayWithTimer,onClick:this.close},n.createElement("div",{className:`message animated ${this.state.shouldRender?"fadeInUp":"fadeOutUp"} ${this.props.feedback.type}`},n.createElement("span",{className:"content"},n.createElement("strong",null,"success"===this.props.feedback.type&&n.createElement(n.Fragment,null,n.createElement(v.c,null,"Success"),": "),"error"===this.props.feedback.type&&n.createElement(n.Fragment,null,n.createElement(v.c,null,"Error"),": ")),this.props.feedback.message))))}}E.propTypes={feedback:o().object,onClose:o().func,displayTimeInMs:o().number};const w=(0,k.Z)("common")(E);class C extends n.Component{constructor(e){super(e),this.bindCallbacks()}static get DEFAULT_DISPLAY_TIME_IN_MS(){return 5e3}static get DEFAULT_DISPLAY_MIN_TIME_IN_MS(){return 1200}bindCallbacks(){this.close=this.close.bind(this)}get feedbackToDisplay(){return this.props.actionFeedbackContext.feedbacks[0]}get length(){return this.props.actionFeedbackContext.feedbacks.length}get hasFeedbacks(){return this.length>0}async close(e){await this.props.actionFeedbackContext.remove(e)}render(){const e=this.length>1?C.DEFAULT_DISPLAY_MIN_TIME_IN_MS:C.DEFAULT_DISPLAY_TIME_IN_MS;return n.createElement(n.Fragment,null,this.hasFeedbacks&&n.createElement("div",{className:"notification-container"},n.createElement(w,{feedback:this.feedbackToDisplay,onClose:()=>this.close(this.feedbackToDisplay),displayTimeInMs:e})))}}C.propTypes={actionFeedbackContext:o().any};const S=d(C);var x=a(3727),N=a(6550);function _(){return _=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(e,_({context:t},this.props))))}}}const A=R;function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},remove:()=>{}});class L extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{counter:0,add:()=>{this.setState({counter:this.state.counter+1})},remove:()=>{this.setState({counter:Math.min(this.state.counter-1,0)})}}}render(){return n.createElement(D.Provider,{value:this.state},this.props.children)}}function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},resetDisplayAdministrationWorkspaceAction:()=>{},onUpdateSubscriptionKeyRequested:()=>{},onSaveEnabled:()=>{},onMustSaveSettings:()=>{},onMustEditSubscriptionKey:()=>{},onMustRefreshSubscriptionKey:()=>{},onResetActionsSettings:()=>{}});class j extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{selectedAdministration:F.NONE,can:{save:!1},must:{save:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1},administrationWorkspaceAction:()=>n.createElement(n.Fragment,null),setDisplayAdministrationWorkspaceAction:this.setDisplayAdministrationWorkspaceAction.bind(this),resetDisplayAdministrationWorkspaceAction:this.resetDisplayAdministrationWorkspaceAction.bind(this),onUpdateSubscriptionKeyRequested:this.onUpdateSubscriptionKeyRequested.bind(this),onSaveEnabled:this.handleSaveEnabled.bind(this),onMustSaveSettings:this.handleMustSaveSettings.bind(this),onMustEditSubscriptionKey:this.handleMustEditSubscriptionKey.bind(this),onMustRefreshSubscriptionKey:this.handleMustRefreshSubscriptionKey.bind(this),onResetActionsSettings:this.handleResetActionsSettings.bind(this)}}componentDidMount(){this.handleAdministrationMenuRouteChange()}componentDidUpdate(e){this.handleRouteChange(e.location)}handleSaveEnabled(){this.setState({can:{...this.state.can,save:!0}})}handleMustSaveSettings(){this.setState({must:{...this.state.must,save:!0}})}handleMustEditSubscriptionKey(){this.setState({must:{...this.state.must,editSubscriptionKey:!0}})}handleMustRefreshSubscriptionKey(){this.setState({must:{...this.state.must,refreshSubscriptionKey:!0}})}handleResetActionsSettings(){this.setState({must:{save:!1,test:!1,synchronize:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1}})}handleRouteChange(e){this.props.location.key!==e.key&&this.handleAdministrationMenuRouteChange()}handleAdministrationMenuRouteChange(){const e=this.props.location.pathname.includes("mfa"),t=this.props.location.pathname.includes("mfa-policy"),a=this.props.location.pathname.includes("password-policies"),n=this.props.location.pathname.includes("users-directory"),i=this.props.location.pathname.includes("email-notification"),s=this.props.location.pathname.includes("subscription"),o=this.props.location.pathname.includes("internationalization"),r=this.props.location.pathname.includes("account-recovery"),l=this.props.location.pathname.includes("smtp-settings"),c=this.props.location.pathname.includes("self-registration"),m=this.props.location.pathname.includes("sso"),d=this.props.location.pathname.includes("rbac"),h=this.props.location.pathname.includes("user-passphrase-policies"),p=this.props.location.pathname.includes("password-expiry");let u;t?u=F.MFA_POLICY:a?u=F.PASSWORD_POLICIES:e?u=F.MFA:n?u=F.USER_DIRECTORY:i?u=F.EMAIL_NOTIFICATION:s?u=F.SUBSCRIPTION:o?u=F.INTERNATIONALIZATION:r?u=F.ACCOUNT_RECOVERY:l?u=F.SMTP_SETTINGS:c?u=F.SELF_REGISTRATION:m?u=F.SSO:d?u=F.RBAC:h?u=F.USER_PASSPHRASE_POLICIES:p&&(u=F.PASSWORD_EXPIRY),this.setState({selectedAdministration:u,can:{save:!1,test:!1,synchronize:!1},must:{save:!1,test:!1,synchronize:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1}})}setDisplayAdministrationWorkspaceAction(e){this.setState({administrationWorkspaceAction:e})}resetDisplayAdministrationWorkspaceAction(){this.setState({administrationWorkspaceAction:()=>n.createElement(n.Fragment,null)})}onUpdateSubscriptionKeyRequested(e){return this.props.context.port.request("passbolt.subscription.update",e)}render(){return n.createElement(U.Provider,{value:this.state},this.props.children)}}j.displayName="AdministrationWorkspaceContextProvider",j.propTypes={context:o().object,children:o().any,location:o().object,match:o().object,history:o().object,loadingContext:o().object};const z=(0,N.EN)(I((M=j,class extends n.Component{render(){return n.createElement(D.Consumer,null,(e=>n.createElement(M,P({loadingContext:e},this.props))))}})));var M;function O(e){return class extends n.Component{render(){return n.createElement(U.Consumer,null,(t=>n.createElement(e,T({administrationWorkspaceContext:t},this.props))))}}}const F={NONE:"NONE",MFA:"MFA",MFA_POLICY:"MFA-POLICY",PASSWORD_POLICIES:"PASSWORD-POLICIES",USER_DIRECTORY:"USER-DIRECTORY",EMAIL_NOTIFICATION:"EMAIL-NOTIFICATION",SUBSCRIPTION:"SUBSCRIPTION",INTERNATIONALIZATION:"INTERNATIONALIZATION",ACCOUNT_RECOVERY:"ACCOUNT-RECOVERY",SMTP_SETTINGS:"SMTP-SETTINGS",SELF_REGISTRATION:"SELF-REGISTRATION",SSO:"SSO",RBAC:"RBAC",USER_PASSPHRASE_POLICIES:"USER-PASSPHRASE-POLICIES",PASSWORD_EXPIRY:"PASSWORD-EXPIRY"};function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;tt===e));t?.DialogProps?.onClose&&t.DialogProps.onClose(),this.props.dialogContext.close(e)}render(){return n.createElement(n.Fragment,null,this.props.dialogContext.dialogs.map((({key:e,Dialog:t,DialogProps:a})=>n.createElement(t,q({key:e},a,{onClose:()=>this.close(e)})))),this.props.children)}}W.propTypes={dialogContext:o().any,children:o().any};const V=g(W);function B(){return B=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(e.ContextualMenuComponent,B({key:t,hide:()=>this.handleHide(t)},e.componentProps)))))}}G.propTypes={contextualMenuContext:o().any};const K=function(e){return class extends n.Component{render(){return n.createElement(f.Consumer,null,(t=>n.createElement(e,b({contextualMenuContext:t},this.props))))}}}(G);function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},onGoToAdministrationSelfRegistrationRequested:()=>{},onGoToAdministrationMfaRequested:()=>{},onGoToAdministrationUsersDirectoryRequested:()=>{},onGoToAdministrationEmailNotificationsRequested:()=>{},onGoToAdministrationSubscriptionRequested:()=>{},onGoToAdministrationInternationalizationRequested:()=>{},onGoToAdministrationAccountRecoveryRequested:()=>{},onGoToAdministrationSmtpSettingsRequested:()=>{},onGoToAdministrationSsoRequested:()=>{},onGoToAdministrationPasswordPoliciesRequested:()=>{},onGoToAdministrationUserPassphrasePoliciesRequested:()=>{},onGoToAdministrationPasswordExpirySettingsRequested:()=>{},onGoToPasswordsRequested:()=>{},onGoToUsersRequested:()=>{},onGoToUserSettingsProfileRequested:()=>{},onGoToUserSettingsPassphraseRequested:()=>{},onGoToUserSettingsSecurityTokenRequested:()=>{},onGoToUserSettingsThemeRequested:()=>{},onGoToUserSettingsMfaRequested:()=>{},onGoToUserSettingsKeysRequested:()=>{},onGoToUserSettingsMobileRequested:()=>{},onGoToUserSettingsDesktopRequested:()=>{},onGoToUserSettingsAccountRecoveryRequested:()=>{},onGoToNewTab:()=>{},onGoToAdministrationRbacsRequested:()=>{}});class Z extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{onGoToNewTab:this.onGoToNewTab.bind(this),onGoToAdministrationRequested:this.onGoToAdministrationRequested.bind(this),onGoToAdministrationMfaRequested:this.onGoToAdministrationMfaRequested.bind(this),onGoToAdministrationUsersDirectoryRequested:this.onGoToAdministrationUsersDirectoryRequested.bind(this),onGoToAdministrationEmailNotificationsRequested:this.onGoToAdministrationEmailNotificationsRequested.bind(this),onGoToAdministrationSubscriptionRequested:this.onGoToAdministrationSubscriptionRequested.bind(this),onGoToAdministrationInternationalizationRequested:this.onGoToAdministrationInternationalizationRequested.bind(this),onGoToAdministrationAccountRecoveryRequested:this.onGoToAdministrationAccountRecoveryRequested.bind(this),onGoToAdministrationSmtpSettingsRequested:this.onGoToAdministrationSmtpSettingsRequested.bind(this),onGoToAdministrationSelfRegistrationRequested:this.onGoToAdministrationSelfRegistrationRequested.bind(this),onGoToAdministrationSsoRequested:this.onGoToAdministrationSsoRequested.bind(this),onGoToAdministrationMfaPolicyRequested:this.onGoToAdministrationMfaPolicyRequested.bind(this),onGoToAdministrationPasswordPoliciesRequested:this.onGoToAdministrationPasswordPoliciesRequested.bind(this),onGoToAdministrationUserPassphrasePoliciesRequested:this.onGoToAdministrationUserPassphrasePoliciesRequested.bind(this),onGoToAdministrationPasswordExpirySettingsRequested:this.onGoToAdministrationPasswordExpirySettingsRequested.bind(this),onGoToPasswordsRequested:this.onGoToPasswordsRequested.bind(this),onGoToUsersRequested:this.onGoToUsersRequested.bind(this),onGoToUserSettingsProfileRequested:this.onGoToUserSettingsProfileRequested.bind(this),onGoToUserSettingsPassphraseRequested:this.onGoToUserSettingsPassphraseRequested.bind(this),onGoToUserSettingsSecurityTokenRequested:this.onGoToUserSettingsSecurityTokenRequested.bind(this),onGoToUserSettingsThemeRequested:this.onGoToUserSettingsThemeRequested.bind(this),onGoToUserSettingsMfaRequested:this.onGoToUserSettingsMfaRequested.bind(this),onGoToUserSettingsKeysRequested:this.onGoToUserSettingsKeysRequested.bind(this),onGoToUserSettingsMobileRequested:this.onGoToUserSettingsMobileRequested.bind(this),onGoToUserSettingsDesktopRequested:this.onGoToUserSettingsDesktopRequested.bind(this),onGoToUserSettingsAccountRecoveryRequested:this.onGoToUserSettingsAccountRecoveryRequested.bind(this),onGoToAdministrationRbacsRequested:this.onGoToAdministrationRbacsRequested.bind(this)}}async goTo(e,t){if(e===this.props.context.name)await this.props.history.push({pathname:t});else{const e=`${this.props.context.userSettings?this.props.context.userSettings.getTrustedDomain():this.props.context.trustedDomain}${t}`;window.open(e,"_parent","noopener,noreferrer")}}onGoToNewTab(e){window.open(e,"_blank","noopener,noreferrer")}async onGoToAdministrationRequested(){let e="/app/administration/email-notification";this.isMfaEnabled?e="/app/administration/mfa":this.isUserDirectoryEnabled?e="/app/administration/users-directory":this.isSmtpSettingsEnable?e="/app/administration/smtp-settings":this.isSelfRegistrationEnable?e="/app/administration/self-registation":this.isPasswordPoliciesEnable?e="/app/administration/password-policies":this.isUserPassphrasePoliciesEnable?e="/app/administration/user-passphrase-policies":this.isPasswordExpiryEnable&&(e="/app/administration/password-expiry"),await this.goTo("api",e)}async onGoToAdministrationMfaRequested(){await this.goTo("api","/app/administration/mfa")}async onGoToAdministrationMfaPolicyRequested(){await this.goTo("api","/app/administration/mfa-policy")}async onGoToAdministrationPasswordPoliciesRequested(){await this.goTo("browser-extension","/app/administration/password-policies")}async onGoToAdministrationSelfRegistrationRequested(){await this.goTo("api","/app/administration/self-registration")}async onGoToAdministrationUsersDirectoryRequested(){await this.goTo("api","/app/administration/users-directory")}async onGoToAdministrationEmailNotificationsRequested(){await this.goTo("api","/app/administration/email-notification")}async onGoToAdministrationSmtpSettingsRequested(){await this.goTo("api","/app/administration/smtp-settings")}async onGoToAdministrationSubscriptionRequested(){await this.goTo("browser-extension","/app/administration/subscription")}async onGoToAdministrationInternationalizationRequested(){await this.goTo("api","/app/administration/internationalization")}async onGoToAdministrationAccountRecoveryRequested(){await this.goTo("browser-extension","/app/administration/account-recovery")}async onGoToAdministrationSsoRequested(){await this.goTo("browser-extension","/app/administration/sso")}async onGoToAdministrationRbacsRequested(){await this.goTo("api","/app/administration/rbacs")}async onGoToAdministrationUserPassphrasePoliciesRequested(){await this.goTo("browser-extension","/app/administration/user-passphrase-policies")}async onGoToAdministrationPasswordExpirySettingsRequested(){await this.goTo("browser-extension","/app/administration/password-expiry")}get isMfaEnabled(){const e=this.props.context.siteSettings;return e&&e.canIUse("multiFactorAuthentication")}get isUserDirectoryEnabled(){const e=this.props.context.siteSettings;return e&&e.canIUse("directorySync")}get isSmtpSettingsEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("smtpSettings")}get isSelfRegistrationEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("selfRegistration")}get isPasswordPoliciesEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("passwordPoliciesUpdate")}get isUserPassphrasePoliciesEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("userPassphrasePolicies")}get isPasswordExpiryEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("passwordExpiry")}async onGoToPasswordsRequested(){await this.goTo("browser-extension","/app/passwords")}async onGoToUsersRequested(){await this.goTo("browser-extension","/app/users")}async onGoToUserSettingsProfileRequested(){await this.goTo("browser-extension","/app/settings/profile")}async onGoToUserSettingsPassphraseRequested(){await this.goTo("browser-extension","/app/settings/passphrase")}async onGoToUserSettingsSecurityTokenRequested(){await this.goTo("browser-extension","/app/settings/security-token")}async onGoToUserSettingsThemeRequested(){await this.goTo("browser-extension","/app/settings/theme")}async onGoToUserSettingsMfaRequested(){let e="api";window.chrome?.webview&&(e="browser-extension"),await this.goTo(e,"/app/settings/mfa")}async onGoToUserSettingsDuoSetupRequested(){let e="api";window.chrome?.webview&&(e="browser-extension"),await this.goTo(e,"/app/settings/mfa")}async onGoToUserSettingsKeysRequested(){await this.goTo("browser-extension","/app/settings/keys")}async onGoToUserSettingsMobileRequested(){await this.goTo("browser-extension","/app/settings/mobile")}async onGoToUserSettingsDesktopRequested(){await this.goTo("browser-extension","/app/settings/desktop")}async onGoToUserSettingsAccountRecoveryRequested(){await this.goTo("browser-extension","/app/settings/account-recovery")}render(){return n.createElement($.Provider,{value:this.state},this.props.children)}}Z.displayName="NavigationContextProvider",Z.propTypes={context:o().object,children:o().any,location:o().object,match:o().object,history:o().object};const Y=(0,N.EN)(I(Z));function J(e){return class extends n.Component{render(){return n.createElement($.Consumer,null,(t=>n.createElement(e,H({navigationContext:t},this.props))))}}}class Q{}class X extends Q{static execute(){return!0}}class ee extends Q{static execute(){return!1}}const te="Folders.use",ae="Users.viewWorkspace",ne="Mobile.transfer",ie="Desktop.transfer",se="Allow",oe="Deny",re={[se]:X,[oe]:ee},le={[te]:re[se]},ce={[te]:re[se]};class me{static getByRbac(e){return re[e.controlFunction]||(console.warn(`Could not find control function for the given rbac entity (${e.id})`),ee)}static getDefaultForAdminAndUiAction(e){return le[e]||X}static getDefaultForUserAndUiAction(e){return ce[e]||X}}class de{constructor(e){this._props=JSON.parse(JSON.stringify(e))}toDto(){return JSON.parse(JSON.stringify(this))}toJSON(){return this._props}_hasProp(e){if(!e.includes(".")){const t=de._normalizePropName(e);return Object.prototype.hasOwnProperty.call(this._props,t)}try{return this._getPropByPath(e),!0}catch(e){return!1}}_getPropByPath(e){return de._normalizePropName(e).split(".").reduce(((e,t)=>{if(Object.prototype.hasOwnProperty.call(e,t))return e[t];throw new Error}),this._props)}static _normalizePropName(e){return e.replace(/([A-Z])/g,((e,t)=>`_${t.toLowerCase()}`)).replace(/\._/,".").replace(/^_/,"").replace(/^\./,"")}}const he=de;class pe extends Error{constructor(e="Entity validation error."){super(e),this.name="EntityValidationError",this.details={}}addError(e,t,a){if("string"!=typeof e)throw new TypeError("EntityValidationError addError property should be a string.");if("string"!=typeof t)throw new TypeError("EntityValidationError addError rule should be a string.");if("string"!=typeof a)throw new TypeError("EntityValidationError addError message should be a string.");Object.prototype.hasOwnProperty.call(this.details,e)||(this.details[e]={}),this.details[e][t]=a}getError(e,t){if(!this.hasError(e,t))return null;const a=this.details[e];return t?a[t]:a}hasError(e,t){if("string"!=typeof e)throw new TypeError("EntityValidationError hasError property should be a string.");const a=this.details&&Object.prototype.hasOwnProperty.call(this.details,e);if(!t)return a;if("string"!=typeof t)throw new TypeError("EntityValidationError hasError rule should be a string.");return Object.prototype.hasOwnProperty.call(this.details[e],t)}hasErrors(){return Object.keys(this.details).length>0}}const ue=pe;var ge=a(8966),be=a.n(ge);class fe{static validateSchema(e,t){if(!t)throw new TypeError(`Could not validate entity ${e}. No schema for entity ${e}.`);if(!t.type)throw new TypeError(`Could not validate entity ${e}. Type missing.`);if("array"!==t.type){if("object"===t.type){if(!t.required||!Array.isArray(t.required))throw new TypeError(`Could not validate entity ${e}. Schema error: no required properties.`);if(!t.properties||!Object.keys(t).length)throw new TypeError(`Could not validate entity ${e}. Schema error: no properties.`);const a=t.properties;for(const e in a){if(!Object.prototype.hasOwnProperty.call(a,e)||!a[e].type&&!a[e].anyOf)throw TypeError(`Invalid schema. Type missing for ${e}...`);if(a[e].anyOf&&(!Array.isArray(a[e].anyOf)||!a[e].anyOf.length))throw new TypeError(`Invalid schema, prop ${e} anyOf should be an array`)}}}else if(!t.items)throw new TypeError(`Could not validate entity ${e}. Schema error: missing item definition.`)}static validate(e,t,a){if(!e||!t||!a)throw new TypeError(`Could not validate entity ${e}. No data provided.`);switch(a.type){case"object":return fe.validateObject(e,t,a);case"array":return fe.validateArray(e,t,a);default:throw new TypeError(`Could not validate entity ${e}. Unsupported type.`)}}static validateArray(e,t,a){return fe.validateProp("items",t,a)}static validateObject(e,t,a){const n=a.required,i=a.properties,s={},o=new ue(`Could not validate entity ${e}.`);for(const e in i)if(Object.prototype.hasOwnProperty.call(i,e)){if(n.includes(e)){if(!Object.prototype.hasOwnProperty.call(t,e)){o.addError(e,"required",`The ${e} is required.`);continue}}else if(!Object.prototype.hasOwnProperty.call(t,e))continue;try{s[e]=fe.validateProp(e,t[e],i[e])}catch(t){if(!(t instanceof ue))throw t;o.details[e]=t.details[e]}}if(o.hasErrors())throw o;return s}static validateProp(e,t,a){if(a.anyOf)return fe.validateAnyOf(e,t,a.anyOf),t;if(fe.validatePropType(e,t,a),a.enum)return fe.validatePropEnum(e,t,a),t;switch(a.type){case"string":fe.validatePropTypeString(e,t,a);break;case"integer":case"number":fe.validatePropTypeNumber(e,t,a);break;case"array":case"object":case"boolean":case"blob":case"null":break;case"x-custom":fe.validatePropCustom(e,t,a);break;default:throw new TypeError(`Could not validate property ${e}. Unsupported prop type ${a.type}`)}return t}static validatePropType(e,t,a){if(!fe.isValidPropType(t,a.type)){const t=new ue(`Could not validate property ${e}.`);throw t.addError(e,"type",`The ${e} is not a valid ${a.type}.`),t}}static validatePropCustom(e,t,a){try{a.validationCallback(t)}catch(t){const a=new ue(`Could not validate property ${e}.`);throw a.addError(e,"custom",`The ${e} is not valid: ${t.message}`),a}}static validatePropTypeString(e,t,a){const n=new ue(`Could not validate property ${e}.`);if(a.format&&(fe.isValidStringFormat(t,a.format)||n.addError(e,"format",`The ${e} is not a valid ${a.format}.`)),a.notEmpty&&(fe.isValidStringNotEmpty(t)||n.addError(e,"notEmpty",`The ${e} should be not empty`)),a.length&&(fe.isValidStringLength(t,a.length,a.length)||n.addError(e,"length",`The ${e} should be ${a.length} character in length.`)),a.minLength&&(fe.isValidStringLength(t,a.minLength)||n.addError(e,"minLength",`The ${e} should be ${a.minLength} character in length minimum.`)),a.maxLength&&(fe.isValidStringLength(t,0,a.maxLength)||n.addError(e,"maxLength",`The ${e} should be ${a.maxLength} character in length maximum.`)),a.pattern&&(be().matches(t,a.pattern)||n.addError(e,"pattern",`The ${e} is not valid.`)),a.custom&&(a.custom(t)||n.addError(e,"custom",`The ${e} is not valid.`)),n.hasErrors())throw n}static validatePropTypeNumber(e,t,a){const n=new ue(`Could not validate property ${e}.`);if("number"==typeof a.gte&&(fe.isGreaterThanOrEqual(t,a.gte)||n.addError(e,"gte",`The ${e} should be greater or equal to ${a.gte}.`)),"number"==typeof a.lte&&(fe.isLesserThanOrEqual(t,a.lte)||n.addError(e,"lte",`The ${e} should be lesser or equal to ${a.lte}.`)),n.hasErrors())throw n}static validatePropEnum(e,t,a){if(!fe.isPropInEnum(t,a.enum)){const t=new ue(`Could not validate property ${e}.`);throw t.addError(e,"enum",`The ${e} value is not included in the supported list.`),t}}static validateAnyOf(e,t,a){for(let n=0;n=t}static isLesserThanOrEqual(e,t){return e<=t}}const ye=fe;class ve extends he{constructor(e){super(ye.validate(ve.ENTITY_NAME,e,ve.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",enum:[ve.ROLE_ADMIN,ve.ROLE_USER,ve.ROLE_GUEST,ve.ROLE_ROOT]},description:{type:"string",maxLength:255},created:{type:"string",format:"date-time"},modified:{type:"string",format:"date-time"}}}}get id(){return this._props.id}get name(){return this._props.name}get description(){return this._props.description||null}get created(){return this._props.created||null}get modified(){return this._props.modified||null}isAdmin(){return this.name===ve.ROLE_ADMIN}static get ENTITY_NAME(){return"Role"}static get ROLE_ADMIN(){return"admin"}static get ROLE_USER(){return"user"}static get ROLE_GUEST(){return"guest"}static get ROLE_ROOT(){return"root"}}const ke=ve;class Ee{static canRoleUseUiAction(e,t,a){if(window.chrome?.webview){const e=t.findRbacByActionName(a);return this.getByRbacOrDefault(e,a)}const n=new ke(e.role);if(n.isAdmin())return me.getDefaultForAdminAndUiAction(a).execute();const i=t.findRbacByRoleAndUiActionName(n,a);return this.getByRbacOrDefault(i,a,e)}static getByRbacOrDefault(e,t,a){return e?me.getByRbac(e).execute(a):me.getDefaultForUserAndUiAction(t).execute()}}function we(){return we=Object.assign?Object.assign.bind():function(e){for(var t=1;t{}});class Se extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{canIUseUiAction:this.canIUseUiAction.bind(this)}}canIUseUiAction(e){return Ee.canRoleUseUiAction(this.props.context.loggedInUser,this.props.context.rbacs,e)}render(){return n.createElement(Ce.Provider,{value:this.state},this.props.children)}}Se.propTypes={context:o().any,children:o().any};const xe=I(Se);function Ne(e){return class extends n.Component{render(){return n.createElement(Ce.Consumer,null,(t=>n.createElement(e,we({rbacContext:t},this.props))))}}}class _e extends n.Component{getClassName(){let e=`svg-icon ${this.props.name}`;return this.props.big&&(e+=" icon-only"),this.props.baseline&&(e+=" baseline"),this.props.dim&&(e+=" dim"),e}render(){return n.createElement("span",{className:this.getClassName(),onClick:this.props.onClick,style:this.props.style},"2-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.97528 1.43999V15.24M7.97528 1.43999H13.3453C13.5466 1.43866 13.7461 1.47733 13.9323 1.55375C14.1185 1.63017 14.2878 1.74282 14.4301 1.88516C14.5725 2.0275 14.6851 2.19669 14.7615 2.38292C14.838 2.56915 14.8766 2.7687 14.8753 2.96999V13.7C14.8766 13.9018 14.838 14.1018 14.7617 14.2886C14.6854 14.4754 14.5729 14.6452 14.4307 14.7883C14.2885 14.9315 14.1194 15.0451 13.9332 15.1226C13.7469 15.2001 13.547 15.24 13.3453 15.24H7.97528V1.43999ZM7.97528 1.43999H2.6153C2.41353 1.43867 2.21346 1.47727 2.02667 1.55357C1.83989 1.62987 1.67005 1.74236 1.52692 1.88457C1.38378 2.02677 1.2702 2.19588 1.19269 2.38217C1.11517 2.56845 1.07525 2.76823 1.07526 2.96999V13.7C1.07526 14.1084 1.2375 14.5001 1.52631 14.7889C1.81511 15.0777 2.20686 15.24 2.6153 15.24H7.97528V1.43999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"3-dots-h"===this.props.name&&n.createElement("svg",{width:"16",height:"3",viewBox:"0 0 16 3",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"1.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"8",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"14.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"})),"3-dots-v"===this.props.name&&n.createElement("svg",{width:"3",height:"16",viewBox:"0 0 3 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"1.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"1.5",cy:"8",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"1.5",cy:"14.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"})),"add"===this.props.name&&n.createElement("svg",{width:"13",height:"12",viewBox:"0 0 13 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.51996 1.50999V11.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.68994 6.34H11.3499",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"arrow-left"===this.props.name&&n.createElement("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.62 6.34H0.959961",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.77995 11.17L0.949951 6.34L5.77995 1.50999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"arrow-right"===this.props.name&&n.createElement("svg",{width:"13",height:"12",viewBox:"0 0 13 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.61993 6.34H11.2799",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.47992 1.50999L11.3099 6.34L6.47992 11.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"ascending"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.87466 9.07V1.61",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.13467 5.34L4.87466 1.61L8.60464 5.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"ban"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.58527 13.33C10.8935 13.33 13.5753 10.6482 13.5753 7.34001C13.5753 4.03182 10.8935 1.35001 7.58527 1.35001C4.27708 1.35001 1.59528 4.03182 1.59528 7.34001C1.59528 10.6482 4.27708 13.33 7.58527 13.33Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.34528 3.11L11.8152 11.57",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"broken-link"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.76352 11.73L6.76352 12.73C6.44415 13.0524 6.0633 13.3075 5.64352 13.48C5.22571 13.6553 4.7766 13.7438 4.32352 13.74C3.40986 13.7429 2.53235 13.3833 1.88351 12.74C1.56332 12.4205 1.30928 12.0409 1.13596 11.6231C0.962628 11.2053 0.873383 10.7573 0.873383 10.305C0.873383 9.85264 0.962628 9.40473 1.13596 8.9869C1.30928 8.56907 1.56332 8.18952 1.88351 7.87L2.88351 6.87",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6635 7.82999L12.6635 6.82999C12.986 6.51063 13.241 6.12976 13.4135 5.70999C13.592 5.29282 13.6838 4.84374 13.6835 4.38999C13.6837 3.70751 13.4815 3.0403 13.1024 2.47277C12.7233 1.90524 12.1844 1.4629 11.5539 1.2017C10.9234 0.940496 10.2296 0.872172 9.56021 1.00537C8.89085 1.13857 8.27598 1.46731 7.79349 1.94999L6.79349 2.94999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.1735 11.24L3.36349 3.42999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"calendar"===this.props.name&&n.createElement("svg",{width:"15",height:"17",viewBox:"0 0 15 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.7348 2.64999H2.7748C1.99055 2.64999 1.35475 3.28575 1.35475 4.06999V14.03C1.35475 14.8142 1.99055 15.45 2.7748 15.45H12.7348C13.519 15.45 14.1548 14.8142 14.1548 14.03V4.06999C14.1548 3.28575 13.519 2.64999 12.7348 2.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5948 1.23V4.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.9048 1.23V4.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.35475 6.92H14.1548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"camera"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.5953 12.07C16.5926 12.429 16.4482 12.7723 16.1934 13.0252C15.9387 13.2781 15.5941 13.42 15.2352 13.42H3.04523C2.68718 13.42 2.34381 13.2778 2.09064 13.0246C1.83746 12.7714 1.69525 12.428 1.69525 12.07V4.59C1.69525 4.23196 1.83746 3.88858 2.09064 3.63541C2.34381 3.38224 2.68718 3.24001 3.04523 3.24001H5.74518L7.09528 1.24001H11.1452L12.4952 3.24001H15.1953C15.5542 3.24 15.8986 3.38191 16.1534 3.6348C16.4081 3.88769 16.5526 4.23105 16.5552 4.59L16.5953 12.07Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.16522 10.72C10.6564 10.72 11.8652 9.51118 11.8652 8.02001C11.8652 6.52884 10.6564 5.32001 9.16522 5.32001C7.67405 5.32001 6.46527 6.52884 6.46527 8.02001C6.46527 9.51118 7.67405 10.72 9.16522 10.72Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-down"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-left"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(90)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-right"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(270)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-up"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(180)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"check"===this.props.name&&n.createElement("svg",{width:"15",height:"11",viewBox:"0 0 15 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6647 0.940002L4.86478 9.74L0.864777 5.74",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"clock"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.69485 15.18C11.4725 15.18 14.5348 12.1176 14.5348 8.34C14.5348 4.56237 11.4725 1.5 7.69485 1.5C3.91723 1.5 0.854767 4.56237 0.854767 8.34C0.854767 12.1176 3.91723 15.18 7.69485 15.18Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.69485 4.23V8.34L10.4248 9.71",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"close-circle"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.42523 13.33C10.7334 13.33 13.4152 10.6482 13.4152 7.34001C13.4152 4.03182 10.7334 1.35001 7.42523 1.35001C4.11705 1.35001 1.43524 4.03182 1.43524 7.34001C1.43524 10.6482 4.11705 13.33 7.42523 13.33Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.12518 5.65001L5.73517 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.73517 5.65001L9.12518 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"close"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M9.69525 1.2L1.41522 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.41522 1.2L9.69525 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"copy-to-clipboard"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6147 6.27H7.40469C7.22347 6.27 7.04405 6.3057 6.87662 6.37505C6.70919 6.4444 6.55707 6.54605 6.42892 6.6742C6.30078 6.80234 6.19908 6.95447 6.12973 7.1219C6.06038 7.28933 6.02469 7.46878 6.02469 7.65001V13.86C6.02469 14.226 6.17012 14.577 6.42892 14.8358C6.68772 15.0946 7.03869 15.24 7.40469 15.24H13.6147C13.9807 15.24 14.3317 15.0946 14.5905 14.8358C14.8493 14.577 14.9947 14.226 14.9947 13.86V7.65001C14.9947 7.46878 14.959 7.28933 14.8897 7.1219C14.8203 6.95447 14.7186 6.80234 14.5905 6.6742C14.4623 6.54605 14.3102 6.4444 14.1428 6.37505C13.9754 6.3057 13.7959 6.27 13.6147 6.27Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.26468 10.41H2.57468C2.38882 10.4136 2.20425 10.3791 2.03226 10.3086C1.86026 10.2381 1.70449 10.1331 1.57468 10C1.44256 9.86948 1.33818 9.71364 1.26773 9.54181C1.19728 9.36998 1.16224 9.1857 1.1647 9V2.82C1.16281 2.63439 1.19811 2.45027 1.26852 2.27852C1.33894 2.10677 1.44303 1.95086 1.57468 1.82C1.70499 1.68827 1.86107 1.58477 2.03311 1.51596C2.20515 1.44714 2.38946 1.41448 2.57468 1.42H8.7847C8.968 1.41862 9.14969 1.45404 9.31906 1.52416C9.48843 1.59428 9.64204 1.69767 9.77072 1.82822C9.8994 1.95877 10.0006 2.11381 10.0683 2.28417C10.1359 2.45453 10.1687 2.63674 10.1647 2.82V3.51",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"descending"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.40469 1.61V9.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.13467 5.34L5.40469 9.07L1.6647 5.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"document"===this.props.name&&n.createElement("svg",{width:"14",height:"17",viewBox:"0 0 14 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.47476 1.39999H2.92471C2.74218 1.39999 2.5615 1.43594 2.39285 1.5058C2.22421 1.57565 2.071 1.67804 1.94193 1.80711C1.81285 1.93619 1.71039 2.08942 1.64053 2.25806C1.57068 2.42671 1.53482 2.60746 1.53482 2.78999V13.89C1.53482 14.0721 1.5708 14.2523 1.64078 14.4204C1.71075 14.5885 1.81333 14.7411 1.94254 14.8694C2.07174 14.9976 2.225 15.0991 2.39359 15.1678C2.56217 15.2366 2.74265 15.2713 2.92471 15.27H11.2448C11.4268 15.2713 11.6073 15.2366 11.7759 15.1678C11.9445 15.0991 12.0979 14.9976 12.2271 14.8694C12.3563 14.7411 12.4587 14.5885 12.5287 14.4204C12.5987 14.2523 12.6348 14.0721 12.6348 13.89V5.58999L8.47476 1.39999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.46475 1.39999V5.56999H12.6248",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.85477 9.03H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.85477 11.81H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.69473 6.25999H4.99478H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"download-a"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.01358 10.65L8.65359 13.29L11.2936 10.65",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.65359 7.34V13.29",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.5135 11.36C15.0875 10.9566 15.518 10.3808 15.7425 9.71616C15.9671 9.05151 15.974 8.33258 15.7622 7.66375C15.5504 6.99492 15.131 6.411 14.5648 5.99674C13.9986 5.58248 13.3151 5.35944 12.6135 5.36H11.7835C11.5878 4.58232 11.2178 3.85932 10.7015 3.24567C10.1852 2.63202 9.53617 2.14378 8.80345 1.81786C8.07073 1.49194 7.27349 1.33687 6.47203 1.36438C5.67056 1.39189 4.88587 1.60126 4.17723 1.97666C3.46858 2.35205 2.85455 2.88365 2.38157 3.53126C1.90859 4.17886 1.58909 4.92553 1.44712 5.7148C1.30516 6.50407 1.34445 7.31529 1.56211 8.08712C1.77978 8.85895 2.17005 9.5712 2.70347 10.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"download"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.3233 10.64V13.7C15.3246 13.9018 15.286 14.1018 15.2097 14.2886C15.1334 14.4754 15.0209 14.6452 14.8787 14.7883C14.7365 14.9315 14.5674 15.0451 14.3811 15.1226C14.1949 15.2001 13.9951 15.24 13.7933 15.24H3.06332C2.86109 15.24 2.66081 15.2002 2.47397 15.1228C2.28713 15.0454 2.11737 14.9319 1.97437 14.7889C1.83136 14.6459 1.71793 14.4762 1.64053 14.2893C1.56314 14.1025 1.52332 13.9022 1.52332 13.7V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.59332 6.81L8.43332 10.64L12.2633 6.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.43332 10.64V1.44",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"edit"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.53454 2.85999H2.70452C2.52292 2.85866 2.34289 2.89345 2.17486 2.96233C2.00683 3.03121 1.85417 3.13281 1.72576 3.26122C1.59735 3.38963 1.49575 3.54229 1.42687 3.71032C1.35799 3.87835 1.32318 4.0584 1.32451 4.23999V13.9C1.31899 14.0852 1.35164 14.2696 1.42046 14.4416C1.48928 14.6136 1.59281 14.7697 1.72454 14.9C1.8554 15.0316 2.01128 15.1357 2.18303 15.2062C2.35478 15.2766 2.53892 15.3119 2.72454 15.31H12.3845C12.7489 15.3048 13.0969 15.1578 13.3546 14.9001C13.6123 14.6424 13.7593 14.2944 13.7645 13.93V9.06999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.7045 1.82C12.9733 1.55934 13.3303 1.4094 13.7045 1.4C13.8966 1.39867 14.0871 1.43552 14.2648 1.50842C14.4426 1.58132 14.604 1.68882 14.7399 1.82466C14.8757 1.9605 14.9832 2.12197 15.0561 2.29971C15.129 2.47745 15.1659 2.6679 15.1646 2.86C15.1622 3.04677 15.1229 3.23124 15.0491 3.40284C14.9753 3.57443 14.8685 3.72979 14.7346 3.86L8.18451 10.42L5.42456 11.11L6.11456 8.35L12.7045 1.82Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"envelope"===this.props.name&&n.createElement("svg",{width:"16",height:"13",viewBox:"0 0 16 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M2.96527 1.24001H13.1552C13.493 1.24 13.8171 1.37348 14.0568 1.61137C14.2966 1.84925 14.4326 2.17226 14.4352 2.51V10.16C14.4326 10.4977 14.2966 10.8208 14.0568 11.0586C13.8171 11.2965 13.493 11.43 13.1552 11.43H2.96527C2.62752 11.43 2.30342 11.2965 2.06366 11.0586C1.8239 10.8208 1.68788 10.4977 1.68524 10.16V2.51C1.68788 2.17226 1.8239 1.84925 2.06366 1.61137C2.30342 1.37348 2.62752 1.24 2.96527 1.24001V1.24001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.4352 2.52L8.06525 6.98L1.69525 2.52",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"expand"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.4549 1.73H14.8548V6.14",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.04483 14.95H1.6348V10.54",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.8648 1.73L9.71487 6.87",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.6348 14.95L6.77481 9.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"external-link"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.2239 9.10001V13.7C13.2239 14.1084 13.0617 14.5001 12.7729 14.7889C12.4841 15.0778 12.0924 15.24 11.6839 15.24H3.25388C3.05289 15.2412 2.85377 15.2019 2.66824 15.1246C2.48272 15.0473 2.31461 14.9335 2.17392 14.79C2.03098 14.6468 1.91764 14.4768 1.84043 14.2898C1.76321 14.1028 1.72363 13.9023 1.72391 13.7V5.27C1.72653 4.86503 1.88859 4.47739 2.17496 4.19103C2.46132 3.90466 2.84891 3.74263 3.25388 3.74001H7.85391",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.9239 1.44H15.5239V6.04",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.08389 9.87L15.5239 1.44",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"eye-close"===this.props.name&&n.createElement("svg",{width:"18",height:"17",viewBox:"0 0 18 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.2347 9.8C10.0451 10.0025 9.81744 10.1656 9.56473 10.28C9.30808 10.3893 9.0335 10.4503 8.75473 10.46C8.47778 10.4605 8.20314 10.4096 7.94473 10.31C7.68694 10.2031 7.45254 10.0469 7.25473 9.85001C7.05246 9.65668 6.89537 9.42107 6.79471 9.16C6.69246 8.90261 6.64477 8.62678 6.65469 8.35C6.65565 8.07447 6.71357 7.80211 6.82474 7.55C6.94001 7.29486 7.10291 7.06406 7.30472 6.87L10.2347 9.8ZM12.8647 12.44C11.6829 13.3356 10.2473 13.8329 8.76474 13.86C3.93474 13.86 1.17471 8.34 1.17471 8.34C2.03377 6.73809 3.22745 5.33978 4.67471 4.24L12.8647 12.44ZM7.30472 2.98C7.77695 2.87138 8.26016 2.81769 8.74472 2.82C13.5747 2.82 16.3347 8.34 16.3347 8.34C15.9175 9.12411 15.418 9.86159 14.8447 10.54L7.30472 2.98Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.17471 0.75L16.3547 15.93",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"eye-open"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.99472 6.33999C0.99472 6.33999 3.75475 0.819992 8.58475 0.819992C13.4147 0.819992 16.1747 6.33999 16.1747 6.33999C16.1747 6.33999 13.4147 11.86 8.58475 11.86C3.75475 11.86 0.99472 6.33999 0.99472 6.33999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.58475 8.40999C8.99415 8.40999 9.39436 8.28859 9.73477 8.06113C10.0752 7.83368 10.3405 7.51038 10.4972 7.13214C10.6538 6.7539 10.6948 6.33769 10.615 5.93615C10.5351 5.53461 10.3379 5.16577 10.0484 4.87628C9.75894 4.58678 9.3901 4.38964 8.98856 4.30976C8.58702 4.22989 8.17082 4.27089 7.79257 4.42756C7.41433 4.58423 7.09101 4.84955 6.86356 5.18996C6.6361 5.53037 6.51474 5.93058 6.51474 6.33999C6.51474 6.88899 6.7328 7.4155 7.121 7.8037C7.5092 8.1919 8.03575 8.40999 8.58475 8.40999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"filter"===this.props.name&&n.createElement("svg",{width:"18",height:"16",viewBox:"0 0 18 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.8734 1.44H1.54337L7.67337 8.69V13.71L10.7334 15.24V8.69L16.8734 1.44Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"folder"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.77C14.0011 10.9326 13.9672 11.0937 13.9006 11.2433C13.834 11.393 13.736 11.528 13.6127 11.64C13.3673 11.8712 13.0363 12.0006 12.6916 12H2.29792C1.95325 12.0006 1.62224 11.8712 1.37683 11.64C1.25729 11.5257 1.16249 11.3901 1.09784 11.2408C1.03319 11.0915 0.999929 10.9316 1 10.77V2.22C1.00148 1.89698 1.13701 1.58771 1.37683 1.36C1.62224 1.12877 1.95325 0.999403 2.29792 1H5.54266L6.85103 2.84H12.6916C13.0363 2.8394 13.3673 2.96877 13.6127 3.2C13.7348 3.31089 13.832 3.44427 13.8986 3.59209C13.9651 3.73991 13.9996 3.89909 14 4.06V10.77Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"folders"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.9438 12.5803C13.9455 12.7685 13.9124 12.9552 13.8464 13.1293C13.7804 13.3035 13.6829 13.4616 13.5595 13.5943C13.309 13.8584 12.972 14.0042 12.6222 13.9999H2.3125C1.96297 14.0031 1.62631 13.8574 1.37525 13.5943C1.25312 13.4611 1.15697 13.3027 1.09257 13.1285C1.02816 12.9543 0.996821 12.7679 1.00035 12.5803V5.92825C0.996282 5.74059 1.02739 5.55399 1.09182 5.37971C1.15626 5.20542 1.25268 5.04707 1.37525 4.91422C1.4979 4.78073 1.64403 4.67516 1.805 4.60376C1.96597 4.53235 2.13853 4.49655 2.3125 4.49847H5.54599L6.8394 6.59751H12.6597C13.0013 6.60275 13.3274 6.75187 13.5689 7.01317C13.8104 7.27447 13.9483 7.62737 13.9531 7.99687L13.9438 12.5803Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.04723 2.42985C1.04316 2.24219 1.07426 2.05559 1.1387 1.88131C1.20313 1.70702 1.29955 1.54868 1.42212 1.41582C1.54477 1.28233 1.6909 1.17676 1.85188 1.10535C2.01285 1.03395 2.1854 0.998153 2.35937 1.00007H6.8863L8.17968 3.09911H12.7066C13.0481 3.10435 13.3743 3.25347 13.6158 3.51477C13.8574 3.77607 13.9952 4.12896 14 4.49847",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"info-circle"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.25473 15.24C9.61942 15.24 10.9535 14.8353 12.0882 14.0771C13.2229 13.319 14.1072 12.2413 14.6295 10.9805C15.1517 9.71971 15.2884 8.33235 15.0221 6.99388C14.7559 5.65541 14.0987 4.42595 13.1338 3.46097C12.1688 2.49599 10.9393 1.83882 9.60086 1.57259C8.26239 1.30635 6.87504 1.44299 5.61423 1.96524C4.35342 2.48748 3.27579 3.37187 2.51761 4.50657C1.75943 5.64127 1.35471 6.97531 1.35471 8.34C1.35735 10.1692 2.0852 11.9227 3.37863 13.2161C4.67206 14.5095 6.42555 15.2374 8.25473 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.25473 11.1V8.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.25473 5.65V5.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"internal-link"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.52392 8.8V3.28C1.5226 3.038 1.56925 2.79813 1.66125 2.5743C1.75325 2.35046 1.88875 2.14709 2.05987 1.97597C2.231 1.80484 2.43436 1.66936 2.6582 1.57736C2.88204 1.48536 3.12189 1.43867 3.36389 1.44H13.4839C13.9719 1.44 14.4399 1.63386 14.785 1.97892C15.13 2.32399 15.3239 2.792 15.3239 3.28V13.4C15.3229 13.6402 15.2753 13.8779 15.1839 14.1C15.0899 14.3236 14.9542 14.5272 14.7839 14.7C14.4387 15.0443 13.9714 15.2383 13.4839 15.24H7.96393",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.35385 6.75999H9.95389V11.4",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.5239 15.24L9.95389 6.75999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"layout"===this.props.name&&n.createElement("svg",{width:"14",height:"15",viewBox:"0 0 14 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.8629 1.19H2.30292C1.54629 1.19 0.932922 1.80337 0.932922 2.56V12.12C0.932922 12.8766 1.54629 13.49 2.30292 13.49H11.8629C12.6195 13.49 13.2329 12.8766 13.2329 12.12V2.56C13.2329 1.80337 12.6195 1.19 11.8629 1.19Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.932922 5.29001H13.2329",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.03296 13.49V5.29001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"license"===this.props.name&&n.createElement("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.2155 8.58999C14.9711 7.80057 15.3874 6.74663 15.3755 5.65392C15.3635 4.5612 14.9242 3.51661 14.1515 2.7439C13.3788 1.97119 12.3342 1.5318 11.2415 1.51986C10.1487 1.50791 9.09484 1.92436 8.30542 2.67999L3.60535 7.38V13.3H9.52539L14.2155 8.58999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.2654 5.59L1.51538 15.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.3154 10.47H6.39539",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"life-ring"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.70966 13.43C11.0731 13.43 13.7996 10.7034 13.7996 7.34C13.7996 3.97659 11.0731 1.25 7.70966 1.25C4.34624 1.25 1.61969 3.97659 1.61969 7.34C1.61969 10.7034 4.34624 13.43 7.70966 13.43Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.70966 9.77999C9.05723 9.77999 10.1497 8.68757 10.1497 7.33999C10.1497 5.99242 9.05723 4.89999 7.70966 4.89999C6.36208 4.89999 5.26971 5.99242 5.26971 7.33999C5.26971 8.68757 6.36208 9.77999 7.70966 9.77999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.40973 3.03L5.98969 5.62",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 9.06L12.0197 11.65",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 5.62L12.0197 3.03",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 5.62L11.5897 3.47",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.40973 11.65L5.98969 9.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"link"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.84119 9.03C7.13202 9.43825 7.50715 9.77928 7.94119 10.03C8.37534 10.2686 8.85677 10.4086 9.3512 10.44C9.86059 10.4745 10.3709 10.3889 10.8412 10.19C11.3076 10.0211 11.731 9.75138 12.0812 9.39999L14.1512 7.33C14.6209 6.84495 14.938 6.23271 15.0631 5.56918C15.1883 4.90564 15.1159 4.21998 14.8551 3.59716C14.5943 2.97435 14.1564 2.44177 13.5958 2.06543C13.0351 1.68909 12.3764 1.48553 11.7012 1.47999C11.2503 1.47878 10.8036 1.56647 10.3866 1.73806C9.96966 1.90966 9.59061 2.16177 9.27118 2.47999L8.08118 3.58999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.64117 7.65C9.34989 7.23849 8.97075 6.89691 8.53118 6.65C8.09831 6.40942 7.61823 6.266 7.12432 6.22974C6.63042 6.19347 6.13455 6.26522 5.67118 6.44C5.20474 6.60886 4.78133 6.87861 4.43118 7.23L2.36119 9.3C1.87601 9.78489 1.54639 10.4034 1.41442 11.0765C1.28246 11.7497 1.35414 12.4469 1.62033 13.079C1.88651 13.7112 2.33511 14.2497 2.90881 14.6257C3.48251 15.0017 4.15529 15.1982 4.84118 15.19C5.29207 15.1912 5.73876 15.1035 6.15573 14.9319C6.57269 14.7603 6.95174 14.5082 7.27117 14.19L8.45117 13.01",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"list"===this.props.name&&n.createElement("svg",{width:"17",height:"12",viewBox:"0 0 17 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.95473 1.53999H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.95473 6.34H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.95473 11.14H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 1.53999H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 6.34H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 11.14H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"log-out"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.44388 13.59H2.68387C2.49801 13.5936 2.31338 13.5591 2.14139 13.4886C1.96939 13.4181 1.81368 13.3131 1.68387 13.18C1.55176 13.0495 1.44737 12.8936 1.37692 12.7218C1.30647 12.55 1.27143 12.3657 1.27389 12.18V2.51C1.272 2.32439 1.3073 2.14028 1.37772 1.96853C1.44813 1.79678 1.55222 1.64087 1.68387 1.51C1.81418 1.37827 1.9702 1.27478 2.14224 1.20596C2.31428 1.13714 2.49866 1.10448 2.68387 1.11001H5.44388",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.2739 10.79L13.7239 7.34L10.2739 3.89",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.7239 7.34H5.44388",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plus-circle"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.38519 9.63999C7.76002 9.63999 9.68524 7.71482 9.68524 5.33999C9.68524 2.96517 7.76002 1.03999 5.38519 1.03999C3.01037 1.03999 1.08527 2.96517 1.08527 5.33999C1.08527 7.71482 3.01037 9.63999 5.38519 9.63999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.38519 3.62V7.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.66522 5.34H7.10516",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plus-square"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M9.12531 1.03999H2.43524C1.90505 1.03999 1.47528 1.4698 1.47528 1.99999V8.68999C1.47528 9.22019 1.90505 9.64999 2.43524 9.64999H9.12531C9.6555 9.64999 10.0853 9.22019 10.0853 8.68999V1.99999C10.0853 1.4698 9.6555 1.03999 9.12531 1.03999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.77533 3.42999V7.24999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.8653 5.34H7.68524",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"power"===this.props.name&&n.createElement("svg",{width:"15",height:"17",viewBox:"0 0 15 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.9098 4.59C12.7908 5.47109 13.3908 6.59365 13.6338 7.81571C13.8768 9.03777 13.752 10.3045 13.2751 11.4556C12.7983 12.6067 11.9908 13.5906 10.9548 14.2828C9.91882 14.9751 8.70077 15.3445 7.45477 15.3445C6.20878 15.3445 4.99079 14.9751 3.95477 14.2828C2.91876 13.5906 2.11125 12.6067 1.6344 11.4556C1.15755 10.3045 1.03278 9.03777 1.27582 7.81571C1.51885 6.59365 2.11881 5.47109 2.99982 4.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.47981 1.34V8.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"printer"===this.props.name&&n.createElement("svg",{width:"14",height:"15",viewBox:"0 0 14 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M3.38623 5.49V1.17H10.7863V5.49",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.38627 11.04H2.14628C1.98391 11.04 1.82314 11.0079 1.67326 10.9454C1.52337 10.883 1.38734 10.7915 1.27299 10.6762C1.15864 10.5609 1.06822 10.4242 1.007 10.2738C0.945777 10.1234 0.914858 9.96237 0.916178 9.8V6.72001C0.916178 6.39379 1.04586 6.08093 1.27653 5.85026C1.5072 5.61959 1.82006 5.49001 2.14628 5.49001H11.9762C12.3034 5.48999 12.6173 5.61926 12.8495 5.84965C13.0818 6.08003 13.2136 6.39287 13.2162 6.72001V9.8C13.2162 10.1289 13.0856 10.4443 12.8531 10.6768C12.6205 10.9094 12.3051 11.04 11.9762 11.04H10.7463",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.7863 8.56999H3.38623V13.51H10.7863V8.56999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"question-circle"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.04996 15.24C9.41465 15.24 10.7487 14.8353 11.8834 14.0771C13.0181 13.319 13.9025 12.2413 14.4247 10.9805C14.947 9.71971 15.0836 8.33235 14.8174 6.99388C14.5511 5.65541 13.894 4.42595 12.929 3.46097C11.964 2.49599 10.7345 1.83882 9.39608 1.57259C8.05761 1.30635 6.67026 1.44299 5.40945 1.96524C4.14864 2.48748 3.071 3.37187 2.31282 4.50657C1.55464 5.64127 1.14996 6.97531 1.14996 8.34C1.14996 10.17 1.87692 11.925 3.17092 13.219C4.46492 14.513 6.21996 15.24 8.04996 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.03998 6.27001C6.20089 5.80813 6.52015 5.41815 6.94115 5.16921C7.36216 4.92026 7.85772 4.82844 8.33997 4.91001C8.8197 4.99744 9.25434 5.24832 9.56998 5.62001C9.88695 5.99449 10.0606 6.46939 10.06 6.96001C10.06 8.34001 7.98997 9.03001 7.98997 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.04993 11.79V11.73",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"refresh-1"===this.props.name&&n.createElement("svg",{width:"17",height:"14",viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.4753 2.14V6.04H11.5753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.18524 12.54V8.64H5.08527",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.81525 5.39C3.33356 3.92951 4.41025 2.73435 5.8089 2.0669C7.20755 1.39945 8.8138 1.31425 10.2752 1.83001C11.097 2.11893 11.8425 2.59081 12.4553 3.21L15.4553 6.04M1.16522 8.64001L4.16522 11.47C4.86357 12.1684 5.72733 12.6787 6.67609 12.9532C7.62484 13.2277 8.62773 13.2575 9.59113 13.0399C10.5545 12.8222 11.4471 12.3642 12.1857 11.7085C12.9243 11.0528 13.485 10.2208 13.8152 9.29",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"refresh"===this.props.name&&n.createElement("svg",{width:"16",height:"15",viewBox:"0 0 16 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.60464 2.06999V6.06999H5.54471",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.25467 9.29999C3.57205 10.2045 4.1047 11.0183 4.80667 11.6711C5.50864 12.3239 6.3588 12.7962 7.28397 13.0471C8.20913 13.2981 9.18158 13.3203 10.1172 13.1117C11.0529 12.9032 11.9237 12.4701 12.6547 11.85C13.2373 11.3277 13.7104 10.695 14.0465 9.98847C14.3827 9.28196 14.5751 8.51572 14.6128 7.73422C14.6505 6.95272 14.5327 6.17152 14.2661 5.43591C13.9996 4.70031 13.5897 4.02495 13.0601 3.44902C12.5305 2.87309 11.8918 2.40804 11.1811 2.08087C10.4703 1.75369 9.70175 1.57089 8.91983 1.54307C8.13792 1.51526 7.3583 1.64298 6.62613 1.91882C5.89396 2.19467 5.22387 2.61315 4.65469 3.14999L1.65469 6.01999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"save"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.4247 15.24H2.69469C2.28625 15.24 1.89456 15.0777 1.60576 14.7889C1.31695 14.5001 1.15471 14.1084 1.15471 13.7V2.96999C1.1547 2.76823 1.19463 2.56845 1.27214 2.38217C1.34965 2.19588 1.46323 2.02677 1.60637 1.88457C1.7495 1.74236 1.91934 1.62987 2.10612 1.55357C2.29291 1.47727 2.49292 1.43867 2.69469 1.43999H11.1247L14.9547 5.26999V13.7C14.956 13.9018 14.9174 14.1018 14.8411 14.2886C14.7648 14.4754 14.6523 14.6452 14.5101 14.7883C14.3679 14.9315 14.1988 15.0451 14.0125 15.1226C13.8262 15.2001 13.6265 15.24 13.4247 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.8947 15.24V9.10999H4.22472V15.24",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.22472 1.43999V5.26999H10.3647",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"search"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.20346 12.17C8.29521 12.17 9.36247 11.8462 10.2702 11.2397C11.178 10.6332 11.8855 9.77105 12.3033 8.7624C12.7211 7.75375 12.8304 6.64387 12.6174 5.57309C12.4044 4.50232 11.8787 3.51875 11.1067 2.74676C10.3347 1.97478 9.35114 1.44905 8.28036 1.23606C7.20959 1.02307 6.09974 1.13238 5.09109 1.55018C4.08245 1.96797 3.22028 2.67548 2.61374 3.58324C2.00719 4.491 1.6835 5.55824 1.6835 6.64999C1.6835 8.11399 2.26506 9.51802 3.30026 10.5532C4.33546 11.5884 5.73947 12.17 7.20346 12.17V12.17Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.1035 13.59L11.1035 10.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"share"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.4733 5.58C12.6166 5.58 13.5434 4.65323 13.5434 3.51C13.5434 2.36677 12.6166 1.44 11.4733 1.44C10.3301 1.44 9.40335 2.36677 9.40335 3.51C9.40335 4.65323 10.3301 5.58 11.4733 5.58Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.19333 10.41C4.33656 10.41 5.26334 9.48323 5.26334 8.34C5.26334 7.19677 4.33656 6.27 3.19333 6.27C2.0501 6.27 1.12335 7.19677 1.12335 8.34C1.12335 9.48323 2.0501 10.41 3.19333 10.41Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.4733 15.24C12.6166 15.24 13.5434 14.3132 13.5434 13.17C13.5434 12.0268 12.6166 11.1 11.4733 11.1C10.3301 11.1 9.40335 12.0268 9.40335 13.17C9.40335 14.3132 10.3301 15.24 11.4733 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.98334 9.38L9.69333 12.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.69333 4.55L4.98334 7.3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"star"===this.props.name&&n.createElement("svg",{width:"14",height:"13",viewBox:"0 0 14 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.30478 0.110001L9.32474 4.21L13.8548 4.87L10.5747 8.06L11.3548 12.57L7.30478 10.44L3.25479 12.57L4.03476 8.06L0.754791 4.87L5.28476 4.21L7.30478 0.110001Z",fill:"var(--icon-favorites-color)"})),"star-stroke"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8 1.77L10.02 5.87L14.55 6.53L11.2699 9.72L12.05 14.23L8 12.1L3.95001 14.23L4.72998 9.72L1.45001 6.53L5.97998 5.87L8 1.77Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinejoin:"round"})),"switch"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.5154 10.8L13.7454 13.58L10.9753 10.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.58545 1.09999H10.9653C11.7009 1.09999 12.4065 1.39151 12.9276 1.9107C13.4487 2.42989 13.7427 3.13442 13.7454 3.86999V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.27539 3.87999L4.04541 1.09999L6.81543 3.87999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.19543 13.59H6.81543C6.45083 13.5913 6.08955 13.5206 5.75232 13.382C5.41509 13.2434 5.1085 13.0396 4.85022 12.7822C4.59194 12.5249 4.38702 12.2191 4.24719 11.8823C4.10736 11.5456 4.0354 11.1846 4.0354 10.82V1.12",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"theme-dark"===this.props.name&&n.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.14 7.31001C13.0365 8.40623 12.6232 9.45037 11.9483 10.3204C11.2734 11.1904 10.3648 11.8503 9.32868 12.2229C8.29257 12.5956 7.17169 12.6656 6.09724 12.4248C5.02279 12.1841 4.03916 11.6424 3.26118 10.8632C2.4832 10.084 1.94314 9.09942 1.70405 8.02459C1.46497 6.94976 1.53678 5.82909 1.91108 4.79356C2.28539 3.75804 2.94664 2.85046 3.8177 2.17692C4.68876 1.50337 5.73364 1.09169 6.83003 0.990005C6.19481 1.86018 5.8913 2.92863 5.97419 4.0028C6.05709 5.07697 6.52085 6.08621 7.28205 6.84863C8.04326 7.61104 9.05177 8.07648 10.1258 8.16107C11.1998 8.24567 12.2688 7.94385 13.14 7.31001V7.31001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"theme-light"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.47571 11.23C10.2541 11.23 11.6957 9.78835 11.6957 8.00999C11.6957 6.23164 10.2541 4.78999 8.47571 4.78999C6.69735 4.78999 5.25574 6.23164 5.25574 8.00999C5.25574 9.78835 6.69735 11.23 8.47571 11.23Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.47571 0.919998V2.21",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.47571 13.82V15.11",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.45569 3L4.37573 3.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.5757 12.11L13.4857 13.03",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.37573 8.00999H2.66577",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.2758 8.00999H15.5657",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.45569 13.03L4.37573 12.11",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.5757 3.91L13.4857 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"trash"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.30994 4.2H13.6899",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.75995 4.19999V2.81999C4.75806 2.63438 4.79335 2.45026 4.86377 2.27851C4.93419 2.10676 5.03829 1.95085 5.16994 1.81999C5.30095 1.68922 5.45711 1.58635 5.62898 1.5176C5.80086 1.44885 5.98488 1.41565 6.16994 1.41999H8.92995C9.11154 1.41866 9.29158 1.45345 9.45961 1.52233C9.62764 1.59121 9.78031 1.69281 9.90872 1.82122C10.0371 1.94963 10.1387 2.10229 10.2076 2.27032C10.2765 2.43835 10.3113 2.6184 10.3099 2.79999V4.17999L4.75995 4.19999ZM12.3799 4.17999V13.84C12.3843 14.0251 12.3511 14.2091 12.2823 14.3809C12.2136 14.5528 12.1107 14.709 11.9799 14.84C11.8491 14.9716 11.6932 15.0758 11.5214 15.1462C11.3497 15.2166 11.1656 15.2519 10.9799 15.25H4.07994C3.7121 15.2474 3.36007 15.1001 3.09996 14.84C2.83985 14.5799 2.69256 14.2278 2.68994 13.86V4.19999L12.3799 4.17999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.13995 7.64999V11.79",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.89996 7.64999V11.79",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"txt"===this.props.name&&n.createElement("svg",{width:"17",height:"12",viewBox:"0 0 17 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.0753 4.78H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.2754 1.58H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.2754 7.98H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.0753 11.18H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"upload-a"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.7482 9.98L8.10822 7.34L5.4682 9.98",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.10822 7.34V13.28",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.6383 11.59C14.2828 11.24 14.7924 10.6853 15.0865 10.0134C15.3807 9.34158 15.4426 8.59089 15.2626 7.87992C15.0825 7.16895 14.6707 6.53821 14.0923 6.08732C13.5138 5.63642 12.8018 5.39107 12.0684 5.39H11.2283C11.0717 4.70118 10.7786 4.05078 10.3661 3.47732C9.95362 2.90385 9.43025 2.41898 8.82702 2.05142C8.22379 1.68385 7.553 1.44107 6.85425 1.33744C6.1555 1.23382 5.44297 1.27145 4.75903 1.44813C4.07509 1.6248 3.43358 1.93692 2.87243 2.366C2.31129 2.79507 1.84193 3.33239 1.49219 3.94612C1.14244 4.55985 0.919424 5.23753 0.836302 5.93901C0.753179 6.6405 0.811675 7.35153 1.0083 8.03C1.21212 8.83805 1.60647 9.58555 2.15832 10.21",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.7482 9.98L8.10822 7.34L5.4682 9.98",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"upload"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.1234 10.64V13.7C15.1234 14.1067 14.9625 14.4969 14.6758 14.7854C14.3892 15.0739 14.0001 15.2374 13.5934 15.24H2.85333C2.44663 15.2374 2.05752 15.0739 1.77087 14.7854C1.48423 14.4969 1.32333 14.1067 1.32333 13.7V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.0634 5.27L8.22336 1.44L4.39334 5.27",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.22336 1.44V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"user"===this.props.name&&n.createElement("svg",{width:"13",height:"15",viewBox:"0 0 13 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.9329 13.59V12.17C11.9305 11.4474 11.6458 10.7543 11.1395 10.2386C10.6332 9.72301 9.94542 9.42564 9.22295 9.40999H3.70296C3.34014 9.40867 2.98065 9.47915 2.64519 9.61739C2.30974 9.75562 2.00495 9.95887 1.7484 10.2154C1.49185 10.472 1.28858 10.7768 1.15035 11.1122C1.01211 11.4477 0.941629 11.8072 0.94295 12.17V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.41296 6.64999C6.95884 6.64999 7.49247 6.48812 7.94635 6.18485C8.40023 5.88157 8.75396 5.45052 8.96286 4.9462C9.17176 4.44187 9.22643 3.88693 9.11993 3.35154C9.01344 2.81615 8.75056 2.32437 8.36456 1.93838C7.97857 1.55238 7.4868 1.28952 6.95142 1.18302C6.41603 1.07653 5.86107 1.13118 5.35675 1.34008C4.85243 1.54898 4.42138 1.90274 4.1181 2.35662C3.81483 2.8105 3.65295 3.34411 3.65295 3.88999C3.65559 4.62118 3.94723 5.32166 4.46426 5.83869C4.98129 6.35572 5.68178 6.64736 6.41296 6.64999V6.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"users"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.1038 13.59V12.17C12.1124 11.799 12.0449 11.4302 11.9056 11.0862C11.7663 10.7423 11.5581 10.4305 11.2938 10.17C11.0319 9.90758 10.7199 9.70061 10.3763 9.56145C10.0326 9.42228 9.66448 9.35376 9.2938 9.35999H3.77378C3.04963 9.38607 2.36453 9.69487 1.8654 10.2202C1.36627 10.7455 1.09287 11.4455 1.1038 12.17V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.6138 6.64999C7.15968 6.64999 7.69331 6.48812 8.14719 6.18485C8.60107 5.88157 8.95483 5.45052 9.16373 4.9462C9.37262 4.44187 9.42727 3.88693 9.32077 3.35154C9.21428 2.81615 8.95139 2.32437 8.5654 1.93838C8.17941 1.55238 7.68764 1.28952 7.15225 1.18302C6.61686 1.07653 6.06191 1.13118 5.55759 1.34008C5.05326 1.54898 4.62221 1.90274 4.31894 2.35662C4.01567 2.8105 3.85379 3.34411 3.85379 3.88999C3.85643 4.62118 4.14804 5.32166 4.66507 5.83869C5.1821 6.35572 5.88261 6.64736 6.6138 6.64999V6.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M16.2738 13.59V12.17C16.2709 11.5583 16.0672 10.9645 15.6938 10.48C15.324 9.98829 14.7989 9.63591 14.2038 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.4438 1.22C12.0403 1.37297 12.5662 1.72595 12.9338 2.22C13.3101 2.703 13.5144 3.29774 13.5144 3.91C13.5144 4.52226 13.3101 5.117 12.9338 5.6C12.5662 6.09405 12.0403 6.44703 11.4438 6.6",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"video"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6053 1.59H3.04523C2.23337 1.59 1.57526 2.24814 1.57526 3.06V13.62C1.57526 14.4319 2.23337 15.09 3.04523 15.09H13.6053C14.4171 15.09 15.0753 14.4319 15.0753 13.62V3.06C15.0753 2.24814 14.4171 1.59 13.6053 1.59Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.94525 1.59V15.09",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 1.59V15.09",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 8.34H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 4.97H4.94525",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 11.71H4.94525",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 11.71H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 4.97H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"warning"===this.props.name&&n.createElement("svg",{width:"16",height:"15",viewBox:"0 0 16 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.04506 1.94L1.39504 11.38C1.30734 11.5316 1.25039 11.699 1.22756 11.8726C1.20473 12.0462 1.21645 12.2227 1.26198 12.3918C1.30751 12.5609 1.38602 12.7193 1.49294 12.858C1.59986 12.9967 1.73308 13.1129 1.88503 13.2C2.08111 13.3184 2.30599 13.3807 2.53505 13.38H13.845C14.0205 13.3787 14.1941 13.3427 14.3556 13.274C14.5171 13.2053 14.6634 13.1054 14.7862 12.9799C14.9089 12.8544 15.0055 12.7058 15.0706 12.5428C15.1356 12.3798 15.1677 12.2055 15.1651 12.03C15.1657 11.8009 15.1034 11.5761 14.985 11.38L9.33498 1.94C9.2446 1.78868 9.12507 1.65685 8.98329 1.55214C8.84152 1.44744 8.68038 1.37195 8.50917 1.33008C8.33797 1.28821 8.1602 1.28079 7.9861 1.30824C7.812 1.33569 7.64503 1.39748 7.49501 1.49C7.312 1.60289 7.15795 1.75699 7.04506 1.94V1.94Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.1951 5.37V8.04",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.1951 10.71H8.20511",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"chevron-left"===this.props.name&&n.createElement("svg",{width:"7",height:"12",viewBox:"0 0 7 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.76616 10.805L0.936157 5.975L5.76616 1.145",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"chevron-right"===this.props.name&&n.createElement("svg",{width:"7",height:"12",viewBox:"0 0 7 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.766174 1.145L5.59618 5.975L0.766174 10.805",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"cog"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.7254 6.42L12.4355 5.7C12.3855 5.13 13.5555 3.92 13.3255 3.7L12.7654 3.13C12.7654 3.13 12.4354 2.80999 12.2054 2.56999C11.9754 2.32999 10.7554 3.57 10.2054 3.47L9.49545 3.17C9.05545 2.8 9.02545 1.11 8.69545 1.11H7.12544C6.79544 1.11 6.77545 2.8 6.33545 3.17L5.61545 3.47C5.05545 3.52 3.84545 2.33999 3.61545 2.56999C3.38545 2.79999 3.05545 3.13 3.05545 3.13L2.49545 3.7C2.25545 3.93 3.43545 5.14 3.38545 5.7L3.08545 6.42C2.72545 6.85 1.08545 6.88001 1.08545 7.21001V8.8C1.08545 9.13 2.77545 9.15 3.08545 9.59L3.38545 10.31C3.38545 10.87 2.25545 12.09 2.49545 12.31L3.05545 12.87L3.61545 13.43C3.85545 13.67 5.06545 12.49 5.61545 12.54L6.33545 12.84C6.77545 13.2 6.79544 14.84 7.12544 14.84H8.72545C9.05545 14.84 9.08545 13.15 9.52545 12.84L10.2354 12.54C10.8054 12.54 12.0154 13.67 12.2354 13.43L12.7955 12.87L13.3555 12.31C13.5855 12.08 12.4155 10.86 12.4655 10.31L12.7254 9.64C13.0954 9.2 14.7854 9.18001 14.7854 8.85001V7.25999C14.8254 6.87999 13.1354 6.85 12.7254 6.42ZM7.88545 10.19C7.45189 10.192 7.02749 10.0652 6.66603 9.82579C6.30457 9.58636 6.02233 9.24502 5.85504 8.84503C5.68775 8.44504 5.64295 8.00439 5.72632 7.57892C5.80969 7.15344 6.01747 6.76228 6.32335 6.455C6.62922 6.14772 7.01941 5.93816 7.4445 5.85284C7.86959 5.76753 8.31044 5.81031 8.7112 5.97577C9.11195 6.14123 9.45458 6.42192 9.69566 6.78227C9.93675 7.14263 10.0654 7.56643 10.0654 8C10.0656 8.57226 9.84174 9.12185 9.44179 9.53114C9.04184 9.94044 8.49756 10.1769 7.92545 10.19H7.88545Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"contrast"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.30612 14.875C9.67081 14.875 11.0049 14.4703 12.1396 13.7121C13.2743 12.954 14.1587 11.8763 14.6809 10.6155C15.2032 9.35471 15.3398 7.96734 15.0735 6.62888C14.8073 5.29041 14.1502 4.06094 13.1852 3.09596C12.2202 2.13098 10.9907 1.47382 9.65225 1.20758C8.31378 0.941342 6.92643 1.07799 5.66562 1.60023C4.40481 2.12248 3.32718 3.00687 2.569 4.14157C1.81082 5.27627 1.40613 6.61031 1.40613 7.97501C1.40613 9.805 2.13309 11.56 3.42709 12.854C4.72109 14.1481 6.47613 14.875 8.30612 14.875V14.875Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.30612 1.07501C6.47613 1.07501 4.72109 1.80196 3.42709 3.09596C2.13309 4.38996 1.40613 6.14501 1.40613 7.97501C1.40613 9.805 2.13309 11.56 3.42709 12.854C4.72109 14.1481 6.47613 14.875 8.30612 14.875V1.07501Z",fill:"var(--icon-color)",stroke:"none"})),"copy-to-clipboard-2"===this.props.name&&n.createElement("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.0061 2.55C11.3774 2.55 11.7335 2.6975 11.9961 2.96005C12.2586 3.2226 12.4061 3.57869 12.4061 3.95V13.75C12.4061 14.1213 12.2586 14.4774 11.9961 14.7399C11.7335 15.0025 11.3774 15.15 11.0061 15.15H2.60611C2.23481 15.15 1.87872 15.0025 1.61617 14.7399C1.35361 14.4774 1.20612 14.1213 1.20612 13.75V3.95C1.20612 3.57869 1.35361 3.2226 1.61617 2.96005C1.87872 2.6975 2.23481 2.55 2.60611 2.55",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.9061 2.22H8.2261C8.2261 1.84339 8.0765 1.48221 7.8102 1.21591C7.54389 0.94961 7.18271 0.800003 6.80611 0.800003C6.4295 0.800003 6.0683 0.94961 5.802 1.21591C5.5357 1.48221 5.38611 1.84339 5.38611 2.22H4.7061C4.52045 2.22 4.3424 2.29374 4.21112 2.42502C4.07985 2.55629 4.0061 2.73435 4.0061 2.92V3.62C4.0061 3.80565 4.07985 3.9837 4.21112 4.11497C4.3424 4.24625 4.52045 4.32001 4.7061 4.32001H8.9061C9.09175 4.32001 9.26979 4.24625 9.40106 4.11497C9.53234 3.9837 9.60611 3.80565 9.60611 3.62V2.92C9.60611 2.73435 9.53234 2.55629 9.40106 2.42502C9.26979 2.29374 9.09175 2.22 8.9061 2.22Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"home-1"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.54611 0.934998L1.20612 5.86499V13.605C1.20873 13.9781 1.35812 14.3353 1.62198 14.5991C1.88584 14.863 2.24297 15.0124 2.61612 15.015H5.61612V8.755H9.52612V15.015H12.5261C12.8985 15.0098 13.2541 14.8596 13.5174 14.5963C13.7807 14.333 13.931 13.9773 13.9361 13.605V5.86499L7.54611 0.934998Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"home"===this.props.name&&n.createElement("svg",{width:"13",height:"14",viewBox:"0 0 13 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.56547 0.764991L0.975466 5.115V11.945C0.974867 12.2743 1.10424 12.5905 1.33547 12.825C1.57112 13.0544 1.88658 13.1835 2.21546 13.185H4.83547V7.665H8.28546V13.185H10.9055C11.2348 13.1856 11.551 13.0562 11.7855 12.825C11.9031 12.7107 11.9965 12.5739 12.0601 12.4227C12.1237 12.2715 12.1561 12.109 12.1555 11.945V5.115L6.56547 0.764991Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"key"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.96613 14.385C6.75553 14.385 8.20613 12.9344 8.20613 11.145C8.20613 9.3556 6.75553 7.905 4.96613 7.905C3.17672 7.905 1.72614 9.3556 1.72614 11.145C1.72614 12.9344 3.17672 14.385 4.96613 14.385Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.5461 1.565L7.2561 8.845",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.3461 5.735L15.2061 3.875",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"lock-open"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},n.createElement("g",{fill:"none"},n.createElement("rect",{height:"7.37",rx:".75",stroke:"var(--icon-color)",strokeLinejoin:"round",strokeWidth:"var(--icon-stroke-width)",width:"9.81",x:"3.09",y:"7.43"}),n.createElement("path",{d:"m14.39 6.15v-1.61c0-1.85-.68-3.35-1.52-3.35-.84 0-1.52 1.5-1.52 3.35v2.89",stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"var(--icon-stroke-width)"}),n.createElement("path",{d:"m0 0h16v16h-16z"}))),"lock"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 12 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.2155 7.41H1.90546C1.49124 7.41 1.15546 7.74579 1.15546 8.16V14.03C1.15546 14.4442 1.49124 14.78 1.90546 14.78H10.2155C10.6297 14.78 10.9655 14.4442 10.9655 14.03V8.16C10.9655 7.74579 10.6297 7.41 10.2155 7.41Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.72546 7.39999V4.52C2.72546 3.63153 3.07841 2.77945 3.70666 2.1512C4.3349 1.52295 5.18699 1.17 6.07546 1.17V1.17C6.96394 1.17 7.81603 1.52295 8.44427 2.1512C9.07252 2.77945 9.42546 3.63153 9.42546 4.52V7.39999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"settings"===this.props.name&&n.createElement("svg",{width:"13",height:"16",viewBox:"0 0 13 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.786133 3.105H3.55614",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.98615 3.105H11.7262",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.786133 7.97501H8.09613",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5361 7.97501H11.7261",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.786133 12.835H3.82614",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.2561 12.835H11.7261",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.55615 1.285V4.935",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.09613 6.145V9.795",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.82617 11.015V14.665",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"tag"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.62 8.39256L14.93 4.53256C14.9802 4.38718 14.989 4.23071 14.9554 4.08062C14.9219 3.93053 14.8473 3.79272 14.74 3.68255L12.38 1.32255C12.2698 1.21524 12.132 1.14064 11.9819 1.10709C11.8318 1.07354 11.6754 1.08236 11.53 1.13255L7.66999 2.44256C7.54938 2.48377 7.43989 2.5522 7.34999 2.64256L1.43999 8.62255C1.3638 8.6987 1.30335 8.78912 1.26211 8.88863C1.22087 8.98815 1.19965 9.09483 1.19965 9.20255C1.19965 9.31028 1.22087 9.41694 1.26211 9.51646C1.30335 9.61598 1.3638 9.70641 1.43999 9.78256L6.34999 14.6226C6.42614 14.6987 6.51656 14.7592 6.61608 14.8004C6.7156 14.8417 6.82227 14.8629 6.92999 14.8629C7.03772 14.8629 7.14439 14.8417 7.2439 14.8004C7.34342 14.7592 7.43384 14.6987 7.50999 14.6226L13.44 8.69256C13.5206 8.60648 13.582 8.50421 13.62 8.39256V8.39256Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M11.78 5.34255C12.3433 5.34255 12.8 4.88588 12.8 4.32255C12.8 3.75922 12.3433 3.30256 11.78 3.30256C11.2167 3.30256 10.76 3.75922 10.76 4.32255C10.76 4.88588 11.2167 5.34255 11.78 5.34255Z",fill:"var(--icon-color)",stroke:"none"})),"2-columns-narrow-right"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.4927 1.01001H2.75269C1.90769 1.01001 1.22266 1.69501 1.22266 2.54001V13.28C1.22266 14.125 1.90769 14.81 2.75269 14.81H13.4927C14.3377 14.81 15.0226 14.125 15.0226 13.28V2.54001C15.0226 1.69501 14.3377 1.01001 13.4927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.4227 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"2+2-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.0927 1.01001H2.35266C1.50767 1.01001 0.822693 1.69501 0.822693 2.54001V13.28C0.822693 14.125 1.50767 14.81 2.35266 14.81H13.0927C13.9376 14.81 14.6227 14.125 14.6227 13.28V2.54001C14.6227 1.69501 13.9376 1.01001 13.0927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.0226 1.01001V7.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.35266 7.91V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.6227 7.91H0.822693",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"3+1-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.2927 1.66H2.55267C1.70768 1.66 1.02264 2.34501 1.02264 3.19V13.93C1.02264 14.775 1.70768 15.46 2.55267 15.46H13.2927C14.1377 15.46 14.8227 14.775 14.8227 13.93V3.19C14.8227 2.34501 14.1377 1.66 13.2927 1.66Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.62268 1.66V6.51999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.2227 1.66V6.51999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.8227 6.51999H1.02264",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"bug"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.73268 5.40999C8.15113 5.40867 8.56568 5.48993 8.95265 5.64916C9.33962 5.80838 9.6914 6.04242 9.98775 6.33785C10.2841 6.63327 10.5192 6.98427 10.6796 7.37074C10.8401 7.75721 10.9227 8.17154 10.9227 8.58998V9.98998C10.9227 10.836 10.5866 11.6474 9.98836 12.2457C9.39012 12.8439 8.57872 13.18 7.73268 13.18C7.31424 13.18 6.89991 13.0974 6.51344 12.937C6.12697 12.7765 5.77597 12.5414 5.48055 12.245C5.18512 11.9487 4.95111 11.5969 4.79189 11.21C4.63267 10.823 4.55137 10.4084 4.55269 9.98998V8.58998C4.55269 7.74659 4.88772 6.93775 5.48409 6.34139C6.08045 5.74502 6.88929 5.40999 7.73268 5.40999V5.40999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.74268 5.41V4.69C5.74268 4.2577 5.91441 3.8431 6.22009 3.53741C6.52578 3.23173 6.94038 3.06 7.37268 3.06H8.09265C8.52495 3.06 8.93955 3.23173 9.24524 3.53741C9.55092 3.8431 9.72266 4.2577 9.72266 4.69V5.41",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.06268 1.45999C6.99268 1.64999 7.61268 2.11999 7.62268 2.64999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.40265 1.45999C8.47265 1.64999 7.85265 2.11999 7.84265 2.64999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.8627 7.95999L13.5427 6.51001L12.5427 4.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.9227 9.29999H13.0226L14.1627 11.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5427 11.51L12.0126 12.78L10.5427 14.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.52264 7.95999L1.84265 6.51001L2.84265 4.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.46265 9.29999H2.36267L1.22266 11.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.84265 11.51L3.36267 12.78L4.84265 14.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"cloud"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.2073 5.06497H11.3573C11.1192 4.10573 10.616 3.2328 9.90537 2.54587C9.19474 1.85894 8.30523 1.38569 7.33847 1.18018C6.3717 0.974661 5.36663 1.04515 4.43801 1.38361C3.5094 1.72206 2.69467 2.31484 2.08688 3.09424C1.47909 3.87364 1.10273 4.80825 1.00077 5.79135C0.898818 6.77445 1.07538 7.76642 1.51029 8.65396C1.94521 9.5415 2.62095 10.2889 3.46035 10.8107C4.29975 11.3325 5.26897 11.6077 6.25733 11.605H12.2073C13.0746 11.605 13.9063 11.2605 14.5196 10.6472C15.1328 10.034 15.4773 9.20222 15.4773 8.33496C15.4773 7.4677 15.1328 6.63598 14.5196 6.02274C13.9063 5.40949 13.0746 5.06497 12.2073 5.06497V5.06497Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-caret-left"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6927 1.01001H2.9527C2.1077 1.01001 1.42267 1.69501 1.42267 2.54001V13.28C1.42267 14.125 2.1077 14.81 2.9527 14.81H13.6927C14.5377 14.81 15.2227 14.125 15.2227 13.28V2.54001C15.2227 1.69501 14.5377 1.01001 13.6927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.02271 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.9327 5.59L9.61267 7.91L11.9327 10.23",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-caret-right"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.8927 1.01001H3.15265C2.30765 1.01001 1.62268 1.69501 1.62268 2.54001V13.28C1.62268 14.125 2.30765 14.81 3.15265 14.81H13.8927C14.7377 14.81 15.4227 14.125 15.4227 13.28V2.54001C15.4227 1.69501 14.7377 1.01001 13.8927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.22266 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.81268 10.23L12.1327 7.91L9.81268 5.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-narrow-left"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6927 1.01001H2.95267C2.10767 1.01001 1.42267 1.69501 1.42267 2.54001V13.28C1.42267 14.125 2.10767 14.81 2.95267 14.81H13.6927C14.5377 14.81 15.2227 14.125 15.2227 13.28V2.54001C15.2227 1.69501 14.5377 1.01001 13.6927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.02264 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns"===this.props.name&&n.createElement("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.8926 1.66H3.15265C2.30765 1.66 1.62265 2.34501 1.62265 3.19V13.93C1.62265 14.775 2.30765 15.46 3.15265 15.46H13.8926C14.7376 15.46 15.4227 14.775 15.4227 13.93V3.19C15.4227 2.34501 14.7376 1.66 13.8926 1.66Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.22266 1.66V15.46",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.8227 1.66V15.46",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"dashboard-2"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.1126 3.82999C15.0921 5.06821 15.6243 6.6012 15.6227 8.17999C15.6218 9.26541 15.3721 10.3362 14.8927 11.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.20267 11.28C1.72784 10.3157 1.48147 9.25491 1.48267 8.18001C1.48722 7.09544 1.74051 6.02639 2.22309 5.0551C2.70566 4.0838 3.40465 3.23616 4.26624 2.57741C5.12783 1.91865 6.12907 1.46634 7.19291 1.25529C8.25675 1.04424 9.35483 1.08005 10.4027 1.36",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.55267 8.17999L12.4326 2.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.6227 8.17999H14.0527",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.55267 1.12V2.69",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.56262 3.19L4.67264 4.29999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.49268 8.17999H3.06268",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"dice"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.14615 5.29L1.81615 6.97C1.50297 7.07105 1.24229 7.29153 1.09065 7.58358C0.939009 7.87563 0.908637 8.2157 1.00615 8.52999L2.68616 13.86C2.78515 14.175 3.00477 14.4381 3.29706 14.5917C3.58934 14.7453 3.93054 14.7771 4.24615 14.68L9.57616 13C9.73199 12.9511 9.87662 12.8719 10.0018 12.7669C10.1269 12.6619 10.23 12.5333 10.3053 12.3883C10.3806 12.2433 10.4265 12.0849 10.4403 11.9222C10.4542 11.7595 10.4358 11.5956 10.3862 11.44L8.70616 6.1C8.60511 5.78683 8.38463 5.52612 8.09257 5.37448C7.80052 5.22283 7.46044 5.19249 7.14615 5.29V5.29Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6762 10.09C11.8345 10.1286 11.9988 10.1353 12.1597 10.1098C12.3207 10.0843 12.4749 10.0271 12.6135 9.94154C12.7521 9.85595 12.8724 9.74366 12.9673 9.61122C13.0621 9.47877 13.1297 9.32879 13.1662 9.17L14.4562 3.72001C14.5313 3.40046 14.4766 3.06417 14.3041 2.78486C14.1317 2.50556 13.8555 2.30603 13.5362 2.23002L8.09618 0.940016C7.77417 0.867702 7.43664 0.924619 7.15614 1.09852C6.87565 1.27243 6.67459 1.54943 6.59618 1.87001L6.13617 3.87001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.43617 9.62C3.878 9.62 4.23618 9.26184 4.23618 8.82001C4.23618 8.37818 3.878 8.01999 3.43617 8.01999C2.99434 8.01999 2.63617 8.37818 2.63617 8.82001C2.63617 9.26184 2.99434 9.62 3.43617 9.62Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M6.88617 8.51999C7.328 8.51999 7.68617 8.16183 7.68617 7.72C7.68617 7.27817 7.328 6.92001 6.88617 6.92001C6.44434 6.92001 6.08618 7.27817 6.08618 7.72C6.08618 8.16183 6.44434 8.51999 6.88617 8.51999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M5.69617 10.79C6.13799 10.79 6.49617 10.4318 6.49617 9.98999C6.49617 9.54816 6.13799 9.19 5.69617 9.19C5.25434 9.19 4.89618 9.54816 4.89618 9.98999C4.89618 10.4318 5.25434 10.79 5.69617 10.79Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M4.52618 13.05C4.96801 13.05 5.32619 12.6918 5.32619 12.25C5.32619 11.8082 4.96801 11.45 4.52618 11.45C4.08436 11.45 3.7262 11.8082 3.7262 12.25C3.7262 12.6918 4.08436 13.05 4.52618 13.05Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M7.96614 11.97C8.40797 11.97 8.76614 11.6118 8.76614 11.17C8.76614 10.7282 8.40797 10.37 7.96614 10.37C7.52431 10.37 7.16614 10.7282 7.16614 11.17C7.16614 11.6118 7.52431 11.97 7.96614 11.97Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M11.2362 8.48999C11.678 8.48999 12.0362 8.13183 12.0362 7.69C12.0362 7.24817 11.678 6.89001 11.2362 6.89001C10.7943 6.89001 10.4362 7.24817 10.4362 7.69C10.4362 8.13183 10.7943 8.48999 11.2362 8.48999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M8.54616 4.14001C8.98799 4.14001 9.34616 3.78182 9.34616 3.34C9.34616 2.89817 8.98799 2.54001 8.54616 2.54001C8.10433 2.54001 7.74615 2.89817 7.74615 3.34C7.74615 3.78182 8.10433 4.14001 8.54616 4.14001Z",fill:"var(--icon-color)",stroke:"none"})),"face-ID"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.35001 5.07001V2.51001C1.34869 2.33845 1.38134 2.16831 1.44608 2.00943C1.51082 1.85055 1.60637 1.70607 1.72722 1.58429C1.84807 1.46251 1.99183 1.36585 2.15021 1.2999C2.30859 1.23394 2.47845 1.19998 2.65002 1.19998H4.95001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.72 1.19998H13.29C13.4616 1.19998 13.6315 1.23394 13.7898 1.2999C13.9482 1.36585 14.092 1.46251 14.2128 1.58429C14.3337 1.70607 14.4292 1.85055 14.494 2.00943C14.5587 2.16831 14.5913 2.33845 14.59 2.51001V4.79999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.59 10.59V13.16C14.59 13.5057 14.4534 13.8374 14.2098 14.0828C13.9663 14.3282 13.6357 14.4674 13.29 14.47H10.99",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.22 14.45H2.67C2.3243 14.4473 1.99366 14.3082 1.75014 14.0628C1.50663 13.8174 1.36999 13.4857 1.37 13.14V10.84",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.94 5.53V7.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.01 5.53V7.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.97 5.39999V8.23999C7.97002 8.38679 7.9124 8.52774 7.80953 8.63248C7.70666 8.73721 7.56678 8.79737 7.42 8.79999H7.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.1 10.28C9.49291 10.8839 8.67138 11.223 7.81503 11.223C6.95867 11.223 6.13715 10.8839 5.53003 10.28",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"fingerprint"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.68002 16C7.83861 15.3719 7.15609 14.5553 6.68721 13.6158C6.21833 12.6763 5.97612 11.64 5.98003 10.59C6.01806 10.0205 6.27111 9.48669 6.68794 9.09676C7.10478 8.70683 7.65424 8.48989 8.22502 8.48989C8.79581 8.48989 9.34526 8.70683 9.7621 9.09676C10.1789 9.48669 10.432 10.0205 10.47 10.59C10.47 10.8841 10.528 11.1754 10.6405 11.4472C10.7531 11.719 10.9181 11.9659 11.1261 12.1739C11.3341 12.3819 11.581 12.5469 11.8528 12.6595C12.1246 12.772 12.4159 12.83 12.71 12.83C13.0042 12.83 13.2955 12.772 13.5672 12.6595C13.839 12.5469 14.0859 12.3819 14.2939 12.1739C14.5019 11.9659 14.6669 11.719 14.7795 11.4472C14.8921 11.1754 14.95 10.8841 14.95 10.59C14.9417 8.90033 14.2971 7.27584 13.1447 6.04012C11.9923 4.8044 10.4167 4.04814 8.73169 3.92202C7.04672 3.7959 5.37609 4.30918 4.05258 5.35958C2.72907 6.40997 1.84984 7.9204 1.59003 9.58998",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M12.6801 10.59C12.6801 9.39652 12.2059 8.25193 11.362 7.40802C10.5181 6.56411 9.37353 6.09 8.18005 6.09C6.98658 6.09 5.84198 6.56411 4.99807 7.40802C4.15416 8.25193 3.68005 9.39652 3.68005 10.59C3.67942 12.0766 4.04704 13.5402 4.75005 14.85",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M3.52002 2.98998C5.11912 2.00811 6.98513 1.55064 8.85704 1.68153C10.7289 1.81242 12.5131 2.52514 13.96 3.71999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M8.22003 10.59C8.2202 11.6349 8.58483 12.6471 9.2511 13.4521C9.91736 14.2571 10.8435 14.8045 11.87 15",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"})),"folder-root"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.7744C14.0001 10.9354 13.9668 11.0948 13.9022 11.2436C13.8375 11.3923 13.7427 11.5275 13.6232 11.6413C13.3765 11.8699 13.0463 11.9985 12.7021 12H2.29791C1.95367 11.9985 1.62347 11.8699 1.37681 11.6413C1.25728 11.5275 1.16248 11.3923 1.09782 11.2436C1.03317 11.0948 0.999929 10.9354 1 10.7744V2.22555C0.999929 2.06459 1.03317 1.90517 1.09782 1.75643C1.16248 1.6077 1.25728 1.47257 1.37681 1.35871C1.62347 1.13012 1.95367 1.00152 2.29791 1H5.55314L6.85105 2.83333H12.7021C13.0463 2.83485 13.3765 2.96345 13.6232 3.19204C13.7427 3.30589 13.8375 3.44106 13.9022 3.58979C13.9668 3.73853 14.0001 3.89792 14 4.05888V10.7744Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.49995 4.91578L4.25519 7.26721V10.9937C4.25519 11.1733 4.33018 11.3457 4.46366 11.4727C4.59714 11.5998 4.77817 11.6712 4.96694 11.6712H6.46372V8.68208H8.45245V11.6712H9.9597C10.0532 11.6715 10.1458 11.6541 10.232 11.6199C10.3183 11.5856 10.3965 11.5353 10.4621 11.4719C10.5938 11.344 10.6688 11.1727 10.6715 10.9937V7.26721L7.49995 4.91578Z",fill:"var(--icon-color)",stroke:"none"})),"folder-shared"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.7744C14.0001 10.9354 13.9668 11.0948 13.9022 11.2436C13.8375 11.3923 13.7427 11.5275 13.6232 11.6413C13.3765 11.8699 13.0463 11.9985 12.7021 12H2.2979C1.95366 11.9985 1.62347 11.8699 1.37681 11.6413C1.25728 11.5275 1.16248 11.3923 1.09782 11.2436C1.03317 11.0948 0.999929 10.9354 1 10.7744V2.22555C0.999929 2.06459 1.03317 1.90517 1.09782 1.75643C1.16248 1.6077 1.25728 1.47256 1.37681 1.35871C1.62347 1.13012 1.95366 1.00152 2.2979 1H5.55314L6.85104 2.83333H12.7021C13.0463 2.83485 13.3765 2.96345 13.6232 3.19204C13.7427 3.30589 13.8375 3.44106 13.9022 3.58979C13.9668 3.73853 14.0001 3.89791 14 4.05888V10.7744Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.3889 12V10.7246C10.3922 10.3531 10.2418 9.99517 9.97022 9.72827C9.83273 9.59843 9.66922 9.49625 9.48941 9.42779C9.30959 9.35932 9.11715 9.32597 8.92353 9.32972H6.05557C5.8655 9.3284 5.67704 9.36305 5.50116 9.43168C5.32528 9.50031 5.1655 9.60154 5.03109 9.72948C4.89668 9.85743 4.79034 10.0095 4.71824 10.177C4.64615 10.3444 4.60973 10.5238 4.61112 10.7047V11.9801",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M7.49998 7.97461C7.78567 7.97461 8.06493 7.89397 8.30247 7.74288C8.54001 7.5918 8.72515 7.37705 8.83448 7.1258C8.9438 6.87456 8.97241 6.59808 8.91667 6.33136C8.86094 6.06464 8.72337 5.81965 8.52136 5.62735C8.31935 5.43505 8.06198 5.30409 7.78178 5.25103C7.50159 5.19798 7.21116 5.22523 6.94722 5.3293C6.68329 5.43337 6.45769 5.60961 6.29897 5.83573C6.14025 6.06184 6.05554 6.32766 6.05554 6.59961C6.05554 6.96428 6.20772 7.31404 6.47861 7.5719C6.74949 7.82977 7.11689 7.97461 7.49998 7.97461Z",fill:"var(--icon-color)",stroke:"none"})),"heart-o"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.46701 14.12C8.39968 14.1229 8.33253 14.1109 8.27032 14.085C8.20811 14.0591 8.15238 14.0198 8.10702 13.97L2.98703 9.04L2.75701 8.82L2.30703 8.29C2.10475 8.03461 1.91773 7.76746 1.747 7.48998C1.56775 7.17196 1.42039 6.837 1.30703 6.48998C1.1817 6.1264 1.11749 5.74455 1.11703 5.35998C1.08303 4.84662 1.15416 4.33172 1.32611 3.84682C1.49806 3.36192 1.76721 2.91725 2.11703 2.54C2.50658 2.19036 2.9619 1.92184 3.45639 1.75014C3.95087 1.57845 4.4746 1.50701 4.997 1.54C5.33771 1.5472 5.67517 1.60793 5.997 1.71999C6.34988 1.83562 6.68607 1.99697 6.997 2.19997C7.26741 2.3717 7.52783 2.5587 7.777 2.76C7.99865 2.93314 8.20908 3.12018 8.40701 3.32C8.59918 3.11788 8.80644 2.93068 9.027 2.76C9.247 2.58 9.50703 2.39997 9.80703 2.19997C10.1184 1.99766 10.4545 1.83635 10.807 1.71999C11.1286 1.60695 11.4662 1.54619 11.807 1.54C12.3295 1.50645 12.8534 1.57762 13.3479 1.74935C13.8425 1.92107 14.2978 2.18989 14.687 2.54C15.0388 2.9159 15.3092 3.36039 15.4813 3.84563C15.6534 4.33088 15.7234 4.84641 15.687 5.35998C15.6358 6.06837 15.4442 6.75949 15.1231 7.39303C14.802 8.02656 14.358 8.58983 13.817 9.04998L8.70703 13.97C8.64352 14.0425 8.56002 14.0947 8.46701 14.12Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"heart"===this.props.name&&n.createElement("svg",{width:"16",height:"14",viewBox:"0 0 16 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.05462 13.12C7.98595 13.1217 7.91766 13.1093 7.854 13.0835C7.79034 13.0577 7.73269 13.0191 7.68462 12.97L2.57461 8.04L2.34463 7.82L1.89462 7.29C1.68905 7.03708 1.5019 6.7697 1.33462 6.48998C1.15536 6.17196 1.00798 5.837 0.894616 5.48998C0.769279 5.1264 0.705073 4.74455 0.704614 4.35998C0.670613 3.84662 0.74177 3.33172 0.91372 2.84682C1.08567 2.36192 1.35479 1.91725 1.70461 1.54C2.09386 1.18989 2.54913 0.921074 3.04369 0.74935C3.53826 0.577625 4.06216 0.506451 4.58462 0.539999C4.92533 0.547199 5.26278 0.607934 5.58462 0.719992C5.93749 0.835618 6.27369 0.996973 6.58462 1.19997C6.88462 1.39997 7.14462 1.58 7.36462 1.76C7.58627 1.93314 7.79669 2.12018 7.99462 2.32C8.18679 2.11788 8.39405 1.93068 8.61462 1.76C8.83462 1.58 9.09462 1.39997 9.39462 1.19997C9.70594 0.997665 10.042 0.836354 10.3946 0.719992C10.716 0.606272 11.0537 0.545489 11.3946 0.539999C11.9171 0.506451 12.441 0.577625 12.9355 0.74935C13.4301 0.921074 13.8854 1.18989 14.2746 1.54C14.6264 1.9159 14.8968 2.36039 15.0689 2.84563C15.241 3.33088 15.311 3.84641 15.2746 4.35998C15.2235 5.06837 15.0317 5.75949 14.7107 6.39303C14.3896 7.02656 13.9457 7.58983 13.4046 8.04998L8.29461 12.97C8.23111 13.0425 8.14763 13.0947 8.05462 13.12V13.12Z",fill:"var(--icon-color)",stroke:"none"})),"heartbeat"===this.props.name&&n.createElement("svg",{width:"16",height:"14",viewBox:"0 0 16 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.524 7.18165H9.754L8.55402 13.14L6.14401 1.69998L4.95401 7.03865H1.284",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"Pin"===this.props.name&&n.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.98903 8.67999L10.849 5.16L11.019 5.32999C11.2505 5.55539 11.5609 5.68152 11.884 5.68152C12.2072 5.68152 12.5175 5.55539 12.749 5.32999C12.863 5.21661 12.9535 5.08183 13.0152 4.93338C13.0769 4.78493 13.1087 4.62576 13.1087 4.465C13.1087 4.30423 13.0769 4.14506 13.0152 3.99661C12.9535 3.84817 12.863 3.71338 12.749 3.60001L10.419 1.26999C10.1896 1.04058 9.87847 0.911713 9.55403 0.911713C9.22959 0.911713 8.91844 1.04058 8.68903 1.26999C8.45961 1.4994 8.33073 1.81057 8.33073 2.13501C8.33073 2.45945 8.45961 2.77059 8.68903 3L8.86903 3.16998L5.33904 5.03C4.87276 4.77332 4.33557 4.67547 3.80873 4.75125C3.28189 4.82703 2.79407 5.07229 2.41904 5.44998L2.00903 5.85001L8.16904 12.01L8.56903 11.61C8.94755 11.2334 9.19324 10.7438 9.26901 10.2152C9.34478 9.68667 9.2465 9.14779 8.98903 8.67999V8.67999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.89906 10.13L1.29907 12.73",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plug"===this.props.name&&n.createElement("svg",{width:"13",height:"15",viewBox:"0 0 13 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.01277 5.26999C3.52129 5.84389 3.26446 6.58213 3.29362 7.33716C3.32278 8.09219 3.63577 8.8084 4.17005 9.34268C4.70434 9.87697 5.42058 10.19 6.17561 10.2191C6.93064 10.2483 7.66884 9.99148 8.24275 9.5L10.3528 7.38998L6.13276 3.16L4.01277 5.26999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.01273 9.5L1.96271 11.5C1.7532 11.7098 1.61057 11.9769 1.5528 12.2677C1.49503 12.5585 1.52473 12.8599 1.63816 13.1339C1.75158 13.4078 1.94364 13.642 2.19007 13.8068C2.4365 13.9716 2.72623 14.0597 3.02271 14.06H12.0227",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.17273 2.82999L9.46271 1.54001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.6927 5.35001L11.9828 4.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.58276 2.62L10.8528 7.89001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"server"===this.props.name&&n.createElement("svg",{width:"15",height:"14",viewBox:"0 0 15 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.2891 8.79999H2.47908C1.93232 8.79999 1.48907 9.24325 1.48907 9.79001V11.77C1.48907 12.3168 1.93232 12.76 2.47908 12.76H12.2891C12.8358 12.76 13.2791 12.3168 13.2791 11.77V9.79001C13.2791 9.24325 12.8358 8.79999 12.2891 8.79999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.48907 7.01001V5.82999C1.48907 5.56477 1.59443 5.31043 1.78197 5.12289C1.9695 4.93536 2.22386 4.82999 2.48907 4.82999H12.2991C12.5643 4.82999 12.8186 4.93536 13.0062 5.12289C13.1937 5.31043 13.2991 5.56477 13.2991 5.82999V7.01001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.48907 3.04999V1.87C1.48907 1.60478 1.59443 1.35044 1.78197 1.1629C1.9695 0.975366 2.22386 0.869995 2.48907 0.869995H12.2991C12.5643 0.869995 12.8186 0.975366 13.0062 1.1629C13.1937 1.35044 13.2991 1.60478 13.2991 1.87V3.04999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.46906 3.60999C3.88327 3.60999 4.21906 3.2742 4.21906 2.85999C4.21906 2.44577 3.88327 2.10999 3.46906 2.10999C3.05484 2.10999 2.71906 2.44577 2.71906 2.85999C2.71906 3.2742 3.05484 3.60999 3.46906 3.60999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M3.46906 7.57001C3.88327 7.57001 4.21906 7.23422 4.21906 6.82001C4.21906 6.40579 3.88327 6.07001 3.46906 6.07001C3.05484 6.07001 2.71906 6.40579 2.71906 6.82001C2.71906 7.23422 3.05484 7.57001 3.46906 7.57001Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M3.46906 11.53C3.88327 11.53 4.21906 11.1942 4.21906 10.78C4.21906 10.3658 3.88327 10.03 3.46906 10.03C3.05484 10.03 2.71906 10.3658 2.71906 10.78C2.71906 11.1942 3.05484 11.53 3.46906 11.53Z",fill:"var(--icon-color)",stroke:"none"})),"share-2"===this.props.name&&n.createElement("svg",{width:"17",height:"14",viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.11267 11.7L6.36267 13.21L6.32269 7.70999L1.16266 5.44L15.9727 1.45999L10.7827 12.82L8.21265 8.38",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"failed"===this.props.name&&n.createElement("svg",{width:"127",height:"127",viewBox:"0 0 127 127",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"63.25",cy:"63.1909",r:"61",stroke:"var(--icon-failed-color)",strokeWidth:"4"}),n.createElement("g",{clipPath:"url(#clip0_174_687280)"},n.createElement("path",{d:"M63.249 32.4197L63.249 69.784",stroke:"var(--icon-failed-color)",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M63.249 85.2234H63.1493",stroke:"var(--icon-failed-color)",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})),n.createElement("defs",null,n.createElement("clipPath",{id:"clip0_174_687280"},n.createElement("rect",{width:"68.1081",height:"68.1081",fill:"var(--icon-exclamation-color)",transform:"translate(29.1959 29.137)"})))),"success"===this.props.name&&n.createElement("svg",{width:"127",height:"127",viewBox:"0 0 127 127",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"63.25",cy:"63.1909",r:"61",stroke:"var(--icon-success-color)",strokeWidth:"4"}),n.createElement("path",{d:"M85.9519 46.1641L54.7357 77.3803L40.5465 63.1911",stroke:"var(--icon-success-color)",strokeWidth:"6.69935",strokeLinecap:"round",strokeLinejoin:"round"})),"exclamation"===this.props.name&&n.createElement("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.70175 0.0187378C5.51507 0.0187378 4.35498 0.370631 3.36829 1.02992C2.38159 1.68921 1.61254 2.62628 1.15842 3.72264C0.704293 4.81899 0.585428 6.02539 0.816939 7.18927C1.04845 8.35316 1.62007 9.42228 2.45918 10.2614C3.29829 11.1005 4.36718 11.6719 5.53107 11.9035C6.69495 12.135 7.90159 12.0161 8.99794 11.562C10.0943 11.1079 11.0313 10.3389 11.6905 9.35217C12.3498 8.36548 12.7017 7.20539 12.7017 6.0187C12.7017 4.42741 12.0695 2.90129 10.9443 1.77607C9.81911 0.650856 8.29305 0.0187378 6.70175 0.0187378Z",fill:"var(--icon-exclamation-background-color)"}),n.createElement("path",{d:"M6.71118 3.0694L6.71118 6.6279",stroke:"var(--icon-exclamation-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.71118 9H6.70169",stroke:"var(--icon-exclamation-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"spinner"===this.props.name&&n.createElement("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"8",cy:"8",r:"8",transform:"translate(1 1)",fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)"}),n.createElement("ellipse",{id:"loading",rx:"8",ry:"8",transform:"translate(9 9)",fill:"none",stroke:"var(--spinner-color)",strokeWidth:"var(--spinner-stroke-width)",strokeLinecap:"round"})),"timer"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("ellipse",{rx:"8",ry:"8",transform:"translate(10 10)",fill:"none",stroke:"var(--timer-background)",strokeWidth:"var(--timer-stroke-width)"}),n.createElement("ellipse",{id:"timer-progress",rx:"8",ry:"8",transform:"matrix(0-1 1 0 10 10)",fill:"none",stroke:"var(--timer-color)",strokeLinecap:"round",strokeWidth:"var(--timer-stroke-width)"})))}}_e.defaultProps={big:!1,baseline:!1,dim:!1,onClick:()=>{}},_e.propTypes={name:o().string,big:o().bool,dim:o().bool,baseline:o().bool,onClick:o().func,style:o().object};const Re=_e;class Ie extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleCloseClick=this.handleCloseClick.bind(this)}handleCloseClick(){this.props.onClose()}render(){return n.createElement("button",{type:"button",disabled:this.props.disabled,className:"dialog-close button button-transparent",onClick:this.handleCloseClick},n.createElement(Re,{name:"close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"Close")))}}Ie.propTypes={onClose:o().func,disabled:o().bool};const Ae=(0,k.Z)("common")(Ie);class Pe extends n.Component{render(){return n.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,n.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}Pe.defaultProps={direction:"right"},Pe.propTypes={children:o().any,message:o().any.isRequired,direction:o().string};const De=Pe;class Le extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleKeyDown=this.handleKeyDown.bind(this),this.handleClose=this.handleClose.bind(this)}handleKeyDown(e){27===e.keyCode&&this.handleClose()}handleClose(){this.props.disabled||this.props.onClose()}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown,{capture:!1})}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown,{capture:!1})}render(){return n.createElement("div",{className:`${this.props.className} dialog-wrapper`},n.createElement("div",{className:"dialog"},n.createElement("div",{className:"dialog-header"},n.createElement("div",{className:"dialog-title-wrapper"},n.createElement("h2",null,n.createElement("span",{className:"dialog-header-title"},this.props.title),this.props.subtitle&&n.createElement("span",{className:"dialog-header-subtitle"},this.props.subtitle)),this.props.tooltip&&""!==this.props.tooltip&&n.createElement(De,{message:this.props.tooltip},n.createElement(Re,{name:"info-circle"}))),n.createElement(Ae,{onClose:this.handleClose,disabled:this.props.disabled})),n.createElement("div",{className:"dialog-content"},this.props.children)))}}Le.propTypes={children:o().node,className:o().string,title:o().string,subtitle:o().string,tooltip:o().string,disabled:o().bool,onClose:o().func};const Te=Le;class Ue extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleKeyDown=this.handleKeyDown.bind(this),this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown,{capture:!0})}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown,{capture:!0})}getTitle(){return this.props.title?this.props.title:this.props.t("There was an unexpected error...")}getMessage(){return this.props.error.message}handleKeyDown(e){27!==e.keyCode&&13!==e.keyCode||(e.stopPropagation(),this.props.onClose())}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){return Boolean(this.props.error.data?.body)||Boolean(this.props.error.details)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return n.createElement(Te,{className:"dialog-wrapper error-dialog",onClose:this.props.onClose,title:this.getTitle()},n.createElement("div",{className:"form-content"},n.createElement("p",null,this.getMessage()),this.hasErrorDetails&&n.createElement("div",{className:"accordion error-details"},n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleErrorDetailsToggle},n.createElement(v.c,null,"Error details"),n.createElement(Re,{baseline:!0,name:this.state.showErrorDetails?"caret-up":"caret-down"}))),this.state.showErrorDetails&&n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},n.createElement(v.c,null,"Error details")),n.createElement("textarea",{id:"js_field_debug",defaultValue:this.formatErrors(),readOnly:!0}))))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"button",className:"button primary warning",onClick:this.props.onClose},"Ok")))}}Ue.propTypes={title:o().string,error:o().object.isRequired,onClose:o().func,t:o().func};const je=(0,k.Z)("common")(Ue);class ze extends n.Component{constructor(){super(),this.bindCallbacks()}bindCallbacks(){this.handleSignOutClick=this.handleSignOutClick.bind(this)}isSelected(e){let t=!1;return"passwords"===e?t=/^\/app\/(passwords|folders)/.test(this.props.location.pathname):"users"===e?t=/^\/app\/(users|groups)/.test(this.props.location.pathname):"administration"===e&&(t=/^\/app\/administration/.test(this.props.location.pathname)),t}isLoggedInUserAdmin(){return this.props.context.loggedInUser&&"admin"===this.props.context.loggedInUser.role.name}async handleSignOutClick(){try{await this.props.context.onLogoutRequested()}catch(e){this.props.dialogContext.open(je,{error:e})}}render(){const e=this.props.rbacContext.canIUseUiAction(ae),t=this.props.rbacContext.canIUseUiAction("Administration.viewWorkspace");return n.createElement("nav",null,n.createElement("div",{className:"primary navigation top"},n.createElement("ul",null,n.createElement("li",{key:"password"},n.createElement("div",{className:"row "+(this.isSelected("passwords")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"passwords link no-border",type:"button",onClick:this.props.navigationContext.onGoToPasswordsRequested},n.createElement("span",null,n.createElement(v.c,null,"passwords"))))))),e&&n.createElement("li",{key:"users"},n.createElement("div",{className:"row "+(this.isSelected("users")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"users link no-border",type:"button",onClick:this.props.navigationContext.onGoToUsersRequested},n.createElement("span",null,n.createElement(v.c,null,"users"))))))),this.isLoggedInUserAdmin()&&t&&n.createElement("li",{key:"administration"},n.createElement("div",{className:"row "+(this.isSelected("administration")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"administration link no-border",type:"button",onClick:this.props.navigationContext.onGoToAdministrationRequested},n.createElement("span",null,n.createElement(v.c,null,"administration"))))))),n.createElement("li",{key:"help"},n.createElement("div",{className:"row"},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("a",{className:"help",href:"https://help.passbolt.com",role:"button",target:"_blank",rel:"noopener noreferrer"},n.createElement("span",null,n.createElement(v.c,null,"help"))))))),n.createElement("li",{key:"logout",className:"right"},n.createElement("div",{className:"row"},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"sign-out link no-border",type:"button",onClick:this.handleSignOutClick},n.createElement("span",null,n.createElement(v.c,null,"sign out"))))))))))}}ze.propTypes={context:o().object,rbacContext:o().any,navigationContext:o().any,history:o().object,location:o().object,dialogContext:o().object};const Me=I(Ne((0,N.EN)(J(g((0,k.Z)("common")(ze))))));class Oe extends n.Component{render(){return n.createElement("div",{className:"col1"},n.createElement("div",{className:"logo-svg no-img"},n.createElement("svg",{height:"25px",role:"img","aria-labelledby":"logo",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"100%",viewBox:"0 30 450 20"},n.createElement("title",{id:"logo"},"Passbolt logo"),n.createElement("g",{clipPath:"url(#clip0)"},n.createElement("path",{d:"M12.1114 26.4938V52.609h7.4182c4.9203 0 8.3266-1.0597 10.3704-3.1035 2.0438-2.0438 3.0278-5.5258 3.0278-10.2947 0-4.6175-.9083-7.8724-2.8007-9.7648-1.8924-2.0438-5.0717-2.9522-9.6891-2.9522h-8.3266zM0 16.5776h23.3144c7.0398 0 12.4899 2.0438 16.4261 6.2071 3.9362 4.1633 5.9043 9.9162 5.9043 17.2588 0 3.0278-.3785 5.8286-1.2111 8.3265-.8327 2.498-2.0438 4.8446-3.7091 6.8884-1.9681 2.498-4.3904 4.3147-7.1155 5.4501-2.8007 1.0598-6.4342 1.5896-11.0516 1.5896H12.1114v16.5775H0v-62.298zM70.0188 53.1389H85.158v-9.462H70.9272c-2.8008 0-4.7689.3785-5.8287 1.1354-1.0597.757-1.5896 2.1195-1.5896 4.0119 0 1.5896.4542 2.7251 1.2869 3.4063.8326.6056 2.5736.9084 5.223.9084zM53.9712 16.5776h24.7527c6.2827 0 10.9759 1.4383 14.1551 4.3147 3.1793 2.8765 4.7689 7.1155 4.7689 12.7927v28.6888H65.0985c-4.5417 0-8.0994-1.1354-10.5217-3.4063s-3.6334-5.5258-3.6334-9.7648c0-5.223 1.3625-8.9322 4.1633-11.203 2.8007-2.2709 7.4939-3.4064 14.0794-3.4064h15.8962v-1.1354c0-2.7251-.8326-4.6175-2.4222-5.7529-1.5897-1.1355-4.3904-1.6653-8.5537-1.6653H53.9712v-9.4621zM107.488 52.8356h25.51c2.271 0 3.936-.3784 4.92-1.0597 1.06-.6813 1.59-1.8167 1.59-3.4063 0-1.5897-.53-2.7251-1.59-3.4064-1.059-.7569-2.725-1.1354-4.92-1.1354h-10.446c-6.207 0-10.37-.9841-12.566-2.8765-2.195-1.8924-3.255-5.2987-3.255-10.0676 0-4.9202 1.287-8.5536 3.937-10.9002 2.649-2.3466 6.737-3.482 12.187-3.482h25.964v9.5377h-21.347c-3.482 0-5.753.3028-6.812.9083-1.06.6056-1.59 1.6654-1.59 3.255 0 1.4382.454 2.498 1.362 3.1035.909.6813 2.423.9841 4.391.9841h10.976c4.996 0 8.856 1.2111 11.43 3.5577 2.649 2.3466 3.936 5.6772 3.936 10.0676 0 4.239-1.211 7.721-3.558 10.3704-2.346 2.6493-5.298 4.0119-9.007 4.0119h-31.112v-9.4621zM159.113 52.8356h25.51c2.271 0 3.936-.3784 4.92-1.0597 1.06-.6813 1.59-1.8167 1.59-3.4063 0-1.5897-.53-2.7251-1.59-3.4064-1.059-.7569-2.725-1.1354-4.92-1.1354h-10.446c-6.207 0-10.37-.9841-12.566-2.8765-2.195-1.8924-3.255-5.2987-3.255-10.0676 0-4.9202 1.287-8.5536 3.937-10.9002 2.649-2.3466 6.737-3.482 12.187-3.482h25.964v9.5377h-21.347c-3.482 0-5.753.3028-6.812.9083-1.06.6056-1.59 1.6654-1.59 3.255 0 1.4382.454 2.498 1.362 3.1035.909.6813 2.423.9841 4.391.9841h10.976c4.996 0 8.856 1.2111 11.43 3.5577 2.649 2.3466 3.936 5.6772 3.936 10.0676 0 4.239-1.211 7.721-3.558 10.3704-2.346 2.6493-5.298 4.0119-9.007 4.0119h-31.263v-9.4621h.151zM223.607 0v16.5775h10.37c4.617 0 8.251.5298 11.052 1.6653 2.8 1.0597 5.147 2.8764 7.115 5.3744 1.665 2.1195 2.876 4.3904 3.709 6.9641.833 2.4979 1.211 5.2987 1.211 8.3265 0 7.3426-1.968 13.0955-5.904 17.2588-3.936 4.1633-9.386 6.2071-16.426 6.2071h-23.315V0h12.188zm7.342 26.4937h-7.418v26.1152h8.326c4.618 0 7.873-.9841 9.69-2.8765 1.892-1.9681 2.8-5.223 2.8-9.9162 0-4.7689-1.059-8.1752-3.103-10.219-1.968-2.1195-5.45-3.1035-10.295-3.1035zM274.172 39.5132c0 4.3904.984 7.721 3.027 10.219 2.044 2.4223 4.845 3.6334 8.554 3.6334 3.633 0 6.434-1.2111 8.554-3.6334 2.044-2.4223 3.103-5.8286 3.103-10.219s-1.059-7.721-3.103-10.1433c-2.044-2.4222-4.845-3.6334-8.554-3.6334-3.633 0-6.434 1.2112-8.554 3.6334-2.043 2.4223-3.027 5.8286-3.027 10.1433zm35.88 0c0 7.1912-2.196 12.9441-6.586 17.2588-4.39 4.2389-10.219 6.4341-17.637 6.4341-7.418 0-13.323-2.1195-17.713-6.4341-4.391-4.3147-6.586-9.9919-6.586-17.1831 0-7.1911 2.195-12.944 6.586-17.2587 4.39-4.3147 10.295-6.5099 17.713-6.5099 7.342 0 13.247 2.1952 17.637 6.5099 4.39 4.239 6.586 9.9919 6.586 17.183zM329.884 62.3737h-12.565V0h12.565v62.3737zM335.712 16.5775h8.554V0h12.111v16.5775h12.793v9.1592h-12.793v18.4699c0 3.4063.606 5.7529 1.742 7.1154 1.135 1.2869 3.179 1.9681 6.055 1.9681h4.996v9.1593h-11.127c-4.466 0-7.873-1.2112-10.295-3.7091-2.346-2.498-3.558-6.0557-3.558-10.6732V25.7367h-8.553v-9.1592h.075z",fill:"var(--icon-color)"}),n.createElement("path",{d:"M446.532 30.884L419.433 5.52579c-2.347-2.19519-6.056-2.19519-8.478 0L393.923 21.4977c4.466 1.6653 7.948 5.3744 9.235 9.9919h23.012c1.211 0 2.119.984 2.119 2.1195v3.482c0 1.2111-.984 2.1195-2.119 2.1195h-2.649v4.9202c0 1.2112-.985 2.1195-2.12 2.1195h-5.829c-1.211 0-2.119-.984-2.119-2.1195v-4.9202h-10.219c-1.287 4.6932-4.769 8.478-9.311 10.0676l17.108 15.9719c2.346 2.1952 6.055 2.1952 8.478 0l27.023-25.3582c2.574-2.4223 2.574-6.5099 0-9.0079z",fill:"#E10600"}),n.createElement("path",{d:"M388.927 28.3862c-1.135 0-2.195.3028-3.179.757-2.271 1.1354-3.86 3.482-3.86 6.2071 0 2.6493 1.438 4.9202 3.633 6.1314.984.5298 2.12.8326 3.331.8326 3.86 0 6.964-3.1035 6.964-6.964.151-3.7848-3.028-6.9641-6.889-6.9641z",fill:"#E10600"})),n.createElement("defs",null,n.createElement("clipPath",{id:"clip0"},n.createElement("path",{fill:"#fff",d:"M0 0h448.5v78.9511H0z"})))),n.createElement("h1",null,n.createElement("span",null,"Passbolt"))))}}const Fe=Oe;function qe(){return qe=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getOrganizationPolicy:()=>{},getRequestor:()=>{},getRequestedDate:()=>{},getPolicy:()=>{},getUserAccountRecoverySubscriptionStatus:()=>{},isAccountRecoveryChoiceRequired:()=>{},isPolicyEnabled:()=>{},loadAccountRecoveryPolicy:()=>{},reloadAccountRecoveryPolicy:()=>{},isReady:()=>{}});class Ve extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{accountRecoveryOrganizationPolicy:null,status:null,isDataLoaded:!1,findAccountRecoveryPolicy:this.findAccountRecoveryPolicy.bind(this),getOrganizationPolicy:this.getOrganizationPolicy.bind(this),getRequestor:this.getRequestor.bind(this),getRequestedDate:this.getRequestedDate.bind(this),getPolicy:this.getPolicy.bind(this),getUserAccountRecoverySubscriptionStatus:this.getUserAccountRecoverySubscriptionStatus.bind(this),setUserAccountRecoveryStatus:this.setUserAccountRecoveryStatus.bind(this),isAccountRecoveryChoiceRequired:this.isAccountRecoveryChoiceRequired.bind(this),isPolicyEnabled:this.isPolicyEnabled.bind(this),loadAccountRecoveryPolicy:this.loadAccountRecoveryPolicy.bind(this),reloadAccountRecoveryPolicy:this.reloadAccountRecoveryPolicy.bind(this),isReady:this.isReady.bind(this)}}async loadAccountRecoveryPolicy(){this.state.isDataLoaded||await this.findAccountRecoveryPolicy()}async reloadAccountRecoveryPolicy(){await this.findAccountRecoveryPolicy()}async findAccountRecoveryPolicy(){if(!this.props.context.siteSettings.canIUse("accountRecovery"))return;const e=this.props.context.loggedInUser;if(!e)return;const t=await this.props.accountRecoveryUserService.getOrganizationAccountRecoverySettings(),a=e.account_recovery_user_setting?.status||Ve.STATUS_PENDING;this.setState({accountRecoveryOrganizationPolicy:t,status:a,isDataLoaded:!0})}isReady(){return this.state.isDataLoaded}getOrganizationPolicy(){return this.state.accountRecoveryOrganizationPolicy}getRequestedDate(){return this.getOrganizationPolicy()?.modified}getRequestor(){return this.getOrganizationPolicy()?.creator}getPolicy(){return this.getOrganizationPolicy()?.policy}getUserAccountRecoverySubscriptionStatus(){return this.state.status}setUserAccountRecoveryStatus(e){this.setState({status:e})}isAccountRecoveryChoiceRequired(){if(null===this.getOrganizationPolicy())return!1;const e=this.getPolicy();return this.state.status===Ve.STATUS_PENDING&&e!==Ve.POLICY_DISABLED}isPolicyEnabled(){const e=this.getPolicy();return e&&e!==Ve.POLICY_DISABLED}static get STATUS_PENDING(){return"pending"}static get POLICY_DISABLED(){return"disabled"}static get POLICY_MANDATORY(){return"mandatory"}static get POLICY_OPT_OUT(){return"opt-out"}static get STATUS_APPROVED(){return"approved"}render(){return n.createElement(We.Provider,{value:this.state},this.props.children)}}Ve.propTypes={context:o().any.isRequired,children:o().any,accountRecoveryUserService:o().object.isRequired};const Be=I(Ve);function Ge(e){return class extends n.Component{render(){return n.createElement(We.Consumer,null,(t=>n.createElement(e,qe({accountRecoveryContext:t},this.props))))}}}const Ke=/img\/avatar\/user(_medium)?\.png$/;class He extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){return{error:!1}}bindCallbacks(){this.handleError=this.handleError.bind(this)}get avatarUrl(){return this.props?.user?.profile?.avatar?.url?.medium}propsHasUrl(){return Boolean(this.avatarUrl)}propsUrlHasProtocol(){return this.avatarUrl.startsWith("https://")||this.avatarUrl.startsWith("http://")}formatUrl(e){return`${this.props.baseUrl}/${e}`}isDefaultAvatarUrlFromApi(){return Ke.test(this.avatarUrl)}getAvatarSrc(){return this.propsHasUrl()?this.propsUrlHasProtocol()?this.avatarUrl:this.formatUrl(this.avatarUrl):null}handleError(){console.error(`Could not load avatar image url: ${this.getAvatarSrc()}`),this.setState({error:!0})}getAltText(){const e=this.props?.user;return e?.first_name&&e?.last_name?this.props.t("Avatar of user {{first_name}} {{last_name}}.",{firstname:e.first_name,lastname:e.last_name}):"..."}render(){const e=this.getAvatarSrc(),t=this.state.error||this.isDefaultAvatarUrlFromApi()||!e;return n.createElement("div",{className:`${this.props.className} ${this.props.attentionRequired?"attention-required":""}`},t&&n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 42 42","aria-labelledby":"svg-title"},n.createElement("title",{id:"svg-title"},this.getAltText()),n.createElement("circle",{fill:"#939598",cx:"21",cy:"21",r:"21"}),n.createElement("path",{fill:"#ffffff",d:"m21,23.04c-4.14,0-7.51-3.37-7.51-7.51s3.37-7.51,7.51-7.51,7.51,3.37,7.51,7.51-3.37,7.51-7.51,7.51Z"}),n.createElement("path",{fill:"#ffffff",d:"m27.17,26.53h-12.33c-2.01,0-3.89.78-5.31,2.2-1.42,1.42-2.2,3.3-2.2,5.31v1.15c3.55,3.42,8.36,5.53,13.67,5.53s10.13-2.11,13.67-5.53v-1.15c0-2.01-.78-3.89-2.2-5.31-1.42-1.42-3.3-2.2-5.31-2.2Z"})),!t&&n.createElement("img",{src:e,onError:this.handleError,alt:this.getAltText()}),this.props.attentionRequired&&n.createElement(Re,{name:"exclamation"}))}}He.defaultProps={className:"avatar user-avatar"},He.propTypes={baseUrl:o().string,user:o().object,attentionRequired:o().bool,className:o().string,t:o().func};const $e=(0,k.Z)("common")(He);class Ze extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const Ye=Ze;class Je extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const Qe=Je;class Xe extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const et=Xe,tt=["GET","POST","PUT","DELETE"];class at{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.")}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}buildFetchOptions(){return{credentials:"include",headers:{...this.getDefaultHeaders(),...this.options.getHeaders()}}}async get(e,t){this.assertValidId(e);const a=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",a)}async delete(e,t,a,n){let i;this.assertValidId(e),void 0===n&&(n=!1),i=n?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,a||{}):this.buildUrl(`${this.baseUrl}/${e}`,a||{});let s=null;return t&&(s=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",i,s)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return await this.fetchAndHandleResponse("GET",t)}async create(e,t){const a=this.buildUrl(this.baseUrl.toString(),t||{}),n=this.buildBody(e);return this.fetchAndHandleResponse("POST",a,n)}async update(e,t,a,n){let i;this.assertValidId(e),void 0===n&&(n=!1),i=n?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,a||{}):this.buildUrl(`${this.baseUrl}/${e}`,a||{});let s=null;return t&&(s=this.buildBody(t)),this.fetchAndHandleResponse("PUT",i,s)}async updateAll(e,t={}){const a=this.buildUrl(this.baseUrl.toString(),t),n=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",a,n)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(tt.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const a=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,n]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof n)a.searchParams.append(e,n);else{if(!Array.isArray(n))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");n.forEach((t=>{a.searchParams.append(e,t)}))}}return a}async sendRequest(e,t,a,n){this.assertUrl(t),this.assertMethod(e),a&&this.assertBody(a);const i={...this.buildFetchOptions(),...n};i.method=e,a&&(i.body=a);try{return await fetch(t.toString(),i)}catch(e){throw console.error(e),navigator.onLine?new et("Unable to reach the server, an unexpected error occurred"):new et("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,a,n){let i;const s=await this.sendRequest(e,t,a,n);try{i=await s.json()}catch(e){throw console.debug(t.toString(),e),new Qe(e,s)}if(!s.ok){const e=i.header.message;throw new Ye(e,{code:s.status,body:i.body})}return i}}const nt=class{constructor(e){this.apiClientOptions=e}async findAllSettings(){return this.initClient(),(await this.apiClient.findAll()).body}async save(e){return this.initClient(),(await this.apiClient.create(e)).body}async getUserSettings(){return this.initClient("setup/select"),(await this.apiClient.findAll()).body}initClient(e="settings"){this.apiClientOptions.setResourceName(`mfa/${e}`),this.apiClient=new at(this.apiClientOptions)}},it=class{constructor(e){e.setResourceName("mfa-policies/settings"),this.apiClient=new at(e)}async find(){return(await this.apiClient.findAll()).body}async save(e){await this.apiClient.create(e)}};function st(){return st=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getMfaOrganisationSettings:()=>{},getMfaUserSettings:()=>{},findPolicy:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},isMfaChoiceRequired:()=>{},checkMfaChoiceRequired:()=>{},hasMfaUserSettings:()=>{},navigate:()=>{},setProvider:()=>{},goToProviderList:()=>{},validateTotpCode:()=>{},removeProvider:()=>{},validateYubikeyCode:()=>{}});class lt extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.props.context.getApiClientOptions&&(this.mfaService=new nt(this.props.context.getApiClientOptions()),this.mfaPolicyService=new it(this.props.context.getApiClientOptions()))}get defaultState(){return{state:ot,setup:null,policy:null,provider:null,processing:!0,mfaUserSettings:null,mfaOrganisationSettings:null,mfaChoiceRequired:!1,getPolicy:this.getPolicy.bind(this),getMfaOrganisationSettings:this.getMfaOrganisationSettings.bind(this),getMfaUserSettings:this.getMfaUserSettings.bind(this),findPolicy:this.findPolicy.bind(this),findMfaSettings:this.findMfaSettings.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),hasMfaSettings:this.hasMfaSettings.bind(this),hasMfaOrganisationSettings:this.hasMfaOrganisationSettings.bind(this),hasMfaUserSettings:this.hasMfaUserSettings.bind(this),clearContext:this.clearContext.bind(this),checkMfaChoiceRequired:this.checkMfaChoiceRequired.bind(this),isMfaChoiceRequired:this.isMfaChoiceRequired.bind(this),navigate:this.navigate.bind(this),setProvider:this.setProvider.bind(this),goToProviderList:this.goToProviderList.bind(this),validateTotpCode:this.validateTotpCode.bind(this),removeProvider:this.removeProvider.bind(this),validateYubikeyCode:this.validateYubikeyCode.bind(this)}}async findPolicy(){if(this.getPolicy())return;this.setProcessing(!0);let e=null,t=null;t=this.mfaPolicyService?await this.mfaPolicyService.find():await this.props.context.port.request("passbolt.mfa-policy.get-policy"),e=t?t.policy:null,this.setState({policy:e}),this.setProcessing(!1)}async findMfaSettings(){this.setProcessing(!0);let e=null,t=null,a=null;e=this.mfaService?await this.mfaService.getUserSettings():await this.props.context.port.request("passbolt.mfa-policy.get-mfa-settings"),t=e.MfaAccountSettings,a=e.MfaOrganizationSettings,this.setState({mfaUserSettings:t}),this.setState({mfaOrganisationSettings:a}),this.setProcessing(!1)}getPolicy(){return this.state.policy}getMfaOrganisationSettings(){return this.state.mfaOrganisationSettings}getMfaUserSettings(){return this.state.mfaUserSettings}hasMfaSettings(){return!this.hasMfaOrganisationSettings()||this.hasMfaUserSettings()}hasMfaOrganisationSettings(){return this.state.mfaOrganisationSettings&&Object.values(this.state.mfaOrganisationSettings).some((e=>e))}hasMfaUserSettings(){return this.state.mfaUserSettings&&Object.values(this.state.mfaUserSettings).some((e=>e))}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}clearContext(){const{policy:e,processing:t}=this.defaultState;this.setState({policy:e,processing:t})}async checkMfaChoiceRequired(){if(await this.findPolicy(),null===this.getPolicy()||"mandatory"!==this.getPolicy())return!1;await this.findMfaSettings(),this.setState({mfaChoiceRequired:!this.hasMfaSettings()})}isMfaChoiceRequired(){return this.state.mfaChoiceRequired}navigate(e){this.setState({state:e})}goToProviderList(){this.setState({state:ot,provider:null})}setProvider(e){this.setState({provider:e})}async validateTotpCode(e,t){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.verify-totp-code",{otpProvisioningUri:e,totp:t})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}async validateYubikeyCode(e){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.verify-yubikey-code",{hotp:e})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}async removeProvider(){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.remove-provider",{provider:this.state.provider})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}render(){return n.createElement(rt.Provider,{value:this.state},this.props.children)}}lt.propTypes={context:o().any,children:o().any};const ct=I(lt);function mt(e){return class extends n.Component{render(){return n.createElement(rt.Consumer,null,(t=>n.createElement(e,st({mfaContext:t},this.props))))}}}class dt extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks(),this.createRefs()}getDefaultState(){return{open:!1,loading:!0}}bindCallbacks(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleToggleMenuClick=this.handleToggleMenuClick.bind(this),this.handleProfileClick=this.handleProfileClick.bind(this),this.handleThemeClick=this.handleThemeClick.bind(this),this.handleMobileAppsClick=this.handleMobileAppsClick.bind(this)}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),this.props.context.siteSettings.canIUse("mfaPolicies")&&this.props.mfaContext.checkMfaChoiceRequired()}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0})}createRefs(){this.userBadgeMenuRef=n.createRef()}get canIUseThemeCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountSettings")}get canIUseMobileCapability(){return this.props.rbacContext.canIUseUiAction(ne)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("mobile")}handleDocumentClickEvent(e){this.userBadgeMenuRef.current.contains(e.target)||this.closeUserBadgeMenu()}handleDocumentContextualMenuEvent(e){this.userBadgeMenuRef.current.contains(e.target)||this.closeUserBadgeMenu()}handleDocumentDragStartEvent(){this.closeUserBadgeMenu()}closeUserBadgeMenu(){this.setState({open:!1})}getUserFullName(){return this.props.user&&this.props.user.profile?`${this.props.user.profile.first_name} ${this.props.user.profile.last_name}`:"..."}getUserUsername(){return this.props.user&&this.props.user.username?`${this.props.user.username}`:"..."}handleToggleMenuClick(e){e.preventDefault();const t=!this.state.open;this.setState({open:t})}handleProfileClick(){this.props.navigationContext.onGoToUserSettingsProfileRequested(),this.closeUserBadgeMenu()}handleThemeClick(){this.props.navigationContext.onGoToUserSettingsThemeRequested(),this.closeUserBadgeMenu()}handleMobileAppsClick(){this.props.navigationContext.onGoToUserSettingsMobileRequested(),this.closeUserBadgeMenu()}get attentionRequired(){return this.props.accountRecoveryContext.isAccountRecoveryChoiceRequired()||this.props.mfaContext.isMfaChoiceRequired()}render(){return n.createElement("div",{className:"col3 profile-wrapper"},n.createElement("div",{className:"user profile dropdown",ref:this.userBadgeMenuRef},n.createElement("div",{className:"avatar-with-name button "+(this.state.open?"open":""),onClick:this.handleToggleMenuClick},n.createElement($e,{user:this.props.user,className:"avatar picture left-cell",baseUrl:this.props.baseUrl,attentionRequired:this.attentionRequired}),n.createElement("div",{className:"details center-cell"},n.createElement("span",{className:"name"},this.getUserFullName()),n.createElement("span",{className:"email"},this.getUserUsername())),n.createElement("div",{className:"more right-cell"},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(Re,{name:"caret-down"})))),this.state.open&&n.createElement("ul",{className:"dropdown-content right visible"},n.createElement("li",{key:"profile"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleProfileClick},n.createElement("span",null,n.createElement(v.c,null,"Profile")),this.attentionRequired&&n.createElement(Re,{name:"exclamation",baseline:!0})))),this.canIUseThemeCapability&&n.createElement("li",{key:"theme"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleThemeClick},n.createElement("span",null,n.createElement(v.c,null,"Theme"))))),this.canIUseMobileCapability&&n.createElement("li",{id:"user-badge-menu-mobile",key:"mobile"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleMobileAppsClick},n.createElement("span",null,n.createElement(v.c,null,"Mobile Apps")),n.createElement("span",{className:"chips new"},"new")))))))}}dt.propTypes={context:o().object,navigationContext:o().any,mfaContext:o().object,accountRecoveryContext:o().object,baseUrl:o().string,user:o().object,rbacContext:o().any};const ht=I(Ne(J(Ge(mt((0,k.Z)("common")(dt))))));class pt extends n.Component{constructor(e){super(e),this.bindCallbacks()}canIUse(e){return Boolean(this.props.context.siteSettings?.canIUse(e))}get isMfaEnabled(){return this.canIUse("multiFactorAuthentication")}get isUserDirectoryEnabled(){return this.canIUse("directorySync")}get canIUseEE(){return this.canIUse("ee")}get canIUseLocale(){return this.canIUse("locale")}get canIUseAccountRecovery(){return this.canIUse("accountRecovery")}get canIUseSmtpSettings(){return this.canIUse("smtpSettings")}get canIUseSelfRegistrationSettings(){return this.canIUse("selfRegistration")}get canIUseSso(){return this.canIUse("sso")}get canIUseMfaPolicy(){return this.canIUse("mfaPolicies")}get canIUsePasswordPolicies(){return this.canIUse("passwordPoliciesUpdate")}get canIUseRbacs(){return this.canIUse("rbacs")}get canIUseUserPassphrasePolicies(){return this.canIUse("userPassphrasePolicies")}get canIUsePasswordExpiry(){return this.canIUse("passwordExpiry")}bindCallbacks(){this.handleMfaClick=this.handleMfaClick.bind(this),this.handleUserDirectoryClick=this.handleUserDirectoryClick.bind(this),this.handleEmailNotificationsClick=this.handleEmailNotificationsClick.bind(this),this.handleSubscriptionClick=this.handleSubscriptionClick.bind(this),this.handleInternationalizationClick=this.handleInternationalizationClick.bind(this),this.handleAccountRecoveryClick=this.handleAccountRecoveryClick.bind(this),this.handleSmtpSettingsClick=this.handleSmtpSettingsClick.bind(this),this.handleSelfRegistrationClick=this.handleSelfRegistrationClick.bind(this),this.handleSsoClick=this.handleSsoClick.bind(this),this.handleMfaPolicyClick=this.handleMfaPolicyClick.bind(this),this.handleRbacsClick=this.handleRbacsClick.bind(this),this.handlePasswordPoliciesClick=this.handlePasswordPoliciesClick.bind(this),this.handleUserPassphrasePoliciesClick=this.handleUserPassphrasePoliciesClick.bind(this),this.handlePasswordExpirySettingsClick=this.handlePasswordExpirySettingsClick.bind(this)}handleMfaClick(){this.props.navigationContext.onGoToAdministrationMfaRequested()}handleUserDirectoryClick(){this.props.navigationContext.onGoToAdministrationUsersDirectoryRequested()}handleEmailNotificationsClick(){this.props.navigationContext.onGoToAdministrationEmailNotificationsRequested()}handleSubscriptionClick(){this.props.navigationContext.onGoToAdministrationSubscriptionRequested()}handleInternationalizationClick(){this.props.navigationContext.onGoToAdministrationInternationalizationRequested()}handleAccountRecoveryClick(){this.props.navigationContext.onGoToAdministrationAccountRecoveryRequested()}handleSmtpSettingsClick(){this.props.navigationContext.onGoToAdministrationSmtpSettingsRequested()}handleSelfRegistrationClick(){this.props.navigationContext.onGoToAdministrationSelfRegistrationRequested()}handleSsoClick(){this.props.navigationContext.onGoToAdministrationSsoRequested()}handleRbacsClick(){this.props.navigationContext.onGoToAdministrationRbacsRequested()}handleMfaPolicyClick(){this.props.navigationContext.onGoToAdministrationMfaPolicyRequested()}handlePasswordPoliciesClick(){this.props.navigationContext.onGoToAdministrationPasswordPoliciesRequested()}handleUserPassphrasePoliciesClick(){this.props.navigationContext.onGoToAdministrationUserPassphrasePoliciesRequested()}handlePasswordExpirySettingsClick(){this.props.navigationContext.onGoToAdministrationPasswordExpirySettingsRequested()}isMfaSelected(){return F.MFA===this.props.administrationWorkspaceContext.selectedAdministration}isMfaPolicySelected(){return F.MFA_POLICY===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordPoliciesSelected(){return F.PASSWORD_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isUserDirectorySelected(){return F.USER_DIRECTORY===this.props.administrationWorkspaceContext.selectedAdministration}isEmailNotificationsSelected(){return F.EMAIL_NOTIFICATION===this.props.administrationWorkspaceContext.selectedAdministration}isSubscriptionSelected(){return F.SUBSCRIPTION===this.props.administrationWorkspaceContext.selectedAdministration}isInternationalizationSelected(){return F.INTERNATIONALIZATION===this.props.administrationWorkspaceContext.selectedAdministration}isAccountRecoverySelected(){return F.ACCOUNT_RECOVERY===this.props.administrationWorkspaceContext.selectedAdministration}isSsoSelected(){return F.SSO===this.props.administrationWorkspaceContext.selectedAdministration}isRbacSelected(){return F.RBAC===this.props.administrationWorkspaceContext.selectedAdministration}isSmtpSettingsSelected(){return F.SMTP_SETTINGS===this.props.administrationWorkspaceContext.selectedAdministration}isSelfRegistrationSettingsSelected(){return F.SELF_REGISTRATION===this.props.administrationWorkspaceContext.selectedAdministration}isUserPassphrasePoliciesSelected(){return F.USER_PASSPHRASE_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordExpirySettingsSelected(){return F.PASSWORD_EXPIRY===this.props.administrationWorkspaceContext.selectedAdministration}render(){return n.createElement("div",{className:"navigation-secondary navigation-administration"},n.createElement("ul",{id:"administration_menu",className:"clearfix menu ready"},this.isMfaEnabled&&n.createElement("li",{id:"mfa_menu"},n.createElement("div",{className:"row "+(this.isMfaSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleMfaClick},n.createElement("span",null,n.createElement(v.c,null,"Multi Factor Authentication"))))))),this.canIUseMfaPolicy&&n.createElement("li",{id:"mfa_policy_menu"},n.createElement("div",{className:"row "+(this.isMfaPolicySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleMfaPolicyClick},n.createElement("span",null,n.createElement(v.c,null,"MFA Policy"))))))),this.canIUsePasswordPolicies&&n.createElement("li",{id:"password_policy_menu"},n.createElement("div",{className:"row "+(this.isPasswordPoliciesSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handlePasswordPoliciesClick},n.createElement("span",null,n.createElement(v.c,null,"Password Policy"))))))),this.isUserDirectoryEnabled&&n.createElement("li",{id:"user_directory_menu"},n.createElement("div",{className:"row "+(this.isUserDirectorySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleUserDirectoryClick},n.createElement("span",null,n.createElement(v.c,null,"Users Directory"))))))),n.createElement("li",{id:"email_notification_menu"},n.createElement("div",{className:"row "+(this.isEmailNotificationsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleEmailNotificationsClick},n.createElement("span",null,n.createElement(v.c,null,"Email Notifications"))))))),this.canIUseLocale&&n.createElement("li",{id:"internationalization_menu"},n.createElement("div",{className:"row "+(this.isInternationalizationSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleInternationalizationClick},n.createElement("span",null,n.createElement(v.c,null,"Internationalisation"))))))),this.canIUseEE&&n.createElement("li",{id:"subscription_menu"},n.createElement("div",{className:"row "+(this.isSubscriptionSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSubscriptionClick},n.createElement("span",null,n.createElement(v.c,null,"Subscription"))))))),this.canIUseAccountRecovery&&n.createElement("li",{id:"account_recovery_menu"},n.createElement("div",{className:"row "+(this.isAccountRecoverySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleAccountRecoveryClick},n.createElement("span",null,n.createElement(v.c,null,"Account Recovery"))))))),this.canIUseSmtpSettings&&n.createElement("li",{id:"smtp_settings_menu"},n.createElement("div",{className:"row "+(this.isSmtpSettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSmtpSettingsClick},n.createElement("span",null,n.createElement(v.c,null,"Email server"))))))),this.canIUseSelfRegistrationSettings&&n.createElement("li",{id:"self_registration_menu"},n.createElement("div",{className:"row "+(this.isSelfRegistrationSettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSelfRegistrationClick},n.createElement("span",null,n.createElement(v.c,null,"Self Registration"))))))),this.canIUseSso&&n.createElement("li",{id:"sso_menu"},n.createElement("div",{className:"row "+(this.isSsoSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSsoClick},n.createElement("span",null,n.createElement(v.c,null,"Single Sign-On"))))))),this.canIUseRbacs&&n.createElement("li",{id:"rbacs_menu"},n.createElement("div",{className:"row "+(this.isRbacSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleRbacsClick},n.createElement("span",null,n.createElement(v.c,null,"Role-Based Access Control"))))))),this.canIUseUserPassphrasePolicies&&n.createElement("li",{id:"user_passphrase_policies_menu"},n.createElement("div",{className:"row "+(this.isUserPassphrasePoliciesSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleUserPassphrasePoliciesClick},n.createElement("span",null,n.createElement(v.c,null,"User Passphrase Policies"))))))),this.canIUsePasswordExpiry&&n.createElement("li",{id:"password_expiry_menu"},n.createElement("div",{className:"row "+(this.isPasswordExpirySettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handlePasswordExpirySettingsClick},n.createElement("span",null,n.createElement(v.c,null,"Password Expiry")))))))))}}pt.propTypes={context:o().object,administrationWorkspaceContext:o().object,history:o().object,navigationContext:o().any};const ut=(0,N.EN)(I(J(O((0,k.Z)("common")(pt))))),gt={totp:"totp",yubikey:"yubikey",duo:"duo"},bt=class{constructor(e={}){this.totpProviderToggle="providers"in e&&e.providers.includes(gt.totp),this.yubikeyToggle="providers"in e&&e.providers.includes(gt.yubikey),this.yubikeyClientIdentifier="yubikey"in e?e.yubikey.clientId:"",this.yubikeySecretKey="yubikey"in e?e.yubikey.secretKey:"",this.duoToggle="providers"in e&&e.providers.includes(gt.duo),this.duoHostname="duo"in e?e.duo.hostName:"",this.duoClientId="duo"in e?e.duo.integrationKey:"",this.duoClientSecret="duo"in e?e.duo.secretKey:""}};function ft(){return ft=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findMfaSettings:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},getErrors:()=>{},setError:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},clearContext:()=>{}});class vt extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.mfaService=new nt(t)}get defaultState(){return{errors:this.initErrors(),currentSettings:null,settings:new bt,submitted:!1,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findMfaSettings:this.findMfaSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),clearContext:this.clearContext.bind(this)}}initErrors(){return{yubikeyClientIdentifierError:null,yubikeySecretKeyError:null,duoHostnameError:null,duoClientIdError:null,duoClientSecretError:null}}async findMfaSettings(){this.setProcessing(!0);const e=await this.mfaService.findAllSettings(),t=new bt(e);this.setState({currentSettings:t}),this.setState({settings:Object.assign({},t)}),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}async setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});await this.setState({settings:a})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e})}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new class{constructor(e={}){this.providers=[],this.setProviders(e),this.yubikey=this.providers.includes(gt.yubikey)?new class{constructor(e={}){this.clientId="yubikeyClientIdentifier"in e?e.yubikeyClientIdentifier:e.clientId,this.secretKey="yubikeySecretKey"in e?e.yubikeySecretKey:e.secretKey}}(e):{},this.duo=this.providers.includes(gt.duo)?new class{constructor(e={}){this.apiHostName=e.duoHostname,this.clientId=e.duoClientId,this.clientSecret=e.duoClientSecret}}(e):{}}setProviders(e){e.totpProviderToggle&&this.providers.push(gt.totp),e.yubikeyToggle&&this.providers.push(gt.yubikey),e.duoToggle&&this.providers.push(gt.duo)}}(this.state.settings);await this.mfaService.save(e),await this.findMfaSettings()}getErrors(){return this.state.errors}setError(e,t){const a=Object.assign({},this.state.errors,{[e]:t});this.setState({errors:a})}setErrors(e,t=(()=>{})){const a=Object.assign({},this.state.errors,e);return this.setState({errors:a},t)}render(){return n.createElement(yt.Provider,{value:this.state},this.props.children)}}vt.propTypes={context:o().any,children:o().any};const kt=I(vt);function Et(e){return class extends n.Component{render(){return n.createElement(yt.Consumer,null,(t=>n.createElement(e,ft({adminMfaContext:t},this.props))))}}}var wt=a(648),Ct=a.n(wt);class St{constructor(e,t){this.context=e,this.translation=t}static getInstance(e,t){return this.instance||(this.instance=new St(e,t)),this.instance}static killInstance(){this.instance=null}validateInput(e,t,a){const n=e.trim();return n.length?Ct()(t).test(n)?null:this.translation(a.regex):this.translation(a.required)}validateYubikeyClientIdentifier(e){const t=this.validateInput(e,"^[0-9]{1,64}$",{required:"A client identifier is required.",regex:"The client identifier should be an integer."});return this.context.setError("yubikeyClientIdentifierError",t),t}validateYubikeySecretKey(e){const t=this.validateInput(e,"^[a-zA-Z0-9\\/=+]{10,128}$",{required:"A secret key is required.",regex:"This secret key is not valid."});return this.context.setError("yubikeySecretKeyError",t),t}validateDuoHostname(e){const t=this.validateInput(e,"^api-[a-fA-F0-9]{8,16}\\.duosecurity\\.com$",{required:"A hostname is required.",regex:"This is not a valid hostname."});return this.context.setError("duoHostnameError",t),t}validateDuoClientId(e){const t=this.validateInput(e,"^[a-zA-Z0-9]{16,32}$",{required:"A client id is required.",regex:"This is not a valid client id."});return this.context.setError("duoClientIdError",t),t}validateDuoClientSecret(e){const t=this.validateInput(e,"^[a-zA-Z0-9]{32,128}$",{required:"A client secret is required.",regex:"This is not a valid client secret."});return this.context.setError("duoClientSecretError",t),t}validateYubikeyInputs(){let e=null,t=null;const a=this.context.getSettings();let n={};return a.yubikeyToggle&&(e=this.validateYubikeyClientIdentifier(a.yubikeyClientIdentifier),t=this.validateYubikeySecretKey(a.yubikeySecretKey),n={yubikeyClientIdentifierError:e,yubikeySecretKeyError:t}),n}validateDuoInputs(){let e=null,t=null,a=null,n={};const i=this.context.getSettings();return i.duoToggle&&(e=this.validateDuoHostname(i.duoHostname),t=this.validateDuoClientId(i.duoClientId),a=this.validateDuoClientSecret(i.duoClientSecret),n={duoHostnameError:e,duoClientIdError:t,duoClientSecretError:a}),n}async validate(){const e=Object.assign(this.validateYubikeyInputs(),this.validateDuoInputs());return await this.context.setErrors(e),0===Object.values(e).filter((e=>e)).length}}const xt=St;class Nt extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.mfaFormService=xt.getInstance(this.props.adminMfaContext,this.props.t)}async handleSaveClick(){try{await this.mfaFormService.validate()&&(await this.props.adminMfaContext.save(),this.handleSaveSuccess())}catch(e){this.handleSaveError(e)}finally{this.props.adminMfaContext.setSubmitted(!0),this.props.adminMfaContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminMfaContext.isProcessing()&&this.props.adminMfaContext.hasSettingsChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The multi factor authentication settings for the organization were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Nt.propTypes={adminMfaContext:o().object,actionFeedbackContext:o().object,t:o().func};const _t=Et(d((0,k.Z)("common")(Nt)));class Rt extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{viewPassword:!1,hasPassphraseFocus:!1}}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handlePasswordInputFocus=this.handlePasswordInputFocus.bind(this),this.handlePasswordInputBlur=this.handlePasswordInputBlur.bind(this),this.handleViewPasswordButtonClick=this.handleViewPasswordButtonClick.bind(this)}handleInputChange(e){this.props.onChange&&this.props.onChange(e)}handlePasswordInputFocus(){this.setState({hasPassphraseFocus:!0})}handlePasswordInputBlur(){this.setState({hasPassphraseFocus:!1})}handleViewPasswordButtonClick(){this.props.disabled||this.setState({viewPassword:!this.state.viewPassword})}get securityTokenStyle(){const e={background:this.props.securityToken.textColor,color:this.props.securityToken.backgroundColor},t={background:this.props.securityToken.backgroundColor,color:this.props.securityToken.textColor};return this.state.hasPassphraseFocus?e:t}get passphraseInputStyle(){const e={background:this.props.securityToken.backgroundColor,color:this.props.securityToken.textColor,"--passphrase-placeholder-color":this.props.securityToken.textColor};return this.state.hasPassphraseFocus?e:void 0}get previewStyle(){const e={"--icon-color":this.props.securityToken.textColor,"--icon-background-color":this.props.securityToken.backgroundColor};return this.state.hasPassphraseFocus?e:void 0}render(){return n.createElement("div",{className:`input password ${this.props.disabled?"disabled":""} ${this.state.hasPassphraseFocus?"":"no-focus"} ${this.props.securityToken?"security":""}`,style:this.props.securityToken?this.passphraseInputStyle:void 0},n.createElement("input",{id:this.props.id,name:this.props.name,maxLength:"4096",placeholder:this.props.placeholder,type:this.state.viewPassword&&!this.props.disabled?"text":"password",onKeyUp:this.props.onKeyUp,value:this.props.value,onFocus:this.handlePasswordInputFocus,onBlur:this.handlePasswordInputBlur,onChange:this.handleInputChange,disabled:this.props.disabled,readOnly:this.props.readOnly,autoComplete:this.props.autoComplete,"aria-required":!0,ref:this.props.inputRef}),this.props.preview&&n.createElement("div",{className:"password-view-wrapper"},n.createElement("button",{type:"button",onClick:this.handleViewPasswordButtonClick,style:this.props.securityToken?this.previewStyle:void 0,className:"password-view infield button-transparent "+(this.props.disabled?"disabled":"")},!this.state.viewPassword&&n.createElement(Re,{name:"eye-open"}),this.state.viewPassword&&n.createElement(Re,{name:"eye-close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"View")))),this.props.securityToken&&n.createElement("div",{className:"security-token-wrapper"},n.createElement("span",{className:"security-token",style:this.securityTokenStyle},this.props.securityToken.code)))}}Rt.defaultProps={id:"",name:"",autoComplete:"off"},Rt.propTypes={context:o().any,id:o().string,name:o().string,value:o().string,placeholder:o().string,autoComplete:o().string,inputRef:o().object,disabled:o().bool,readOnly:o().bool,preview:o().bool,onChange:o().func,onKeyUp:o().func,securityToken:o().shape({code:o().string,backgroundColor:o().string,textColor:o().string})};const It=(0,k.Z)("common")(Rt);class At extends n.Component{constructor(e){super(e),this.mfaFormService=xt.getInstance(this.props.adminMfaContext,this.props.t),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(_t),this.isRunningUnderHttps&&this.props.adminMfaContext.findMfaSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminMfaContext.clearContext(),xt.killInstance(),this.mfaFormService=null}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){const t=e.target,a="checkbox"===t.type?t.checked:t.value,n=t.name;this.props.adminMfaContext.setSettings(n,a),this.validateInput(n,a)}validateInput(e,t){switch(e){case"yubikeyClientIdentifier":this.mfaFormService.validateYubikeyClientIdentifier(t);break;case"yubikeySecretKey":this.mfaFormService.validateYubikeySecretKey(t);break;case"duoHostname":this.mfaFormService.validateDuoHostname(t);break;case"duoClientId":this.mfaFormService.validateDuoClientId(t);break;case"duoClientSecret":this.mfaFormService.validateDuoClientSecret(t)}}get isRunningUnderHttps(){const e=this.props.context.trustedDomain;return"https:"===new URL(e).protocol}hasAllInputDisabled(){return this.props.adminMfaContext.isProcessing()}render(){const e=this.props.adminMfaContext.isSubmitted(),t=this.props.adminMfaContext.getSettings(),a=this.props.adminMfaContext.getErrors();return n.createElement("div",{className:"row"},n.createElement("div",{className:"mfa-settings col7 main-column"},n.createElement("h3",null,"Multi Factor Authentication"),!this.isRunningUnderHttps&&n.createElement("p",null,n.createElement(v.c,null,"Sorry the multi factor authentication feature is only available in a secure context (HTTPS).")),this.isRunningUnderHttps&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose which multi factor authentication will be available.")),n.createElement("h4",{className:"no-border"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"totp-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"totpProviderToggle",onChange:this.handleInputChange,checked:t.totpProviderToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"totp-provider-toggle-button"},n.createElement(v.c,null,"Time-based One Time Password")))),!t.totpProviderToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Time-based One Time Password provider is disabled for all users.")),t.totpProviderToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Time-based One Time Password provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{id:"yubikey-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"yubikeyToggle",onChange:this.handleInputChange,checked:t.yubikeyToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"yubikey-provider-toggle-button"},"Yubikey"))),!t.yubikeyToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Yubikey provider is disabled for all users.")),t.yubikeyToggle&&n.createElement(n.Fragment,null,n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Yubikey provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("div",{className:`input text required ${a.yubikeyClientIdentifierError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client identifier")),n.createElement("input",{id:"yubikeyClientIdentifier",type:"text",name:"yubikeyClientIdentifier","aria-required":!0,className:"required fluid form-element ready",placeholder:"123456789",onChange:this.handleInputChange,value:t.yubikeyClientIdentifier,disabled:this.hasAllInputDisabled()}),a.yubikeyClientIdentifierError&&e&&n.createElement("div",{className:"yubikey_client_identifier error-message"},a.yubikeyClientIdentifierError)),n.createElement("div",{className:`input required input-secret ${a.yubikeySecretKeyError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Secret key")),n.createElement(It,{id:"yubikeySecretKey",onChange:this.handleInputChange,autoComplete:"off",name:"yubikeySecretKey",placeholder:"**********",disabled:this.hasAllInputDisabled(),value:t.yubikeySecretKey,preview:!0}),a.yubikeySecretKeyError&&e&&n.createElement("div",{className:"yubikey_secret_key error-message"},a.yubikeySecretKeyError))),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"duo-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"duoToggle",onChange:this.handleInputChange,checked:t.duoToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"duo-provider-toggle-button"},"Duo"))),!t.duoToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Duo provider is disabled for all users.")),t.duoToggle&&n.createElement(n.Fragment,null,n.createElement("p",{className:"description enabled"},n.createElement(v.c,null,"The Duo provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("div",{className:`input text required ${a.duoHostnameError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Hostname")),n.createElement("input",{id:"duoHostname",type:"text",name:"duoHostname","aria-required":!0,className:"required fluid form-element ready",placeholder:"api-24zlkn4.duosecurity.com",value:t.duoHostname,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),a.duoHostnameError&&e&&n.createElement("div",{className:"duo_hostname error-message"},a.duoHostnameError)),n.createElement("div",{className:`input text required ${a.duoClientIdError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client id")),n.createElement("input",{id:"duoClientId",type:"text",name:"duoClientId","aria-required":!0,className:"required fluid form-element ready",placeholder:"HASJKDSQJO213123KQSLDF",value:t.duoClientId,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),a.duoClientIdError&&e&&n.createElement("div",{className:"duo_client_id error-message"},a.duoClientIdError)),n.createElement("div",{className:`input text required ${a.duoClientSecretError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client secret")),n.createElement(It,{id:"duoClientSecret",onChange:this.handleInputChange,autoComplete:"off",name:"duoClientSecret",placeholder:"**********",disabled:this.hasAllInputDisabled(),value:t.duoClientSecret,preview:!0}),a.duoClientSecretError&&e&&n.createElement("div",{className:"duo_client_secret error-message"},a.duoClientSecretError))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need help?")),n.createElement("p",null,n.createElement(v.c,null,"Check out our Multi Factor Authentication configuration guide.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}At.propTypes={context:o().object,adminMfaContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const Pt=I(Et(O((0,k.Z)("common")(At))));class Dt extends n.Component{render(){let e=0;return n.createElement("div",{className:"breadcrumbs"},n.createElement("ul",{className:"menu"},this.props.items&&this.props.items.map((t=>(e++,n.createElement("li",{className:"ellipsis",key:e},t))))),this.props.children)}}Dt.propTypes={items:o().array,children:o().any};const Lt=Dt;class Tt extends n.Component{render(){return n.createElement("button",{type:"button",className:"link no-border inline ellipsis",onClick:this.props.onClick},this.props.name)}}Tt.propTypes={name:o().string,onClick:o().func};const Ut=Tt;class jt extends n.Component{get items(){return this.props.administrationWorkspaceContext.selectedAdministration===F.NONE?[]:[n.createElement(Ut,{key:"bread-1",name:this.translate("Administration"),onClick:this.props.navigationContext.onGoToAdministrationRequested}),n.createElement(Ut,{key:"bread-2",name:this.getLastBreadcrumbItemName(),onClick:this.onLastBreadcrumbClick.bind(this)}),n.createElement(Ut,{key:"bread-3",name:this.translate("Settings"),onClick:this.onLastBreadcrumbClick.bind(this)})]}getLastBreadcrumbItemName(){switch(this.props.administrationWorkspaceContext.selectedAdministration){case F.MFA:return this.translate("Multi Factor Authentication");case F.USER_DIRECTORY:return this.translate("Users Directory");case F.EMAIL_NOTIFICATION:return this.translate("Email Notification");case F.SUBSCRIPTION:return this.translate("Subscription");case F.INTERNATIONALIZATION:return this.translate("Internationalisation");case F.ACCOUNT_RECOVERY:return this.translate("Account Recovery");case F.SMTP_SETTINGS:return this.translate("Email server");case F.SELF_REGISTRATION:return this.translate("Self Registration");case F.SSO:return this.translate("Single Sign-On");case F.MFA_POLICY:return this.translate("MFA Policy");case F.RBAC:return this.translate("Role-Based Access Control");case F.PASSWORD_POLICIES:return this.translate("Password Policy");case F.USER_PASSPHRASE_POLICIES:return this.translate("User Passphrase Policies");case F.PASSWORD_EXPIRY:return this.translate("Password Expiry");default:return""}}async onLastBreadcrumbClick(){const e=this.props.location.pathname;this.props.history.push({pathname:e})}get translate(){return this.props.t}render(){return n.createElement(Lt,{items:this.items})}}jt.propTypes={administrationWorkspaceContext:o().object,location:o().object,history:o().object,navigationContext:o().any,t:o().func};const zt=(0,N.EN)(J(O((0,k.Z)("common")(jt)))),Mt=new class{allPropTypes=(...e)=>(...t)=>{const a=e.map((e=>e(...t))).filter(Boolean);if(0===a.length)return;const n=a.map((e=>e.message)).join("\n");return new Error(n)}};class Ot extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter((e=>e.value!==this.state.selectedValue));return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find((e=>e.value===this.state.selectedValue));return e&&e.label||n.createElement(n.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=n.createRef(),this.selectItemsRef=n.createRef(),this.itemsRef=n.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:a}=e;let{top:n,left:i}=e;const s=this.getFirstParentWithTransform();if(s){const e=s.getBoundingClientRect();n-=e.top,i-=e.left}const o={position:"fixed",zIndex:1,width:t,height:a,top:n,left:i};this.setState({style:o})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const a=t&&t.split(/\s+/)||[""];return e.filter((e=>a.every((t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return n.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},n.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},n.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},n.createElement("span",{className:"value"},this.selectedItemLabel),n.createElement(Re,{name:"caret-down"})),n.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&n.createElement(n.Fragment,null,n.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),n.createElement(Re,{name:"search"})),n.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map((e=>n.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label))),!this.hasFilteredItems()&&this.props.search&&n.createElement("li",{className:"option no-results"},n.createElement(v.c,null,"No results match")," ",n.createElement("span",null,this.state.search))))))}}Ot.defaultProps={id:"",name:"select",className:"",direction:"bottom"},Ot.propTypes={id:o().string,name:o().string,className:o().string,direction:o().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:o().bool,items:o().array,value:Mt.allPropTypes(o().oneOfType([o().string,o().number,o().bool]),((e,t,a)=>{const n=e[t],i=e.items;if(null!==n&&i.length>0&&i.every((e=>e.value!==n)))return new Error(`Invalid prop ${t} passed to ${a}. Expected the value ${n} in items.`)})),disabled:o().bool,onChange:o().func};const Ft=(0,k.Z)("common")(Ot);class qt extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleClick=this.handleClick.bind(this)}handleClick(){this.props.disabled||this.props.onClick()}render(){return n.createElement("button",{type:"button",disabled:this.props.disabled,className:"link cancel",onClick:this.handleClick},n.createElement(v.c,null,"Cancel"))}}qt.propTypes={disabled:o().bool,onClick:o().func};const Wt=(0,k.Z)("common")(qt);class Vt extends n.Component{constructor(e){super(e),this.infiniteTimerUpdateIntervalId=null,this.state=this.defaultState}get defaultState(){return{infiniteTimer:0}}componentDidMount(){this.startInfiniteTimerUpdateProgress()}componentWillUnmount(){this.resetInterval()}resetInterval(){this.infiniteTimerUpdateIntervalId&&(clearInterval(this.infiniteTimerUpdateIntervalId),this.infiniteTimerUpdateIntervalId=null)}startInfiniteTimerUpdateProgress(){this.infiniteTimerUpdateIntervalId=setInterval((()=>{const e=this.state.infiniteTimer+2;this.setState({infiniteTimer:e})}),500)}calculateInfiniteProgress(){return 100-100/Math.pow(1.1,this.state.infiniteTimer)}handleClose(){this.props.onClose()}render(){const e=this.calculateInfiniteProgress(),t={width:`${e}%`};return n.createElement(Te,{className:"loading-dialog",title:this.props.title,onClose:this.handleClose,disabled:!0},n.createElement("div",{className:"form-content"},n.createElement("label",null,n.createElement(v.c,null,"Take a deep breath and enjoy being in the present moment...")),n.createElement("div",{className:"progress-bar-wrapper"},n.createElement("span",{className:"progress-bar"},n.createElement("span",{className:"progress "+(100===e?"completed":""),style:t})))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"submit",disabled:!0,className:"processing"},"Submit",n.createElement(Re,{name:"spinner"}))))}}Vt.propTypes={onClose:o().func,title:o().string};const Bt=(0,k.Z)("common")(Vt),Gt="directorysync",Kt="mail",Ht="uniqueMember";class $t{constructor(e=[],t=""){if(!e||0===e?.length)return void this.setDefaut(t);const a=e.domains?.org_domain;this.openCredentials=!0,this.openDirectoryConfiguration=!1,this.openSynchronizationOptions=!1,this.source=e.source,this.authenticationType=a?.authentication_type||"basic",this.directoryType=a?.directory_type||"ad",this.connectionType=a?.connection_type||"plain",this.host=a?.hosts?.length>0?a?.hosts[0]:"",this.hostError=null,this.port=a?.port?.toString()||"389",this.portError=null,this.username=a?.username||"",this.password=a?.password||"",this.domain=a?.domain_name||"",this.domainError=null,this.baseDn=a?.base_dn||"",this.groupPath=e.group_path||"",this.userPath=e.user_path||"",this.groupCustomFilters=e.group_custom_filters||"",this.userCustomFilters=e.user_custom_filters||"",this.groupObjectClass=e.group_object_class||"",this.userObjectClass=e.user_object_class||"",this.useEmailPrefix=e.use_email_prefix_suffix||!1,this.emailPrefix=e.email_prefix||"",this.emailSuffix=e.email_suffix||"",this.fieldsMapping=$t.defaultFieldsMapping(e.fields_mapping),this.defaultAdmin=e.default_user||t,this.defaultGroupAdmin=e.default_group_admin_user||t,this.groupsParentGroup=e.groups_parent_group||"",this.usersParentGroup=e.users_parent_group||"",this.enabledUsersOnly=Boolean(e.enabled_users_only),this.createUsers=Boolean(e.sync_users_create),this.deleteUsers=Boolean(e.sync_users_delete),this.updateUsers=Boolean(e.sync_users_update),this.createGroups=Boolean(e.sync_groups_create),this.deleteGroups=Boolean(e.sync_groups_delete),this.updateGroups=Boolean(e.sync_groups_update),this.userDirectoryToggle=Boolean(this.port)&&Boolean(this.host)&&e?.enabled}setDefaut(e){this.openCredentials=!0,this.openDirectoryConfiguration=!1,this.openSynchronizationOptions=!1,this.source="db",this.authenticationType="basic",this.directoryType="ad",this.connectionType="plain",this.host="",this.hostError=null,this.port="389",this.portError=null,this.username="",this.password="",this.domain="",this.domainError=null,this.baseDn="",this.groupPath="",this.userPath="",this.groupCustomFilters="",this.userCustomFilters="",this.groupObjectClass="",this.userObjectClass="",this.useEmailPrefix=!1,this.emailPrefix="",this.emailSuffix="",this.fieldsMapping=$t.defaultFieldsMapping(),this.defaultAdmin=e,this.defaultGroupAdmin=e,this.groupsParentGroup="",this.usersParentGroup="",this.enabledUsersOnly=!1,this.createUsers=!0,this.deleteUsers=!0,this.updateUsers=!0,this.createGroups=!0,this.deleteGroups=!0,this.updateGroups=!0,this.userDirectoryToggle=!1}static defaultFieldsMapping(e={}){return{ad:{user:Object.assign({id:"objectGuid",firstname:"givenName",lastname:"sn",username:Kt,created:"whenCreated",modified:"whenChanged",groups:"memberOf",enabled:"userAccountControl"},e?.ad?.user),group:Object.assign({id:"objectGuid",name:"cn",created:"whenCreated",modified:"whenChanged",users:"member"},e?.ad?.group)},openldap:{user:Object.assign({id:"entryUuid",firstname:"givenname",lastname:"sn",username:"mail",created:"createtimestamp",modified:"modifytimestamp"},e?.openldap?.user),group:Object.assign({id:"entryUuid",name:"cn",created:"createtimestamp",modified:"modifytimestamp",users:Ht},e?.openldap?.group)}}}static get DEFAULT_AD_FIELDS_MAPPING_USER_USERNAME_VALUE(){return Kt}static get DEFAULT_OPENLDAP_FIELDS_MAPPING_GROUP_USERS_VALUE(){return Ht}}const Zt=$t,Yt=class{constructor(e){const t=e.directoryType,a=!e.authenticationType||"basic"===e.authenticationType;this.enabled=e.userDirectoryToggle,this.group_path=e.groupPath,this.user_path=e.userPath,this.group_custom_filters=e.groupCustomFilters,this.user_custom_filters=e.userCustomFilters,this.group_object_class="openldap"===t?e.groupObjectClass:"",this.user_object_class="openldap"===t?e.userObjectClass:"",this.use_email_prefix_suffix="openldap"===t&&e.useEmailPrefix,this.email_prefix="openldap"===t&&this.useEmailPrefix?e.emailPrefix:"",this.email_suffix="openldap"===t&&this.useEmailPrefix?e.emailSuffix:"",this.default_user=e.defaultAdmin,this.default_group_admin_user=e.defaultGroupAdmin,this.groups_parent_group=e.groupsParentGroup,this.users_parent_group=e.usersParentGroup,this.enabled_users_only=e.enabledUsersOnly,this.sync_users_create=e.createUsers,this.sync_users_delete=e.deleteUsers,this.sync_users_update=e.updateUsers,this.sync_groups_create=e.createGroups,this.sync_groups_delete=e.deleteGroups,this.sync_groups_update=e.updateGroups,this.fields_mapping=e.fieldsMapping,this.domains={org_domain:{connection_type:e.connectionType,authentication_type:e.authenticationType,directory_type:t,domain_name:e.domain,username:a?e.username:void 0,password:a?e.password:void 0,base_dn:e.baseDn,hosts:[e.host],port:parseInt(e.port,10)}}}};function Jt(){return Jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},setAdUserFieldsMappingSettings:()=>{},setOpenLdapGroupFieldsMappingSettings:()=>{},hadDisabledSettings:()=>{},getUsers:()=>{},hasSettingsChanges:()=>{},findUserDirectorySettings:()=>{},save:()=>{},delete:()=>{},test:()=>{},setProcessing:()=>{},isProcessing:()=>{},getErrors:()=>{},setError:()=>{},simulateUsers:()=>{},requestSynchronization:()=>{},mustOpenSynchronizePopUp:()=>{},synchronizeUsers:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},clearContext:()=>{}});class ea extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.userDirectoryService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName(`${Gt}`)}async findAll(){this.apiClientOptions.setResourceName(`${Gt}/settings`);const e=new at(this.apiClientOptions);return(await e.findAll()).body}async update(e){this.apiClientOptions.setResourceName(`${Gt}`);const t=new at(this.apiClientOptions);return(await t.update("settings",e)).body}async delete(){return this.apiClientOptions.setResourceName(`${Gt}`),new at(this.apiClientOptions).delete("settings")}async test(e){return this.apiClientOptions.setResourceName(`${Gt}/settings/test`),new at(this.apiClientOptions).create(e)}async simulate(){this.apiClientOptions.setResourceName(`${Gt}`);const e=new at(this.apiClientOptions);return(await e.get("synchronize/dry-run")).body}async synchronize(){this.apiClientOptions.setResourceName(`${Gt}/synchronize`);const e=new at(this.apiClientOptions);return(await e.create({})).body}async findUsers(){return this.apiClientOptions.setResourceName(`${Gt}/users`),new at(this.apiClientOptions).findAll()}}(e.context.getApiClientOptions()),this.userService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName("users")}async findAll(){return new at(this.apiClientOptions).findAll()}}(e.context.getApiClientOptions())}get defaultState(){return{users:[],errors:this.initErrors(),mustSynchronize:!1,currentSettings:null,settings:new Zt,submitted:!1,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),setAdUserFieldsMappingSettings:this.setAdUserFieldsMappingSettings.bind(this),setOpenLdapGroupFieldsMappingSettings:this.setOpenLdapGroupFieldsMappingSettings.bind(this),hadDisabledSettings:this.hadDisabledSettings.bind(this),findUserDirectorySettings:this.findUserDirectorySettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),setProcessing:this.setProcessing.bind(this),simulateUsers:this.simulateUsers.bind(this),synchronizeUsers:this.synchronizeUsers.bind(this),save:this.save.bind(this),delete:this.delete.bind(this),test:this.test.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),getUsers:this.getUsers.bind(this),requestSynchronization:this.requestSynchronization.bind(this),mustOpenSynchronizePopUp:this.mustOpenSynchronizePopUp.bind(this),clearContext:this.clearContext.bind(this)}}initErrors(){return{hostError:null,portError:null,domainError:null}}async findUserDirectorySettings(){this.setProcessing(!0);const e=await this.userDirectoryService.findAll(),t=await this.userService.findAll(),a=t.body.find((e=>this.props.context.loggedInUser.id===e.id)),n=new Zt(e,a.id);this.setState({users:this.sortUsers(t.body)}),this.setState({currentSettings:n}),this.setState({settings:Object.assign({},n)}),this.setProcessing(!1)}sortUsers(e){const t=e=>`${e.profile.first_name} ${e.profile.last_name}`;return e.sort(((e,a)=>t(e).localeCompare(t(a))))}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}requestSynchronization(e){this.setState({mustSynchronize:e})}mustOpenSynchronizePopUp(){return this.state.mustSynchronize}setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});this.isAdFieldsMappingUserUsernameResetNeeded(e,t)&&(a.fieldsMapping.ad.user.username=Zt.DEFAULT_AD_FIELDS_MAPPING_USER_USERNAME_VALUE,this.setError("fieldsMappingAdUserUsernameError",null)),this.isOpenLdapFieldsMappingGroupUsersResetNeeded(e,t)&&(a.fieldsMapping.openldap.group.users=Zt.DEFAULT_OPENLDAP_FIELDS_MAPPING_GROUP_USERS_VALUE,this.setError("fieldsMappingOpenLdapGroupUsersError",null)),this.setState({settings:a})}isAdFieldsMappingUserUsernameResetNeeded(e,t){return e===Qt&&"openldap"===t}isOpenLdapFieldsMappingGroupUsersResetNeeded(e,t){return e===Qt&&"ad"===t}setAdUserFieldsMappingSettings(e,t){const a=Object.assign({},this.state.settings);a.fieldsMapping.ad.user[e]=t,this.setState({settings:a})}setOpenLdapGroupFieldsMappingSettings(e,t){const a=Object.assign({},this.state.settings);a.fieldsMapping.openldap.group[e]=t,this.setState({settings:a})}hadDisabledSettings(){const e=this.getCurrentSettings();return Boolean(e?.port)&&Boolean(e?.host)&&!e?.userDirectoryToggle}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e})}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new Yt(this.state.settings);await this.userDirectoryService.update(e),await this.findUserDirectorySettings()}async delete(){this.setProcessing(!0),await this.userDirectoryService.delete(),await this.findUserDirectorySettings()}async test(){this.setProcessing(!0);const e=new Yt(this.state.settings),t=await this.userDirectoryService.test(e);return this.setProcessing(!1),t}async simulateUsers(){return this.userDirectoryService.simulate()}async synchronizeUsers(){return this.userDirectoryService.synchronize()}getErrors(){return this.state.errors}setError(e,t){const a=Object.assign({},this.state.errors,{[e]:t});this.setState({errors:a})}getUsers(){return this.state.users}setErrors(e,t=(()=>{})){const a=Object.assign({},this.state.errors,e);return this.setState({errors:a},t)}render(){return n.createElement(Xt.Provider,{value:this.state},this.props.children)}}ea.propTypes={context:o().any,children:o().any};const ta=I(ea);function aa(e){return class extends n.Component{render(){return n.createElement(Xt.Consumer,null,(t=>n.createElement(e,Jt({adminUserDirectoryContext:t},this.props))))}}}class na extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openFullReport:!1,userDirectorySimulateSynchronizeResult:null}}bindEventHandlers(){this.handleFullReportClicked=this.handleFullReportClicked.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSynchronize=this.handleSynchronize.bind(this)}async componentDidMount(){try{const e=await this.props.adminUserDirectoryContext.simulateUsers();this.setState({loading:!1,userDirectorySimulateSynchronizeResult:e})}catch(e){await this.handleError(e)}}async handleError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.handleClose()}handleFullReportClicked(){this.setState({openFullReport:!this.state.openFullReport})}handleClose(){this.props.onClose()}handleSynchronize(){this.props.adminUserDirectoryContext.requestSynchronization(!0),this.handleClose()}isLoading(){return this.state.loading}get users(){return this.state.userDirectorySimulateSynchronizeResult.users}get groups(){return this.state.userDirectorySimulateSynchronizeResult.groups}get usersSuccess(){return this.users.filter((e=>"success"===e.status))}get groupsSuccess(){return this.groups.filter((e=>"success"===e.status))}get usersWarning(){return this.users.filter((e=>"warning"===e.status))}get groupsWarning(){return this.groups.filter((e=>"warning"===e.status))}get usersError(){return this.users.filter((e=>"error"===e.status))}get groupsError(){return this.groups.filter((e=>"error"===e.status))}get usersIgnored(){return this.users.filter((e=>"ignore"===e.status))}get groupsIgnored(){return this.groups.filter((e=>"ignore"===e.status))}hasSuccessResource(){return this.usersSuccess.length>0||this.groupsSuccess.length>0}hasSuccessUserResource(){return this.usersSuccess.length>0}hasSuccessGroupResource(){return this.groupsSuccess.length>0}hasErrorOrIgnoreResource(){return this.usersError.length>0||this.groupsError.length>0||this.usersWarning.length>0||this.groupsWarning.length>0||this.usersIgnored.length>0||this.groupsIgnored.length>0}getFullReport(){let e="";return e=e.concat(this.getUsersFullReport()),e=e.concat(this.getGroupsFullReport()),e}getUsersFullReport(){if(!(this.usersSuccess.length>0||this.usersWarning.length>0||this.usersError.length>0||this.usersIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.props.t("Users")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.usersSuccess.length>0&&(e=e.concat(`\n${this.props.t("Success:")}\n`),this.usersSuccess.map(a)),this.usersWarning.length>0&&(e=e.concat(`\n${this.props.t("Warning:")}\n`),this.usersWarning.map(a)),this.usersError.length>0&&(e=e.concat(`\n${this.props.t("Errors:")}\n`),this.usersError.map(a)),this.usersIgnored.length>0&&(e=e.concat(`\n${this.props.t("Ignored:")}\n`),this.usersIgnored.map(a)),e.concat("\n")}getGroupsFullReport(){if(!(this.groupsSuccess.length>0||this.groupsWarning.length>0||this.groupsError.length>0||this.groupsIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.props.t("Groups")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.groupsSuccess.length>0&&(e=e.concat(`\n${this.props.t("Success:")}\n`),this.groupsSuccess.map(a)),this.groupsWarning.length>0&&(e=e.concat(`\n${this.props.t("Warning:")}\n`),this.groupsWarning.map(a)),this.groupsError.length>0&&(e=e.concat(`\n${this.props.t("Errors:")}\n`),this.groupsError.map(a)),this.groupsIgnored.length>0&&(e=e.concat(`\n${this.props.t("Ignored:")}\n`),this.groupsIgnored.map(a)),e}get translate(){return this.props.t}render(){return n.createElement("div",null,this.isLoading()&&n.createElement(Bt,{onClose:this.handleClose,title:this.props.t("Synchronize simulation")}),!this.isLoading()&&n.createElement(Te,{className:"ldap-simulate-synchronize-dialog",title:this.props.t("Synchronize simulation report"),onClose:this.handleClose,disabled:this.isLoading()},n.createElement("div",{className:"form-content",onSubmit:this.handleFormSubmit},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"The operation was successful."))),n.createElement("p",null),this.hasSuccessResource()&&n.createElement("p",{id:"resources-synchronize"},this.hasSuccessUserResource()&&n.createElement(n.Fragment,null,this.props.t("{{count}} user will be synchronized.",{count:this.usersSuccess.length})),this.hasSuccessUserResource()&&this.hasSuccessGroupResource()&&n.createElement("br",null),this.hasSuccessGroupResource()&&n.createElement(n.Fragment,null,this.props.t("{{count}} group will be synchronized.",{count:this.groupsSuccess.length}))),!this.hasSuccessResource()&&n.createElement("p",{id:"no-resources"}," ",n.createElement(v.c,null,"No resources will be synchronized.")," "),this.hasErrorOrIgnoreResource()&&n.createElement("p",{className:"error inline-error"},n.createElement(v.c,null,"Some resources will not be synchronized and will require your attention, see the full report.")),n.createElement("div",{className:"accordion operation-details "+(this.state.openFullReport?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleFullReportClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"Full report"),this.state.openFullReport&&n.createElement(Re,{name:"caret-down"}),!this.state.openFullReport&&n.createElement(Re,{name:"caret-right"}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.getFullReport()})))),n.createElement("p",null)),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.isLoading(),onClick:this.handleClose}),n.createElement("button",{type:"submit",disabled:this.isLoading(),className:"primary",onClick:this.handleSynchronize},n.createElement(v.c,null,"Synchronize")))))}}na.propTypes={onClose:o().func,dialogContext:o().object,actionFeedbackContext:o().any,adminUserDirectoryContext:o().object,t:o().func};const ia=d(aa((0,k.Z)("common")(na)));class sa extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openFullReport:!1,userDirectorySynchronizeResult:null}}bindEventHandlers(){this.handleFullReportClicked=this.handleFullReportClicked.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSynchronize=this.handleSynchronize.bind(this)}async componentDidMount(){try{const e=await this.props.adminUserDirectoryContext.synchronizeUsers();this.setState({loading:!1,userDirectorySynchronizeResult:e})}catch(e){await this.handleError(e)}}async handleError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.handleClose()}handleFullReportClicked(){this.setState({openFullReport:!this.state.openFullReport})}handleClose(){this.props.onClose()}handleSynchronize(){this.handleClose()}isLoading(){return this.state.loading}get users(){return this.state.userDirectorySynchronizeResult.users}get groups(){return this.state.userDirectorySynchronizeResult.groups}get usersSuccess(){return this.users.filter((e=>"success"===e.status))}get groupsSuccess(){return this.groups.filter((e=>"success"===e.status))}get usersWarning(){return this.users.filter((e=>"warning"===e.status))}get groupsWarning(){return this.groups.filter((e=>"warning"===e.status))}get usersError(){return this.users.filter((e=>"error"===e.status))}get groupsError(){return this.groups.filter((e=>"error"===e.status))}get usersIgnored(){return this.users.filter((e=>"ignore"===e.status))}get groupsIgnored(){return this.groups.filter((e=>"ignore"===e.status))}hasSuccessResource(){return this.usersSuccess.length>0||this.groupsSuccess.length>0}hasSuccessUserResource(){return this.usersSuccess.length>0}hasSuccessGroupResource(){return this.groupsSuccess.length>0}hasErrorOrIgnoreResource(){return this.usersError.length>0||this.groupsError.length>0||this.usersWarning.length>0||this.groupsWarning.length>0||this.usersIgnored.length>0||this.groupsIgnored.length>0}getFullReport(){let e="";return e=e.concat(this.getUsersFullReport()),e=e.concat(this.getGroupsFullReport()),e}getUsersFullReport(){if(!(this.usersSuccess.length>0||this.usersWarning.length>0||this.usersError.length>0||this.usersIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.translate("Users")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.usersSuccess.length>0&&(e=e.concat(`\n${this.translate("Success:")}\n`),this.usersSuccess.map(a)),this.usersWarning.length>0&&(e=e.concat(`\n${this.translate("Warning:")}\n`),this.usersWarning.map(a)),this.usersError.length>0&&(e=e.concat(`\n${this.translate("Errors:")}\n`),this.usersError.map(a)),this.usersIgnored.length>0&&(e=e.concat(`\n${this.translate("Ignored:")}\n`),this.usersIgnored.map(a)),e.concat("\n")}getGroupsFullReport(){if(!(this.groupsSuccess.length>0||this.groupsWarning.length>0||this.groupsError.length>0||this.groupsIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.translate("Groups")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.groupsSuccess.length>0&&(e=e.concat(`\n${this.translate("Success:")}\n`),this.groupsSuccess.map(a)),this.groupsWarning.length>0&&(e=e.concat(`\n${this.translate("Warning:")}\n`),this.groupsWarning.map(a)),this.groupsError.length>0&&(e=e.concat(`\n${this.translate("Errors:")}\n`),this.groupsError.map(a)),this.groupsIgnored.length>0&&(e=e.concat(`\n${this.translate("Ignored:")}\n`),this.groupsIgnored.map(a)),e}get translate(){return this.props.t}render(){return n.createElement("div",null,this.isLoading()&&n.createElement(Bt,{onClose:this.handleClose,title:this.translate("Synchronize")}),!this.isLoading()&&n.createElement(Te,{className:"ldap-simulate-synchronize-dialog",title:this.translate("Synchronize report"),onClose:this.handleClose,disabled:this.isLoading()},n.createElement("div",{className:"form-content",onSubmit:this.handleFormSubmit},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"The operation was successful."))),n.createElement("p",null),this.hasSuccessResource()&&n.createElement("p",{id:"resources-synchronize"},this.hasSuccessUserResource()&&n.createElement(n.Fragment,null,this.translate("{{count}} user has been synchronized.",{count:this.usersSuccess.length})),this.hasSuccessUserResource()&&this.hasSuccessGroupResource()&&n.createElement("br",null),this.hasSuccessGroupResource()&&n.createElement(n.Fragment,null,this.translate("{{count}} group has been synchronized.",{count:this.groupsSuccess.length}))),!this.hasSuccessResource()&&n.createElement("p",{id:"no-resources"}," ",n.createElement(v.c,null,"No resources have been synchronized.")," "),this.hasErrorOrIgnoreResource()&&n.createElement("p",{className:"error inline-error"},n.createElement(v.c,null,"Some resources will not be synchronized and will require your attention, see the full report.")),n.createElement("div",{className:"accordion operation-details "+(this.state.openFullReport?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleFullReportClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"Full report"),this.state.openFullReport&&n.createElement(Re,{name:"caret-down"}),!this.state.openFullReport&&n.createElement(Re,{name:"caret-right"}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.getFullReport()})))),n.createElement("p",null)),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{disabled:this.isLoading(),className:"primary",type:"button",onClick:this.handleClose},n.createElement(v.c,null,"Ok")))))}}sa.propTypes={onClose:o().func,actionFeedbackContext:o().any,adminUserDirectoryContext:o().object,t:o().func};const oa=d(aa((0,k.Z)("common")(sa)));class ra{constructor(e,t){this.context=e,this.translate=t}static getInstance(e,t){return this.instance||(this.instance=new ra(e,t)),this.instance}static killInstance(){this.instance=null}async validate(){const e={...this.validateHostInput(),...this.validatePortInput(),...this.validateDomainInput(),...this.validateFieldsMappingAdUserUsernameInput(),...this.validateOpenLdapFieldsMappingGroupUsersInput()};return await this.context.setErrors(e),0===Object.values(e).filter((e=>e)).length}validateHostInput(){const e=this.context.getSettings(),t=e.host?.trim(),a=t.length?null:this.translate("A host is required.");return this.context.setError("hostError",a),{hostError:a}}validatePortInput(){let e=null;const t=this.context.getSettings().port.trim();return t.length?Ct()("^[0-9]+").test(t)||(e=this.translate("Only numeric characters allowed.")):e=this.translate("A port is required."),this.context.setError("portError",e),{portError:e}}validateFieldsMappingAdUserUsernameInput(){const e=this.context.getSettings().fieldsMapping.ad.user.username;let t=null;return e&&""!==e.trim()?e.length>128&&(t=this.translate("The user username field mapping cannot exceed 128 characters.")):t=this.translate("The user username field mapping cannot be empty"),this.context.setError("fieldsMappingAdUserUsernameError",t),{fieldsMappingAdUserUsernameError:t}}validateOpenLdapFieldsMappingGroupUsersInput(){const e=this.context.getSettings().fieldsMapping.openldap.group.users;let t=null;return e&&""!==e.trim()?e.length>128&&(t=this.translate("The group users field mapping cannot exceed 128 characters.")):t=this.translate("The group users field mapping cannot be empty"),this.context.setError("fieldsMappingOpenLdapGroupUsersError",t),{fieldsMappingOpenLdapGroupUsersError:t}}validateDomainInput(){let e=null;return this.context.getSettings().domain.trim().length||(e=this.translate("A domain name is required.")),this.context.setError("domainError",e),{domainError:e}}}const la=ra;class ca extends n.Component{hasChildren(){return this.props.node.group.groups.length>0}displayUserName(e){return`${e.profile.first_name} ${e.profile.last_name}`}get node(){return this.props.node}render(){return n.createElement("ul",{key:this.node.id},"group"===this.node.type&&n.createElement("li",{className:"group"},this.node.group.name,n.createElement("ul",null,Object.values(this.node.group.users).map((e=>n.createElement("li",{className:"user",key:e.id},e.errors&&n.createElement("span",{className:"error"},e.directory_name),!e.errors&&n.createElement("span",null,this.displayUserName(e.user)," ",n.createElement("em",null,"(",e.user.username,")"))))),Object.values(this.node.group.groups).map((e=>n.createElement(ca,{key:`tree-${e.id}`,node:e}))))),"user"===this.node.type&&n.createElement("li",{className:"user"},this.node.errors&&n.createElement("span",{className:"error"},this.node.directory_name),!this.node.errors&&n.createElement("span",null,this.displayUserName(this.node.user)," ",n.createElement("em",null,"(",this.node.user.username,")"))))}}ca.propTypes={node:o().object};const ma=ca;class da extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openListGroupsUsers:!1,openStructureGroupsUsers:!1,openErrors:!1}}bindEventHandlers(){this.handleListGroupsUsersClicked=this.handleListGroupsUsersClicked.bind(this),this.handleStructureGroupsUsersClicked=this.handleStructureGroupsUsersClicked.bind(this),this.handleErrorsClicked=this.handleErrorsClicked.bind(this),this.handleClose=this.handleClose.bind(this)}componentDidMount(){this.setState({loading:!1})}handleListGroupsUsersClicked(){this.setState({openListGroupsUsers:!this.state.openListGroupsUsers})}handleStructureGroupsUsersClicked(){this.setState({openStructureGroupsUsers:!this.state.openStructureGroupsUsers})}handleErrorsClicked(){this.setState({openErrors:!this.state.openErrors})}handleClose(){this.props.onClose(),this.props.context.setContext({displayTestUserDirectoryDialogProps:null})}hasAllInputDisabled(){return this.state.loading}displayUserName(e){return`${e.profile.first_name} ${e.profile.last_name}`}get users(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.users}get groups(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.groups}get tree(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.tree}get errors(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.errors}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"ldap-test-settings-dialog",title:this.translate("Test settings report"),onClose:this.handleClose,disabled:this.hasAllInputDisabled()},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"A connection could be established. Well done!"))),n.createElement("p",null),n.createElement("div",{className:"ldap-test-settings-report"},n.createElement("p",null,this.users.length>0&&n.createElement(n.Fragment,null,this.translate("{{count}} user has been found.",{count:this.users.length})),this.users.length>0&&this.groups.length>0&&n.createElement("br",null),this.groups.length>0&&n.createElement(n.Fragment,null,this.translate("{{count}} group has been found.",{count:this.groups.length}))),n.createElement("div",{className:"accordion directory-list "+(this.state.openListGroupsUsers?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleListGroupsUsersClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See list"),this.state.openListGroupsUsers&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openListGroupsUsers&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("table",null,n.createElement("tbody",null,n.createElement("tr",null,n.createElement("td",null,n.createElement(v.c,null,"Groups")),n.createElement("td",null,n.createElement(v.c,null,"Users"))),n.createElement("tr",null,n.createElement("td",null,this.groups.map((e=>e.errors&&n.createElement("div",{key:e.id},n.createElement("span",{className:"error"},e.directory_name))||n.createElement("div",{key:e.id},e.group.name)))),n.createElement("td",null,this.users.map((e=>e.errors&&n.createElement("div",{key:e.id},n.createElement("span",{className:"error"},e.directory_name))||n.createElement("div",{key:e.id},this.displayUserName(e.user)," ",n.createElement("em",null,"(",e.user.username,")")))))))))),n.createElement("div",{className:"accordion accordion-directory-structure "+(this.state.openStructureGroupsUsers?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleStructureGroupsUsersClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See structure"),this.state.openStructureGroupsUsers&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openStructureGroupsUsers&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"directory-structure"},n.createElement("ul",null,n.createElement("li",{className:"group"},"Root",Object.values(this.tree).map((e=>n.createElement(ma,{key:`tree-${e.id}`,node:e})))))))),this.errors.length>0&&n.createElement("div",null,n.createElement("p",{className:"directory-errors error"},this.translate("{{count}} entry had errors and will be ignored during synchronization.",{count:this.errors.length})),n.createElement("div",{className:"accordion accordion-directory-errors "+(this.state.openErrors?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleErrorsClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See error details"),this.state.openErrors&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openErrors&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"directory-errors"},n.createElement("textarea",{value:JSON.stringify(this.errors,null," "),readOnly:!0}))))))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"button",disabled:this.hasAllInputDisabled(),className:"primary",onClick:this.handleClose},n.createElement(v.c,null,"OK"))))}}da.propTypes={context:o().any,onClose:o().func,t:o().func};const ha=I((0,k.Z)("common")(da));class pa extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.state=this.defaultState,this.userDirectoryFormService=la.getInstance(this.props.adminUserDirectoryContext,this.props.t)}componentDidUpdate(){this.props.adminUserDirectoryContext.mustOpenSynchronizePopUp()&&(this.props.adminUserDirectoryContext.requestSynchronization(!1),this.handleSynchronizeClick())}async handleSaveClick(){this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle?await this.props.adminUserDirectoryContext.save():await this.props.adminUserDirectoryContext.delete(),this.handleSaveSuccess()}async handleFormSubmit(e){try{if(await this.userDirectoryFormService.validate())switch(e){case"save":await this.handleSaveClick();break;case"test":await this.handleTestClick()}}catch(e){this.handleSubmitError(e)}finally{this.props.adminUserDirectoryContext.setSubmitted(!0),this.props.adminUserDirectoryContext.setProcessing(!1)}}async handleTestClick(){const e={userDirectoryTestResult:(await this.props.adminUserDirectoryContext.test()).body};this.props.context.setContext({displayTestUserDirectoryDialogProps:e}),this.props.dialogContext.open(ha)}isSaveEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.hasSettingsChanges()}isTestEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle}isSynchronizeEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle&&this.props.adminUserDirectoryContext.getCurrentSettings().userDirectoryToggle}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleTestClick=this.handleTestClick.bind(this),this.handleSimulateSynchronizeClick=this.handleSimulateSynchronizeClick.bind(this),this.handleSynchronizeClick=this.handleSynchronizeClick.bind(this)}handleSimulateSynchronizeClick(){this.props.dialogContext.open(ia)}handleSynchronizeClick(){this.props.dialogContext.open(oa)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The user directory settings for the organization were updated."))}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:()=>this.handleFormSubmit("save")},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isTestEnabled(),onClick:()=>this.handleFormSubmit("test")},n.createElement(Re,{name:"plug"}),n.createElement("span",null,n.createElement(v.c,null,"Test settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSynchronizeEnabled(),onClick:this.handleSimulateSynchronizeClick},n.createElement(Re,{name:"magic-wand"}),n.createElement("span",null,n.createElement(v.c,null,"Simulate synchronize")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSynchronizeEnabled(),onClick:this.handleSynchronizeClick},n.createElement(Re,{name:"refresh"}),n.createElement("span",null,n.createElement(v.c,null,"Synchronize")))))))}}pa.propTypes={context:o().object,dialogContext:o().object,adminUserDirectoryContext:o().object,actionFeedbackContext:o().object,t:o().func};const ua=I(d(g(aa((0,k.Z)("common")(pa)))));class ga extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.userDirectoryFormService=la.getInstance(this.props.adminUserDirectoryContext,this.props.t),this.bindCallbacks()}get defaultState(){return{hasFieldFocus:!1}}componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(ua),this.props.adminUserDirectoryContext.findUserDirectorySettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminUserDirectoryContext.clearContext(),la.killInstance(),this.userDirectoryFormService=null}bindCallbacks(){this.handleCredentialTitleClicked=this.handleCredentialTitleClicked.bind(this),this.handleDirectoryConfigurationTitleClicked=this.handleDirectoryConfigurationTitleClicked.bind(this),this.handleSynchronizationOptionsTitleClicked=this.handleSynchronizationOptionsTitleClicked.bind(this),this.handleFieldFocus=this.handleFieldFocus.bind(this),this.handleFieldBlur=this.handleFieldBlur.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleAdUserFieldsMappingInputChange=this.handleAdUserFieldsMappingInputChange.bind(this),this.handleOpenLdapGroupFieldsMappingInputChange=this.handleOpenLdapGroupFieldsMappingInputChange.bind(this)}handleCredentialTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openCredentials",!e.openCredentials)}handleDirectoryConfigurationTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openDirectoryConfiguration",!e.openDirectoryConfiguration)}handleSynchronizationOptionsTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openSynchronizationOptions",!e.openSynchronizationOptions)}handleInputChange(e){const t=e.target,a="checkbox"===t.type?t.checked:t.value,n=t.name;this.props.adminUserDirectoryContext.setSettings(n,a)}handleAdUserFieldsMappingInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminUserDirectoryContext.setAdUserFieldsMappingSettings(n,a)}handleOpenLdapGroupFieldsMappingInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminUserDirectoryContext.setOpenLdapGroupFieldsMappingSettings(n,a)}handleFieldFocus(){this.setState({hasFieldFocus:!0})}handleFieldBlur(){this.setState({hasFieldFocus:!1})}hasAllInputDisabled(){const e=this.props.adminUserDirectoryContext.getSettings();return e.processing||e.loading}isUserDirectoryChecked(){return this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle}isActiveDirectoryChecked(){return"ad"===this.props.adminUserDirectoryContext.getSettings().directoryType}isOpenLdapChecked(){return"openldap"===this.props.adminUserDirectoryContext.getSettings().directoryType}isUseEmailPrefixChecked(){return this.props.adminUserDirectoryContext.getSettings().useEmailPrefix}getUsersAllowedToBeDefaultAdmin(){const e=this.props.adminUserDirectoryContext.getUsers();if(null!==e){const t=e.filter((e=>!0===e.active&&"admin"===e.role.name));return t&&t.map((e=>({value:e.id,label:this.displayUser(e)})))}return[]}getUsersAllowedToBeDefaultGroupAdmin(){const e=this.props.adminUserDirectoryContext.getUsers();if(null!==e){const t=e.filter((e=>!0===e.active));return t&&t.map((e=>({value:e.id,label:this.displayUser(e)})))}return[]}displayUser(e){return`${e.profile.first_name} ${e.profile.last_name} (${e.username})`}shouldShowSourceWarningMessage(){const e=this.props.adminUserDirectoryContext;return"db"!==e?.getCurrentSettings()?.source&&e?.hasSettingsChanges()}get settingsSource(){return this.props.adminUserDirectoryContext?.getCurrentSettings()?.source}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}get connectionType(){return[{value:"plain",label:"ldap://"},{value:"ssl",label:"ldaps:// (ssl)"},{value:"tls",label:"ldaps:// (tls)"}]}get supportedAuthenticationMethod(){return[{value:"basic",label:this.props.t("Basic")},{value:"sasl",label:"SASL (EE)"}]}render(){const e=this.props.adminUserDirectoryContext.getSettings(),t=this.props.adminUserDirectoryContext.getErrors(),a=this.props.adminUserDirectoryContext.isSubmitted(),i=this.props.adminUserDirectoryContext.hadDisabledSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"ldap-settings col7 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userDirectoryToggle",onChange:this.handleInputChange,checked:e.userDirectoryToggle,disabled:this.hasAllInputDisabled(),id:"userDirectoryToggle"}),n.createElement("label",{htmlFor:"userDirectoryToggle"},n.createElement(v.c,null,"Users Directory")))),!this.isUserDirectoryChecked()&&n.createElement(n.Fragment,null,i&&n.createElement("div",null,n.createElement("div",{className:"message warning"},n.createElement(v.c,null,"The configuration has been disabled as it needs to be checked to make it correct before using it."))),!i&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"No Users Directory is configured. Enable it to synchronise your users and groups with passbolt."))),this.isUserDirectoryChecked()&&n.createElement(n.Fragment,null,this.shouldShowSourceWarningMessage()&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning:")," These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.")),n.createElement("p",{className:"description"},n.createElement(v.c,null,"A Users Directory is configured. The users and groups of passbolt will synchronize with it.")),n.createElement("div",{className:"accordion section-general "+(e.openCredentials?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleCredentialTitleClicked},e.openCredentials&&n.createElement(Re,{name:"caret-down"}),!e.openCredentials&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Credentials"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"radiolist required"},n.createElement("label",null,n.createElement(v.c,null,"Directory type")),n.createElement("div",{className:"input radio ad openldap form-element "},n.createElement("div",{className:"input radio"},n.createElement("input",{type:"radio",value:"ad",onChange:this.handleInputChange,name:"directoryType",checked:this.isActiveDirectoryChecked(),id:"directoryTypeAd",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"directoryTypeAd"},n.createElement(v.c,null,"Active Directory"))),n.createElement("div",{className:"input radio"},n.createElement("input",{type:"radio",value:"openldap",onChange:this.handleInputChange,name:"directoryType",checked:this.isOpenLdapChecked(),id:"directoryTypeOpenLdap",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"directoryTypeOpenLdap"},n.createElement(v.c,null,"Open Ldap"))))),n.createElement("div",{className:"input text required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Server url")),n.createElement("div",{className:`input text singleline connection_info ad openldap ${this.hasAllInputDisabled()?"disabled":""} ${this.state.hasFieldFocus?"no-focus":""}`},n.createElement("input",{id:"server-input",type:"text","aria-required":!0,className:"required host ad openldap form-element",name:"host",value:e.host,onChange:this.handleInputChange,placeholder:this.props.t("host"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"protocol",onBlur:this.handleFieldBlur,onFocus:this.handleFieldFocus},n.createElement(Ft,{className:"inline",name:"connectionType",items:this.connectionType,value:e.connectionType,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()})),n.createElement("div",{className:"port ad openldap"},n.createElement("input",{id:"port-input",type:"number","aria-required":!0,className:"required in-field form-element",name:"port",value:e.port,onChange:this.handleInputChange,onBlur:this.handleFieldBlur,onFocus:this.handleFieldFocus,disabled:this.hasAllInputDisabled()}))),t.hostError&&a&&n.createElement("div",{id:"server-input-feedback",className:"error-message"},t.hostError),t.portError&&a&&n.createElement("div",{id:"port-input-feedback",className:"error-message"},t.portError)),n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Authentication method")),n.createElement(Ft,{items:this.supportedAuthenticationMethod,id:"authentication-type-select",name:"authenticationType",value:e.authenticationType,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()})),"basic"===e.authenticationType&&n.createElement("div",{className:"singleline clearfix"},n.createElement("div",{className:"input text first-field ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Username")),n.createElement("input",{id:"username-input",type:"text",className:"fluid form-element",name:"username",value:e.username,onChange:this.handleInputChange,placeholder:this.props.t("Username"),disabled:this.hasAllInputDisabled()})),n.createElement("div",{className:"input text last-field ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Password")),n.createElement("input",{id:"password-input",className:"fluid form-element",name:"password",value:e.password,onChange:this.handleInputChange,placeholder:this.props.t("Password"),type:"password",disabled:this.hasAllInputDisabled()}))),n.createElement("div",{className:"input text required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Domain")),n.createElement("input",{id:"domain-name-input","aria-required":!0,type:"text",name:"domain",value:e.domain,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:"domain.ext",disabled:this.hasAllInputDisabled()}),t.domainError&&a&&n.createElement("div",{id:"domain-name-input-feedback",className:"error-message"},t.domainError)),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Base DN")),n.createElement("input",{id:"base-dn-input",type:"text",name:"baseDn",value:e.baseDn,onChange:this.handleInputChange,className:"fluid form-element",placeholder:"OU=OrgUsers,DC=mydomain,DC=local",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The base DN (default naming context) for the domain.")," ",n.createElement(v.c,null,"If this is empty then it will be queried from the RootDSE."))))),n.createElement("div",{className:"accordion section-directory-configuration "+(e.openDirectoryConfiguration?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDirectoryConfigurationTitleClicked},e.openDirectoryConfiguration&&n.createElement(Re,{name:"caret-down"}),!e.openDirectoryConfiguration&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Directory configuration"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group path")),n.createElement("input",{id:"group-path-input",type:"text","aria-required":!0,name:"groupPath",value:e.groupPath,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Group path"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Group path is used in addition to the base DN while searching groups.")," ",n.createElement(v.c,null,"Leave empty if users and groups are in the same DN."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User path")),n.createElement("input",{id:"user-path-input",type:"text","aria-required":!0,name:"userPath",value:e.userPath,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("User path"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"User path is used in addition to base DN while searching users."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group custom filters")),n.createElement("input",{id:"group-custom-filters-input",type:"text",name:"groupCustomFilters",value:e.groupCustomFilters,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Group custom filters"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Group custom filters are used in addition to the base DN and group path while searching groups.")," ",n.createElement(v.c,null,"Leave empty if no additional filter is required."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User custom filters")),n.createElement("input",{id:"user-custom-filters-input",type:"text",name:"userCustomFilters",value:e.userCustomFilters,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("User custom filters"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"User custom filters are used in addition to the base DN and user path while searching users.")," ",n.createElement(v.c,null,"Leave empty if no additional filter is required."))),this.isOpenLdapChecked()&&n.createElement("div",null,n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group object class")),n.createElement("input",{id:"group-object-class-input",type:"text","aria-required":!0,name:"groupObjectClass",value:e.groupObjectClass,onChange:this.handleInputChange,className:"required fluid",placeholder:"GroupObjectClass",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"For Openldap only. Defines which group object to use.")," (",n.createElement(v.c,null,"Default"),": groupOfUniqueNames)")),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User object class")),n.createElement("input",{id:"user-object-class-input",type:"text","aria-required":!0,name:"userObjectClass",value:e.userObjectClass,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:"UserObjectClass",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"For Openldap only. Defines which user object to use.")," (",n.createElement(v.c,null,"Default"),": inetOrgPerson)")),n.createElement("div",{className:"input text openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Use email prefix / suffix?")),n.createElement("div",{className:"input toggle-switch openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"useEmailPrefix",value:e.useEmailPrefix,onChange:this.handleInputChange,id:"use-email-prefix-suffix-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"use-email-prefix-suffix-toggle-button"},n.createElement(v.c,null,"Build email based on a prefix and suffix?"))),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Use this option when user entries do not include an email address by default"))),this.isUseEmailPrefixChecked()&&n.createElement("div",{className:"singleline clearfix",id:"use-email-prefix-suffix-options"},n.createElement("div",{className:"input text first-field openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Email prefix")),n.createElement("input",{id:"email-prefix-input",type:"text","aria-required":!0,name:"emailPrefix",checked:e.emailPrefix,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Username"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The attribute you would like to use for the first part of the email (usually username)."))),n.createElement("div",{className:"input text last-field openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Email suffix")),n.createElement("input",{id:"email-suffix-input",type:"text","aria-required":!0,name:"emailSuffix",value:e.emailSuffix,onChange:this.handleInputChange,className:"required form-element",placeholder:this.props.t("@your-domain.com"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The domain name part of the email (@your-domain-name).")))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group users field mapping")),n.createElement("input",{id:"field-mapping-openldap-group-users-input",type:"text","aria-required":!0,name:"users",value:e.fieldsMapping.openldap.group.users,onChange:this.handleOpenLdapGroupFieldsMappingInputChange,className:"fluid form-element",placeholder:this.props.t("Group users field mapping"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Directory group's users field to map to Passbolt group's field.")),t.fieldsMappingOpenLdapGroupUsersError&&a&&n.createElement("div",{id:"field-mapping-openldap-group-users-input-feedback",className:"error-message"},t.fieldsMappingOpenLdapGroupUsersError))),this.isActiveDirectoryChecked()&&n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User username field mapping")),n.createElement("input",{id:"field-mapping-ad-user-username-input",type:"text","aria-required":!0,name:"username",value:e.fieldsMapping.ad.user.username,onChange:this.handleAdUserFieldsMappingInputChange,className:"fluid form-element",placeholder:this.props.t("User username field mapping"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Directory user's username field to map to Passbolt user's username field.")),t.fieldsMappingAdUserUsernameError&&a&&n.createElement("div",{id:"field-mapping-ad-user-username-input-feedback",className:"error-message"},t.fieldsMappingAdUserUsernameError)))),n.createElement("div",{className:"accordion section-sync-options "+(e.openSynchronizationOptions?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleSynchronizationOptionsTitleClicked},e.openSynchronizationOptions&&n.createElement(Re,{name:"caret-down"}),!e.openSynchronizationOptions&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Synchronization options"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Default admin")),n.createElement(Ft,{items:this.getUsersAllowedToBeDefaultAdmin(),id:"default-user-select",name:"defaultAdmin",value:e.defaultAdmin,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),search:!0}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The default admin user is the user that will perform the operations for the the directory."))),n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Default group admin")),n.createElement(Ft,{items:this.getUsersAllowedToBeDefaultGroupAdmin(),id:"default-group-admin-user-select",name:"defaultGroupAdmin",value:e.defaultGroupAdmin,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),search:!0}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The default group manager is the user that will be the group manager of newly created groups."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Groups parent group")),n.createElement("input",{id:"groups-parent-group-input",type:"text",name:"groupsParentGroup",value:e.groupsParentGroup,onChange:this.handleInputChange,className:"fluid form-element",placeholder:this.props.t("Groups parent group"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Synchronize only the groups which are members of this group."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Users parent group")),n.createElement("input",{id:"users-parent-group-input",type:"text",name:"usersParentGroup",value:e.usersParentGroup,onChange:this.handleInputChange,className:"fluid form-element",placeholder:this.props.t("Users parent group"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Synchronize only the users which are members of this group."))),this.isActiveDirectoryChecked()&&n.createElement("div",{className:"input text clearfix ad "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Enabled users only")),n.createElement("div",{className:"input toggle-switch ad form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"enabledUsersOnly",checked:e.enabledUsersOnly,onChange:this.handleInputChange,id:"enabled-users-only-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"enabled-users-only-toggle-button"},n.createElement(v.c,null,"Only synchronize enabled users (AD)")))),n.createElement("div",{className:"input text clearfix ad openldap"},n.createElement("label",null,n.createElement(v.c,null,"Sync operations")),n.createElement("div",{className:"col6"},n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"createUsers",checked:e.createUsers,onChange:this.handleInputChange,id:"sync-users-create-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-create-toggle-button"},n.createElement(v.c,null,"Create users"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"deleteUsers",checked:e.deleteUsers,onChange:this.handleInputChange,id:"sync-users-delete-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-delete-toggle-button"},n.createElement(v.c,null,"Delete users"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"updateUsers",checked:e.updateUsers,onChange:this.handleInputChange,id:"sync-users-update-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-update-toggle-button"},n.createElement(v.c,null,"Update users")))),n.createElement("div",{className:"col6 last"},n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"createGroups",checked:e.createGroups,onChange:this.handleInputChange,id:"sync-groups-create-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-create-toggle-button"},n.createElement(v.c,null,"Create groups"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"deleteGroups",checked:e.deleteGroups,onChange:this.handleInputChange,id:"sync-groups-delete-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-delete-toggle-button"},n.createElement(v.c,null,"Delete groups"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"updateGroups",checked:e.updateGroups,onChange:this.handleInputChange,id:"sync-groups-update-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-update-toggle-button"},n.createElement(v.c,null,"Update groups"))))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"user-directory-settings-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need help?")),n.createElement("p",null,n.createElement(v.c,null,"Check out our ldap configuration guide.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/ldap",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}ga.propTypes={adminUserDirectoryContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const ba=aa(O((0,k.Z)("common")(ga))),fa=class{constructor(e={}){this.hasDatabaseSetting="sources_database"in e&&e.sources_database,this.hasFileConfigSetting="sources_file"in e&&e.sources_file,this.passwordCreate=!("send_password_create"in e)||e.send_password_create,this.passwordShare=!("send_password_share"in e)||e.send_password_share,this.passwordUpdate=!("send_password_update"in e)||e.send_password_update,this.passwordDelete=!("send_password_delete"in e)||e.send_password_delete,this.folderCreate=!("send_folder_create"in e)||e.send_folder_create,this.folderUpdate=!("send_folder_update"in e)||e.send_folder_update,this.folderDelete=!("send_folder_delete"in e)||e.send_folder_delete,this.folderShare=!("send_folder_share"in e)||e.send_folder_share,this.commentAdd=!("send_comment_add"in e)||e.send_comment_add,this.groupDelete=!("send_group_delete"in e)||e.send_group_delete,this.groupUserAdd=!("send_group_user_add"in e)||e.send_group_user_add,this.groupUserDelete=!("send_group_user_delete"in e)||e.send_group_user_delete,this.groupUserUpdate=!("send_group_user_update"in e)||e.send_group_user_update,this.groupManagerUpdate=!("send_group_manager_update"in e)||e.send_group_manager_update,this.groupManagerRequestAddUser=!("send_group_manager_requestAddUser"in e)||e.send_group_manager_requestAddUser,this.userCreate=!("send_user_create"in e)||e.send_user_create,this.userRecover=!("send_user_recover"in e)||e.send_user_recover,this.userRecoverComplete=!("send_user_recoverComplete"in e)||e.send_user_recoverComplete,this.userRecoverAbortAdmin=!("send_admin_user_recover_abort"in e)||e.send_admin_user_recover_abort,this.userRecoverCompleteAdmin=!("send_admin_user_recover_complete"in e)||e.send_admin_user_recover_complete,this.userSetupCompleteAdmin=!("send_admin_user_setup_completed"in e)||e.send_admin_user_setup_completed,this.showDescription=!("show_description"in e)||e.show_description,this.showSecret=!("show_secret"in e)||e.show_secret,this.showUri=!("show_uri"in e)||e.show_uri,this.showUsername=!("show_username"in e)||e.show_username,this.showComment=!("show_comment"in e)||e.show_comment,this.accountRecoveryRequestUser=!("send_accountRecovery_request_user"in e)||e.send_accountRecovery_request_user,this.accountRecoveryRequestAdmin=!("send_accountRecovery_request_admin"in e)||e.send_accountRecovery_request_admin,this.accountRecoveryRequestGuessing=!("send_accountRecovery_request_guessing"in e)||e.send_accountRecovery_request_guessing,this.accountRecoveryRequestUserApproved=!("send_accountRecovery_response_user_approved"in e)||e.send_accountRecovery_response_user_approved,this.accountRecoveryRequestUserRejected=!("send_accountRecovery_response_user_rejected"in e)||e.send_accountRecovery_response_user_rejected,this.accountRecoveryRequestCreatedAmin=!("send_accountRecovery_response_created_admin"in e)||e.send_accountRecovery_response_created_admin,this.accountRecoveryRequestCreatedAllAdmins=!("send_accountRecovery_response_created_allAdmins"in e)||e.send_accountRecovery_response_created_allAdmins,this.accountRecoveryRequestPolicyUpdate=!("send_accountRecovery_policy_update"in e)||e.send_accountRecovery_policy_update,this.passwordExpiryExpiredUser=!("send_password_expire"in e)||e.send_password_expire}};function ya(){return ya=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findEmailNotificationSettings:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{}});class ka extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.emailNotificationService=new class{constructor(e){e.setResourceName("settings/emails/notifications"),this.apiClient=new at(e)}async find(){return(await this.apiClient.findAll()).body}async save(e){return(await this.apiClient.create(e)).body}}(t)}get defaultState(){return{currentSettings:null,settings:new fa,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findEmailNotificationSettings:this.findEmailNotificationSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}async findEmailNotificationSettings(){this.setProcessing(!0);const e=await this.emailNotificationService.find(),t=new fa(e);this.setState({currentSettings:t}),this.setState({settings:Object.assign({},t)}),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});this.setState({settings:a})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new class{constructor(e={}){this.sources_database="hasDatabaseSetting"in e&&e.hasDatabaseSetting,this.sources_file="hasFileConfigSetting"in e&&e.hasFileConfigSetting,this.send_password_create=!("passwordCreate"in e)||e.passwordCreate,this.send_password_share=!("passwordShare"in e)||e.passwordShare,this.send_password_update=!("passwordUpdate"in e)||e.passwordUpdate,this.send_password_delete=!("passwordDelete"in e)||e.passwordDelete,this.send_folder_create=!("folderCreate"in e)||e.folderCreate,this.send_folder_update=!("folderUpdate"in e)||e.folderUpdate,this.send_folder_delete=!("folderDelete"in e)||e.folderDelete,this.send_folder_share=!("folderShare"in e)||e.folderShare,this.send_comment_add=!("commentAdd"in e)||e.commentAdd,this.send_group_delete=!("groupDelete"in e)||e.groupDelete,this.send_group_user_add=!("groupUserAdd"in e)||e.groupUserAdd,this.send_group_user_delete=!("groupUserDelete"in e)||e.groupUserDelete,this.send_group_user_update=!("groupUserUpdate"in e)||e.groupUserUpdate,this.send_group_manager_update=!("groupManagerUpdate"in e)||e.groupManagerUpdate,this.send_group_manager_requestAddUser=!("groupManagerRequestAddUser"in e)||e.groupManagerRequestAddUser,this.send_user_create=!("userCreate"in e)||e.userCreate,this.send_user_recover=!("userRecover"in e)||e.userRecover,this.send_user_recoverComplete=!("userRecoverComplete"in e)||e.userRecoverComplete,this.send_admin_user_setup_completed=!("userSetupCompleteAdmin"in e)||e.userSetupCompleteAdmin,this.send_admin_user_recover_abort=!("userRecoverAbortAdmin"in e)||e.userRecoverAbortAdmin,this.send_admin_user_recover_complete=!("userRecoverCompleteAdmin"in e)||e.userRecoverCompleteAdmin,this.send_accountRecovery_request_user=!("accountRecoveryRequestUser"in e)||e.accountRecoveryRequestUser,this.send_accountRecovery_request_admin=!("accountRecoveryRequestAdmin"in e)||e.accountRecoveryRequestAdmin,this.send_accountRecovery_request_guessing=!("accountRecoveryRequestGuessing"in e)||e.accountRecoveryRequestGuessing,this.send_accountRecovery_response_user_approved=!("accountRecoveryRequestUserApproved"in e)||e.accountRecoveryRequestUserApproved,this.send_accountRecovery_response_user_rejected=!("accountRecoveryRequestUserRejected"in e)||e.accountRecoveryRequestUserRejected,this.send_accountRecovery_response_created_admin=!("accountRecoveryRequestCreatedAmin"in e)||e.accountRecoveryRequestCreatedAmin,this.send_accountRecovery_response_created_allAdmins=!("accountRecoveryRequestCreatedAllAdmins"in e)||e.accountRecoveryRequestCreatedAllAdmins,this.send_accountRecovery_policy_update=!("accountRecoveryRequestPolicyUpdate"in e)||e.accountRecoveryRequestPolicyUpdate,this.show_description=!("showDescription"in e)||e.showDescription,this.show_secret=!("showSecret"in e)||e.showSecret,this.show_uri=!("showUri"in e)||e.showUri,this.show_username=!("showUsername"in e)||e.showUsername,this.show_comment=!("showComment"in e)||e.showComment,this.send_password_expire=!("passwordExpiryExpiredUser"in e)||e.passwordExpiryExpiredUser}}(this.state.settings);await this.emailNotificationService.save(e),await this.findEmailNotificationSettings()}render(){return n.createElement(va.Provider,{value:this.state},this.props.children)}}ka.propTypes={context:o().any,children:o().any};const Ea=I(ka);function wa(e){return class extends n.Component{render(){return n.createElement(va.Consumer,null,(t=>n.createElement(e,ya({adminEmailNotificationContext:t},this.props))))}}}class Ca extends n.Component{constructor(e){super(e),this.bindCallbacks()}async handleSaveClick(){try{await this.props.adminEmailNotificationContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminEmailNotificationContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminEmailNotificationContext.isProcessing()&&this.props.adminEmailNotificationContext.hasSettingsChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The email notification settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Ca.propTypes={adminEmailNotificationContext:o().object,actionFeedbackContext:o().object,t:o().func};const Sa=wa(d((0,k.Z)("common")(Ca)));class xa extends n.Component{constructor(e){super(e),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Sa),this.props.adminEmailNotificationContext.findEmailNotificationSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminEmailNotificationContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){const t=e.target.checked,a=e.target.name;this.props.adminEmailNotificationContext.setSettings(a,t)}hasAllInputDisabled(){return this.props.adminEmailNotificationContext.isProcessing()}hasDatabaseSetting(){return this.props.adminEmailNotificationContext.getSettings().hasDatabaseSetting}hasFileConfigSetting(){return this.props.adminEmailNotificationContext.getSettings().hasFileConfigSetting}canUseFolders(){return this.props.context.siteSettings.canIUse("folders")}canUseAccountRecovery(){return this.props.context.siteSettings.canIUse("accountRecovery")}canUsePasswordExpiry(){return this.props.context.siteSettings.canIUse("passwordExpiry")||this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}canUsePasswordExpiryAdvancedSettings(){return this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}get settingsSource(){return this.hasDatabaseSetting()?"db":this.hasFileConfigSetting()?"file":"env"}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}render(){const e=this.props.adminEmailNotificationContext.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"email-notification-settings col8 main-column"},e&&this.hasDatabaseSetting()&&this.hasFileConfigSetting()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Settings have been found in your database as well as in your passbolt.php (or environment variables).")," ",n.createElement(v.c,null,"The settings displayed in the form below are the one stored in your database and have precedence over others."))),e&&!this.hasDatabaseSetting()&&this.hasFileConfigSetting()&&n.createElement("div",{className:"warning message",id:"email-notification-fileconfig-exists-banner"},n.createElement("p",null,n.createElement(v.c,null,"You seem to have Email Notification Settings defined in your passbolt.php (or via environment variables).")," ",n.createElement(v.c,null,"Submitting the form will overwrite those settings with the ones you choose in the form below."))),n.createElement("h3",null,n.createElement(v.c,null,"Email delivery")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose which email notifications will be sent.")),n.createElement("div",{className:"section"},n.createElement("div",{className:"password-section"},n.createElement("label",null,n.createElement(v.c,null,"Passwords")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordCreate,id:"send-password-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-create-toggle-button"},n.createElement(v.c,null,"When a password is created, notify its creator."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordUpdate,id:"send-password-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-update-toggle-button"},n.createElement(v.c,null,"When a password is updated, notify the users who have access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordDelete,id:"send-password-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-delete-toggle-button"},n.createElement(v.c,null,"When a password is deleted, notify the users who had access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordShare",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordShare,id:"send-password-share-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-share-toggle-button"},n.createElement(v.c,null,"When a password is shared, notify the users who gain access to it.")))),this.canUseFolders()&&n.createElement("div",{className:"folder-section"},n.createElement("label",null,n.createElement(v.c,null,"Folders")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderCreate,id:"send-folder-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-create-toggle-button"},n.createElement(v.c,null,"When a folder is created, notify its creator."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderUpdate,id:"send-folder-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-update-toggle-button"},n.createElement(v.c,null,"When a folder is updated, notify the users who have access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderDelete,id:"send-folder-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-delete-toggle-button"},n.createElement(v.c,null,"When a folder is deleted, notify the users who had access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderShare",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderShare,id:"send-folder-share-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-share-toggle-button"},n.createElement(v.c,null,"When a folder is shared, notify the users who gain access to it."))))),n.createElement("div",{className:"section"},n.createElement("div",{className:"comment-section"},n.createElement("label",null,n.createElement(v.c,null,"Comments")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"commentAdd",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.commentAdd,id:"send-comment-add-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-comment-add-toggle-button"},n.createElement(v.c,null,"When a comment is posted on a password, notify the users who have access to this password."))))),n.createElement("div",{className:"section"},n.createElement("div",{className:"group-section"},n.createElement("label",null,n.createElement(v.c,null,"Group membership")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupDelete,id:"send-group-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-delete-toggle-button"},n.createElement(v.c,null,"When a group is deleted, notify the users who were members of it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserAdd",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserAdd,id:"send-group-user-add-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-add-toggle-button"},n.createElement(v.c,null,"When users are added to a group, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserDelete,id:"send-group-user-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-delete-toggle-button"},n.createElement(v.c,null,"When users are removed from a group, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserUpdate,id:"send-group-user-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-update-toggle-button"},n.createElement(v.c,null,"When user roles change in a group, notify the corresponding users.")))),n.createElement("div",{className:"group-admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Group manager")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupManagerUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupManagerUpdate,id:"send-group-manager-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-manager-update-toggle-button"},n.createElement(v.c,null,"When members of a group change, notify the group manager(s)."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupManagerRequestAddUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupManagerRequestAddUser,id:"send-group-manager-request-add-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-manager-request-add-user-toggle-button"},n.createElement(v.c,null,"When group managers are requested to add users to a group, notify them."))))),n.createElement("h3",null,n.createElement(v.c,null,"Registration & Recovery")),n.createElement("div",{className:"section"},n.createElement("div",{className:"admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Admin")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userSetupCompleteAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userSetupCompleteAdmin,id:"user-setup-complete-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-setup-complete-admin-toggle-button"},n.createElement(v.c,null,"When a user completed a setup, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverCompleteAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverCompleteAdmin,id:"user-recover-complete-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-complete-admin-toggle-button"},n.createElement(v.c,null,"When a user completed a recover, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverAbortAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverAbortAdmin,id:"user-recover-abort-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-abort-admin-toggle-button"},n.createElement(v.c,null,"When a user aborted a recover, notify all the administrators.")))),n.createElement("div",{className:"user-section"},n.createElement("label",null,n.createElement(v.c,null,"User")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userCreate,id:"send-user-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-user-create-toggle-button"},n.createElement(v.c,null,"When new users are invited to passbolt, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecover",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecover,id:"send-user-recover-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-user-recover-toggle-button"},n.createElement(v.c,null,"When users try to recover their account, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverComplete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverComplete,id:"user-recover-complete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-complete-toggle-button"},n.createElement(v.c,null,"When users completed the recover of their account, notify them."))))),this.canUseAccountRecovery()&&n.createElement(n.Fragment,null,n.createElement("h3",null,n.createElement(v.c,null,"Account recovery")),n.createElement("div",{className:"section"},n.createElement("div",{className:"admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Admin")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestAdmin,id:"account-recovery-request-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-request-admin-toggle-button"},n.createElement(v.c,null,"When an account recovery is requested, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestPolicyUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestPolicyUpdate,id:"account-recovery-policy-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-policy-update-toggle-button"},n.createElement(v.c,null,"When an account recovery policy is updated, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestCreatedAmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestCreatedAmin,id:"account-recovery-response-created-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-created-admin-toggle-button"},n.createElement(v.c,null,"When an administrator answered to an account recovery request, notify the administrator at the origin of the action."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestCreatedAllAdmins",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestCreatedAllAdmins,id:"account-recovery-response-created-all-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-created-all-admin-toggle-button"},n.createElement(v.c,null,"When an administrator answered to an account recovery request, notify all the administrators.")))),n.createElement("div",{className:"user-section"},n.createElement("label",null,n.createElement(v.c,null,"User")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUser,id:"account-recovery-request-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-request-user-toggle-button"},n.createElement(v.c,null,"When an account recovery is requested, notify the user."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUserApproved",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUserApproved,id:"account-recovery-response-user-approved-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-user-approved-toggle-button"},n.createElement(v.c,null,"When an account recovery is approved, notify the user."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUserRejected",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUserRejected,id:"account-recovery-response-user-rejected-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-user-rejected-toggle-button"},n.createElement(v.c,null,"When an account recovery is rejected, notify the user.")))))),this.canUsePasswordExpiry()&&n.createElement(n.Fragment,null,n.createElement("h3",null,n.createElement(v.c,null,"Password expiry")),n.createElement("div",{className:"section"},n.createElement("div",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordExpiryExpiredUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordExpiryExpiredUser,id:"password-expiry-expired-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"password-expiry-expired-user-toggle-button"},n.createElement(v.c,null,"When a password is expired, notify the owners to change it.")))))),n.createElement("h3",null,n.createElement(v.c,null,"Email content visibility")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can adjust the composition of the emails, e.g. which information will be included in the notification.")),n.createElement("div",{className:"section"},n.createElement("div",{className:"password-section"},n.createElement("label",null,n.createElement(v.c,null,"Passwords")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showUsername",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showUsername,id:"show-username-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-username-toggle-button"},n.createElement(v.c,null,"Username"))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showUri",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showUri,id:"show-uri-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-uri-toggle-button"},n.createElement(v.c,null,"URI"))),n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showSecret",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showSecret,id:"show-secret-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-secret-toggle-button"},n.createElement(v.c,null,"Encrypted secret"))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showDescription",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showDescription,id:"show-description-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-description-toggle-button"},n.createElement(v.c,null,"Description")))),n.createElement("div",{className:"comment-section"},n.createElement("label",null,n.createElement(v.c,null,"Comments")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showComment",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showComment,id:"show-comment-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-comment-toggle-button"},n.createElement(v.c,null,"Comment content")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"email-notifications-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about email notification, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/notification/email",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}xa.propTypes={context:o().any,administrationWorkspaceContext:o().object,adminEmailNotificationContext:o().object,t:o().func};const Na=I(wa(O((0,k.Z)("common")(xa))));class _a extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createReferences()}bindCallbacks(){this.handleChangeEvent=this.handleChangeEvent.bind(this),this.handleSubmitButtonFocus=this.handleSubmitButtonFocus.bind(this),this.handleSubmitButtonBlur=this.handleSubmitButtonBlur.bind(this),this.handleOnSubmitEvent=this.handleOnSubmitEvent.bind(this)}get defaultState(){return{hasSubmitButtonFocus:!1}}createReferences(){this.searchInputRef=n.createRef()}handleChangeEvent(e){const t=e.target.value;this.props.onSearch&&this.props.onSearch(t)}handleSubmitButtonFocus(){this.setState({hasSubmitButtonFocus:!0})}handleSubmitButtonBlur(){this.setState({hasSubmitButtonFocus:!1})}handleOnSubmitEvent(e){if(e.preventDefault(),this.props.onSearch){const e=this.searchInputRef.current.value;this.props.onSearch(e)}}render(){return n.createElement("div",{className:"col2 search-wrapper"},n.createElement("form",{className:"search",onSubmit:this.handleOnSubmitEvent},n.createElement("div",{className:`input search required ${this.state.hasSubmitButtonFocus?"no-focus":""} ${this.props.disabled?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Search")),n.createElement("input",{ref:this.searchInputRef,className:"required",type:"search",disabled:this.props.disabled?"disabled":"",onChange:this.handleChangeEvent,placeholder:this.props.placeholder||this.props.t("Search"),value:this.props.value}),n.createElement("div",{className:"search-button-wrapper"},n.createElement("button",{className:"button button-transparent",value:this.props.t("Search"),onBlur:this.handleSubmitButtonBlur,onFocus:this.handleSubmitButtonFocus,type:"submit",disabled:this.props.disabled?"disabled":""},n.createElement(Re,{name:"search"}),n.createElement("span",{className:"visuallyhidden"},n.createElement(v.c,null,"Search")))))))}}_a.propTypes={disabled:o().bool,onSearch:o().func,placeholder:o().string,value:o().string,t:o().func},_a.defaultProps={disabled:!1};const Ra=(0,k.Z)("common")(_a);var Ia=a(3188);class Aa extends n.Component{render(){return n.createElement("div",{className:"illustration icon-feedback"},n.createElement("div",{className:this.props.name}))}}Aa.defaultProps={},Aa.propTypes={name:o().string};const Pa=Aa;class Da extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.getClassName=this.getClassName.bind(this)}getClassName(){let e="button primary";return this.props.warning&&(e+=" warning"),this.props.disabled&&(e+=" disabled"),this.props.processing&&(e+=" processing"),this.props.big&&(e+=" big"),this.props.medium&&(e+=" medium"),this.props.fullWidth&&(e+=" full-width"),e}render(){return n.createElement("button",{type:"submit",className:this.getClassName(),disabled:this.props.disabled},this.props.value||n.createElement(v.c,null,"Save"),this.props.processing&&n.createElement(Re,{name:"spinner"}))}}Da.defaultProps={warning:!1},Da.propTypes={processing:o().bool,disabled:o().bool,value:o().string,warning:o().bool,big:o().bool,medium:o().bool,fullWidth:o().bool};const La=(0,k.Z)("common")(Da),Ta=class{constructor(e){this.customerId=e?.customer_id||"",this.subscriptionId=e?"subscription_id"in e?e.subscription_id:"N/A":"",this.users=e?.users||null,this.email=e?"email"in e?e.email:"N/A":"",this.expiry=e?.expiry||null,this.created=e?.created||null,this.data=e?.data||null}};function Ua(){return Ua=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findSubscriptionKey:()=>{},isProcessing:()=>{},setProcessing:()=>{},getActiveUsers:()=>{},clearContext:()=>{}});class za extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{subscription:new Ta,processing:!0,getSubscription:this.getSubscription.bind(this),findSubscriptionKey:this.findSubscriptionKey.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),getActiveUsers:this.getActiveUsers.bind(this),clearContext:this.clearContext.bind(this)}}async findSubscriptionKey(){this.setProcessing(!0);let e=new Ta;try{const t=await this.props.context.onGetSubscriptionKeyRequested();e=new Ta(t)}catch(t){"PassboltSubscriptionError"===t.name&&(e=new Ta(t.subscription))}finally{this.setState({subscription:e}),this.setProcessing(!1)}}async getActiveUsers(){return(await this.props.context.port.request("passbolt.users.get-all")).filter((e=>e.active)).length}getSubscription(){return this.state.subscription}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}clearContext(){const{subscription:e,processing:t}=this.defaultState;this.setState({subscription:e,processing:t})}render(){return n.createElement(ja.Provider,{value:this.state},this.props.children)}}function Ma(e){return class extends n.Component{render(){return n.createElement(ja.Consumer,null,(t=>n.createElement(e,Ua({adminSubcriptionContext:t},this.props))))}}}za.propTypes={context:o().any,children:o().any},I(za);class Oa extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.initEventHandlers(),this.createInputRef()}getDefaultState(){return{selectedFile:null,key:"",keyError:"",processing:!1,hasBeenValidated:!1}}initEventHandlers(){this.handleCloseClick=this.handleCloseClick.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleKeyInputKeyUp=this.handleKeyInputKeyUp.bind(this),this.handleSelectSubscriptionKeyFile=this.handleSelectSubscriptionKeyFile.bind(this),this.handleSelectFile=this.handleSelectFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef()}componentDidMount(){this.setState({key:this.props.context.editSubscriptionKey.key||""})}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleKeyInputKeyUp(){if(this.state.hasAlreadyBeenValidated){const e=this.validateNameInput();this.setState(e)}}handleCloseClick(){this.props.context.setContext({editSubscriptionKey:null}),this.props.onClose()}handleSelectFile(){this.fileUploaderRef.current.click()}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}async handleSelectSubscriptionKeyFile(e){const[t]=e.target.files,a=await this.readSubscriptionKeyFile(t);this.setState({key:a,selectedFile:t}),this.state.hasBeenValidated&&await this.validate()}readSubscriptionKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async save(){if(this.state.processing)return;if(await this.setState({hasBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();const e={data:this.state.key};try{await this.props.administrationWorkspaceContext.onUpdateSubscriptionKeyRequested(e),await this.handleSaveSuccess(),await this.props.adminSubcriptionContext.findSubscriptionKey()}catch(e){await this.toggleProcessing(),this.handleSaveError(e),this.focusFieldError()}}handleValidateError(){this.focusFieldError()}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.translate("The subscription key has been updated successfully.")),this.props.administrationWorkspaceContext.onMustRefreshSubscriptionKey(),this.props.context.setContext({editSubscriptionKey:null,refreshSubscriptionAnnouncement:!0}),this.props.onClose()}async handleSaveError(e){if("PassboltSubscriptionError"===e.name)this.setState({keyError:e.message});else if("EntityValidationError"===e.name)this.setState({keyError:this.translate("The subscription key is invalid.")});else if("PassboltApiFetchError"===e.name&&e.data&&400===e.data.code)this.setState({keyError:e.message});else{console.error(e);const t={error:e};this.props.dialogContext.open(je,t)}}focusFieldError(){this.state.keyError&&this.keyInputRef.current.focus()}validateKeyInput(){const e=this.state.key.trim();let t="";return e.length||(t=this.translate("A subscription key is required.")),new Promise((e=>{this.setState({keyError:t},e)}))}async validate(){return this.setState({keyError:""}),await this.validateKeyInput(),""===this.state.keyError}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Edit subscription key"),onClose:this.handleCloseClick,disabled:this.state.processing,className:"edit-subscription-dialog"},n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("div",{className:`input textarea required ${this.state.keyError?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",{htmlFor:"edit-tag-form-name"},n.createElement(v.c,null,"Subscription key")),n.createElement("textarea",{id:"edit-subscription-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required full_report",required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("input",{type:"file",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectSubscriptionKeyFile}),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No key file selected"),value:this.selectedFilename}),n.createElement("button",{type:"button",className:"button primary",onClick:this.handleSelectFile,disabled:this.hasAllInputDisabled()},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseClick}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Save")}))))}}Oa.propTypes={context:o().any,onClose:o().func,actionFeedbackContext:o().any,adminSubcriptionContext:o().object,dialogContext:o().any,administrationWorkspaceContext:o().any,t:o().func};const Fa=I(Ma(O(d(g((0,k.Z)("common")(Oa))))));class qa{constructor(e){this.context=e.context,this.dialogContext=e.dialogContext,this.subscriptionContext=e.adminSubcriptionContext}static getInstance(e){return this.instance||(this.instance=new qa(e)),this.instance}static killInstance(){this.instance=null}async editSubscription(){const e={key:this.subscriptionContext.getSubscription().data};this.context.setContext({editSubscriptionKey:e}),this.dialogContext.open(Fa)}}const Wa=qa;class Va extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.subscriptionActionService=Wa.getInstance(this.props)}bindCallbacks(){this.handleEditSubscriptionClick=this.handleEditSubscriptionClick.bind(this)}handleEditSubscriptionClick(){this.subscriptionActionService.editSubscription()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",onClick:this.handleEditSubscriptionClick},n.createElement(Re,{name:"edit"}),n.createElement("span",null,n.createElement(v.c,null,"Update key")))))))}}Va.propTypes={context:o().object,dialogContext:o().object,adminSubscriptionContext:o().object,actionFeedbackContext:o().object,t:o().func};const Ba=d(g(Ma((0,k.Z)("common")(Va)))),Ga=(e,t,a)=>{if(null===e)return"n/a";if("Infinity"===e)return t("Never");const n=Ia.ou.fromISO(e),i=n.diffNow().toMillis();return i>-1e3&&i<0?t("Just now"):n.toRelative({locale:a})};class Ka extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.subscriptionActionService=Wa.getInstance(this.props)}get defaultState(){return{activeUsers:null}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Ba),this.findActiveUsers(),await this.findSubscriptionKey()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSubcriptionContext.clearContext(),Wa.killInstance(),this.mfaFormService=null}bindCallbacks(){this.handleRenewKey=this.handleRenewKey.bind(this),this.handleUpdateKey=this.handleUpdateKey.bind(this)}async findActiveUsers(){const e=await this.props.adminSubcriptionContext.getActiveUsers();this.setState({activeUsers:e})}async findSubscriptionKey(){this.props.adminSubcriptionContext.findSubscriptionKey()}handleRenewKey(){const e=this.props.adminSubcriptionContext.getSubscription();this.hasLimitUsersExceeded()?this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/qty?subscription_id=${e.subscriptionId}&customer_id=${e.customerId}`):(this.hasSubscriptionKeyExpired()||this.hasSubscriptionKeyGoingToExpire())&&this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/renew?subscription_id=${e.subscriptionId}&customer_id=${e.customerId}`)}handleUpdateKey(){this.subscriptionActionService.editSubscription()}hasSubscriptionKeyExpired(){return Ia.ou.fromISO(this.props.adminSubcriptionContext.getSubscription().expiry){},getLocale:()=>{},supportedLocales:()=>{},setLocale:()=>{},hasLocaleChanges:()=>{},findLocale:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{}});class Ya extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.internalisationService=new class{constructor(e){e.setResourceName("locale/settings"),this.apiClient=new at(e)}async save(e){return(await this.apiClient.create(e)).body}}(t)}get defaultState(){return{currentLocale:null,locale:"en-UK",processing:!0,getCurrentLocale:this.getCurrentLocale.bind(this),getLocale:this.getLocale.bind(this),setLocale:this.setLocale.bind(this),findLocale:this.findLocale.bind(this),hasLocaleChanges:this.hasLocaleChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}findLocale(){this.setProcessing(!0);const e=this.props.context.siteSettings.locale;this.setState({currentLocale:e}),this.setState({locale:e}),this.setProcessing(!1)}getCurrentLocale(){return this.state.currentLocale}getLocale(){return this.state.locale}async setLocale(e){await this.setState({locale:e})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasLocaleChanges(){return this.state.locale!==this.state.currentLocale}clearContext(){const{currentLocale:e,locale:t,processing:a}=this.defaultState;this.setState({currentLocale:e,locale:t,processing:a})}async save(){this.setProcessing(!0),await this.internalisationService.save({value:this.state.locale}),this.props.context.onRefreshLocaleRequested(this.state.locale),this.findLocale()}render(){return n.createElement(Za.Provider,{value:this.state},this.props.children)}}Ya.propTypes={context:o().any,children:o().any};const Ja=I(Ya);function Qa(e){return class extends n.Component{render(){return n.createElement(Za.Consumer,null,(t=>n.createElement(e,$a({adminInternationalizationContext:t},this.props))))}}}class Xa extends n.Component{constructor(e){super(e),this.bindCallbacks()}async handleSaveClick(){try{await this.props.adminInternationalizationContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminInternationalizationContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminInternationalizationContext.isProcessing()&&this.props.adminInternationalizationContext.hasLocaleChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The internationalization settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Xa.propTypes={context:o().object,adminInternationalizationContext:o().object,actionFeedbackContext:o().object,t:o().func};const en=Qa(d((0,k.Z)("common")(Xa)));class tn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(en),this.props.adminInternationalizationContext.findLocale()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminInternationalizationContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){this.props.adminInternationalizationContext.setLocale(e.target.value)}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map((e=>({value:e.locale,label:e.label}))):[]}render(){const e=this.props.adminInternationalizationContext.getLocale();return n.createElement("div",{className:"row"},n.createElement("div",{className:"internationalisation-settings col7 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Internationalisation")),n.createElement("form",{className:"form"},n.createElement("div",{className:"select-wrapper input"},n.createElement("label",{htmlFor:"app-locale-input"},n.createElement(v.c,null,"Language")),n.createElement(Ft,{className:"medium",id:"locale-input",name:"locale",items:this.supportedLocales,value:e,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"The default language of the organisation."))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Want to contribute?")),n.createElement("p",null,n.createElement(v.c,null,"Your language is missing or you discovered an error in the translation, help us to improve passbolt.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/contribute/translation",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}),n.createElement("span",null,n.createElement(v.c,null,"Contribute"))))))}}tn.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminInternationalizationContext:o().object,t:o().func};const an=I(Qa(O((0,k.Z)("common")(tn))));function nn(){return nn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getKeyInfo:()=>{},changePolicy:()=>{},changePublicKey:()=>{},hasPolicyChanges:()=>{},resetChanges:()=>{},downloadPrivateKey:()=>{},save:()=>{}});class on extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{currentPolicy:null,policyChanges:{},findAccountRecoveryPolicy:this.findAccountRecoveryPolicy.bind(this),getKeyInfo:this.getKeyInfo.bind(this),changePolicy:this.changePolicy.bind(this),changePublicKey:this.changePublicKey.bind(this),hasPolicyChanges:this.hasPolicyChanges.bind(this),resetChanges:this.resetChanges.bind(this),downloadPrivateKey:this.downloadPrivateKey.bind(this),save:this.save.bind(this)}}async findAccountRecoveryPolicy(){if(!this.props.context.siteSettings.canIUse("accountRecovery"))return;const e=await this.props.context.port.request("passbolt.account-recovery.get-organization-policy");this.setState({currentPolicy:e})}async changePolicy(e){const t=this.state.policyChanges;e===this.state.currentPolicy?.policy?delete t.policy:t.policy=e,"disabled"===e&&delete t.publicKey,await this.setState({policyChanges:t})}async changePublicKey(e){const t={...this.state.policyChanges,publicKey:e};await this.setState({policyChanges:t})}hasPolicyChanges(){return Boolean(this.state.policyChanges?.publicKey)||Boolean(this.state.policyChanges?.policy)}async getKeyInfo(e){return e?this.props.context.port.request("passbolt.keyring.get-key-info",e):null}async resetChanges(){await this.setState({policyChanges:{}})}async downloadPrivateKey(e){await this.props.context.port.request("passbolt.account-recovery.download-organization-generated-key",e)}async save(e){const t=this.buildPolicySaveDto(),a=await this.props.context.port.request("passbolt.account-recovery.save-organization-policy",t,e);this.setState({currentPolicy:a,policyChanges:{}}),this.props.accountRecoveryContext.reloadAccountRecoveryPolicy()}buildPolicySaveDto(){const e={};return this.state.policyChanges.policy&&(e.policy=this.state.policyChanges.policy),this.state.policyChanges.publicKey&&(e.account_recovery_organization_public_key={armored_key:this.state.policyChanges.publicKey}),e}render(){return n.createElement(sn.Provider,{value:this.state},this.props.children)}}function rn(e){return class extends n.Component{render(){return n.createElement(sn.Consumer,null,(t=>n.createElement(e,nn({adminAccountRecoveryContext:t},this.props))))}}}function ln(){return ln=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},stop:()=>{}});class mn extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{workflows:[],start:(e,t)=>{const a=(0,r.Z)();return this.setState({workflows:[...this.state.workflows,{key:a,Workflow:e,workflowProps:t}]}),a},stop:async e=>await this.setState({workflows:this.state.workflows.filter((t=>e!==t.key))})}}render(){return n.createElement(cn.Provider,{value:this.state},this.props.children)}}mn.displayName="WorkflowContextProvider",mn.propTypes={children:o().any};class dn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createInputRef()}get defaultState(){return{processing:!1,key:"",keyError:"",password:"",passwordError:"",passwordWarning:"",hasAlreadyBeenValidated:!1,selectedFile:null}}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleCloseClick=this.handleCloseClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleKeyInputKeyUp=this.handleKeyInputKeyUp.bind(this),this.handlePasswordInputKeyUp=this.handlePasswordInputKeyUp.bind(this),this.handleSelectFile=this.handleSelectFile.bind(this),this.handleSelectOrganizationKeyFile=this.handleSelectOrganizationKeyFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef(),this.passwordInputRef=n.createRef()}handleKeyInputKeyUp(){if(this.state.hasAlreadyBeenValidated){const e=this.validateKeyInput();this.setState(e)}}async handleSelectOrganizationKeyFile(e){const[t]=e.target.files,a=await this.readOrganizationKeyFile(t);await this.fillOrganizationKey(a),this.setState({selectedFile:t}),this.state.hasAlreadyBeenValidated&&await this.validate()}readOrganizationKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async fillOrganizationKey(e){await this.setState({key:e})}validateKeyInput(){const e=this.state.key.trim();let t="";return e.length||(t=this.translate("An organization key is required.")),new Promise((e=>{this.setState({keyError:t},e)}))}focusFirstFieldError(){this.state.keyError?this.keyInputRef.current.focus():this.state.passwordError&&this.passwordInputRef.current.focus()}handlePasswordInputKeyUp(){if(this.state.hasAlreadyBeenValidated)this.setState({passwordError:""});else{const e=this.state.password.length>=4096,t=this.translate("this is the maximum size for this field, make sure your data was not truncated"),a=e?t:"";this.setState({passwordWarning:a})}}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleSelectFile(){this.fileUploaderRef.current.click()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}async save(){if(this.setState({hasAlreadyBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();const e={armored_key:this.state.key,passphrase:this.state.password};try{await this.props.context.port.request("passbolt.account-recovery.validate-organization-private-key",e),await this.props.onSubmit(e),await this.toggleProcessing(),this.props.onClose()}catch(e){await this.handleSubmitError(e),await this.toggleProcessing()}}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&("WrongOrganizationRecoveryKeyError"===e.name?this.setState({expectedFingerprintError:e.expectedFingerprint}):"InvalidMasterPasswordError"===e.name?this.setState({passwordError:this.translate("This is not a valid passphrase.")}):"BadSignatureMessageGpgKeyError"===e.name||"GpgKeyError"===e.name?this.setState({keyError:e.message}):(console.error("Uncaught uncontrolled error"),this.onUnexpectedError(e)))}onUnexpectedError(e){const t={error:e};this.props.dialogContext.open(je,t)}handleValidateError(){this.focusFirstFieldError()}async validate(){return this.setState({keyError:"",passwordError:"",expectedFingerprintError:""}),await this.validateKeyInput(),""===this.state.keyError&&""===this.state.passwordError}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}handleCloseClick(){this.props.onClose()}formatFingerprint(e){if(!e)return n.createElement(n.Fragment,null);const t=e.toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Organization Recovery Key"),onClose:this.handleCloseClick,disabled:this.state.processing,className:"provide-organization-recover-key-dialog"},n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content provide-organization-key"},n.createElement("div",{className:"input textarea required "+(this.state.keyError||this.state.expectedFingerprintError?"error":"")},n.createElement("label",{htmlFor:"organization-recover-form-key"},n.createElement(v.c,null,"Enter the private key used by your organization for account recovery")),n.createElement("textarea",{id:"organization-recover-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required",placeholder:this.translate("Paste the OpenPGP Private key here"),required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file"},n.createElement("input",{type:"file",id:"dialog-import-private-key",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectOrganizationKeyFile}),n.createElement("label",{htmlFor:"dialog-import-private-key"},n.createElement(v.c,null,"Select a file to import")),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No file selected"),defaultValue:this.selectedFilename}),n.createElement("button",{className:"button primary",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.handleSelectFile},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError),this.state.expectedFingerprintError&&n.createElement("div",{className:"key error-message"},n.createElement(v.c,null,"Error, this is not the current organization recovery key."),n.createElement("br",null),n.createElement(v.c,null,"Expected fingerprint:"),n.createElement("br",null),n.createElement("br",null),n.createElement("span",{className:"fingerprint"},this.formatFingerprint(this.state.expectedFingerprintError)))),n.createElement("div",{className:"input-password-wrapper input "+(this.state.passwordError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase"),this.state.passwordWarning&&n.createElement(Re,{name:"exclamation"})),n.createElement(It,{id:"generate-organization-key-form-password",name:"password",placeholder:this.translate("Passphrase"),autoComplete:"new-password",onKeyUp:this.handlePasswordInputKeyUp,value:this.state.password,securityToken:this.props.context.userSettings.getSecurityToken(),preview:!0,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),inputRef:this.passwordInputRef}),this.state.passwordError&&n.createElement("div",{className:"password error-message"},this.state.passwordError),this.state.passwordWarning&&n.createElement("div",{className:"password warning-message"},n.createElement("strong",null,n.createElement(v.c,null,"Warning:"))," ",this.state.passwordWarning))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseClick}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Submit")}))))}}dn.propTypes={context:o().any.isRequired,onClose:o().func,onSubmit:o().func,actionFeedbackContext:o().any,dialogContext:o().object,t:o().func};const hn=I(g((0,k.Z)("common")(dn)));class pn extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){return{processing:!1}}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async toggleProcessing(){await this.setState({processing:!this.state.processing})}get isProcessing(){return this.state.processing}async handleSubmit(e){e.preventDefault(),await this.toggleProcessing();try{await this.props.onSubmit(),this.props.onClose()}catch(e){if(await this.toggleProcessing(),"UserAbortsOperationError"!==e.name)throw console.error("Uncaught uncontrolled error"),e}}formatFingerprint(e){const t=(e=e||"").toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}formatUserIds(e){return(e=e||[]).map(((e,t)=>n.createElement(n.Fragment,{key:t},e.name,"<",e.email,">",n.createElement("br",null))))}formatDate(e){return Ia.ou.fromJSDate(new Date(e)).setLocale(this.props.context.locale).toLocaleString(Ia.ou.DATETIME_FULL)}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Save Settings Summary"),onClose:this.handleClose,disabled:this.state.processing,className:"save-recovery-account-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},this.props.policy&&n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"New Account Recovery Policy")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"accountPolicy"},n.createElement("span",{className:"name"},{mandatory:n.createElement(v.c,null,"Mandatory"),"opt-out":n.createElement(v.c,null,"Optional, Opt-out"),"opt-in":n.createElement(v.c,null,"Optional, Opt-in"),disabled:n.createElement(v.c,null,"Disable")}[this.props.policy]),n.createElement("span",{className:"info"},{mandatory:n.createElement(n.Fragment,null,n.createElement(v.c,null,"Every user is required to provide a copy of their private key and passphrase during setup."),n.createElement("br",null),n.createElement(v.c,null,"Warning: You should inform your users not to store personal passwords.")),"opt-out":n.createElement(v.c,null,"Every user will be prompted to provide a copy of their private key and passphrase by default during the setup, but they can opt out."),"opt-in":n.createElement(v.c,null,"Every user can decide to provide a copy of their private key and passphrase by default during the setup, but they can opt in."),disabled:n.createElement(n.Fragment,null,n.createElement(v.c,null,"Backup of the private key and passphrase will not be stored. This is the safest option."),n.createElement("br",null),n.createElement(v.c,null,"Warning: If users lose their private key and passphrase they will not be able to recover their account."))}[this.props.policy]))))),this.props.keyInfo&&n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"New Organization Recovery Key")),n.createElement("div",{className:"recovery-key-details"},n.createElement("table",{className:"table-info recovery-key"},n.createElement("tbody",null,n.createElement("tr",{className:"user-ids"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Uid")),n.createElement("td",{className:"value"},this.formatUserIds(this.props.keyInfo.user_ids))),n.createElement("tr",{className:"fingerprint"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Fingerprint")),n.createElement("td",{className:"value"},this.formatFingerprint(this.props.keyInfo.fingerprint))),n.createElement("tr",{className:"algorithm"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Algorithm")),n.createElement("td",{className:"value"},this.props.keyInfo.algorithm)),n.createElement("tr",{className:"key-length"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Key length")),n.createElement("td",{className:"value"},this.props.keyInfo.length)),n.createElement("tr",{className:"created"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Created")),n.createElement("td",{className:"value"},this.formatDate(this.props.keyInfo.created))),n.createElement("tr",{className:"expires"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Expires")),n.createElement("td",{className:"value"},Ga(this.props.keyInfo.expires,this.props.t,this.props.context.locale)))))))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,"Please review carefully this configuration as it will not be trivial to change this later.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://help.passbolt.com/configure/account-recovery",className:"button button-left "+(this.isProcessing?"disabled":"")},n.createElement(v.c,null,"Learn more")),n.createElement(Wt,{onClick:this.handleClose,disabled:this.isProcessing}),n.createElement(La,{value:this.translate("Save"),disabled:this.isProcessing,processing:this.isProcessing,warning:!0}))))}}pn.propTypes={context:o().any,onClose:o().func,onSubmit:o().func,policy:o().string,keyInfo:o().object,t:o().func};const un=I((0,k.Z)("common")(pn));class gn extends n.Component{constructor(e){super(e),this.bindCallbacks()}componentDidMount(){this.displayConfirmSummaryDialog()}bindCallbacks(){this.handleCloseDialog=this.handleCloseDialog.bind(this),this.handleConfirmSave=this.handleConfirmSave.bind(this),this.handleSave=this.handleSave.bind(this),this.handleError=this.handleError.bind(this)}async displayConfirmSummaryDialog(){this.props.dialogContext.open(un,{policy:this.props.adminAccountRecoveryContext.policyChanges?.policy,keyInfo:await this.getNewOrganizationKeyInfo(),onClose:this.handleCloseDialog,onSubmit:this.handleConfirmSave})}getNewOrganizationKeyInfo(){const e=this.props.adminAccountRecoveryContext.policyChanges?.publicKey;return e?this.props.adminAccountRecoveryContext.getKeyInfo(e):null}displayProvideAccountRecoveryOrganizationKeyDialog(){this.props.dialogContext.open(hn,{onClose:this.handleCloseDialog,onSubmit:this.handleSave})}handleCloseDialog(){this.props.onStop()}async handleConfirmSave(){Boolean(this.props.adminAccountRecoveryContext.currentPolicy?.account_recovery_organization_public_key)?this.displayProvideAccountRecoveryOrganizationKeyDialog():await this.handleSave()}async handleSave(e=null){try{await this.props.adminAccountRecoveryContext.save(e),await this.props.actionFeedbackContext.displaySuccess(this.translate("The organization recovery policy has been updated successfully")),this.props.onStop()}catch(e){this.handleError(e)}}handleError(e){if(["UserAbortsOperationError","WrongOrganizationRecoveryKeyError","InvalidMasterPasswordError","BadSignatureMessageGpgKeyError","GpgKeyError"].includes(e.name))throw e;"PassboltApiFetchError"===e.name&&e?.data?.body?.account_recovery_organization_public_key?.fingerprint?.isNotAccountRecoveryOrganizationPublicKeyFingerprintRule?this.props.dialogContext.open(je,{error:new Error(this.translate("The new organization recovery key should not be a formerly used organization recovery key."))}):this.props.dialogContext.open(je,{error:e}),this.props.onStop()}get translate(){return this.props.t}render(){return n.createElement(n.Fragment,null)}}gn.propTypes={dialogContext:o().any,adminAccountRecoveryContext:o().any,actionFeedbackContext:o().object,context:o().object,onStop:o().func.isRequired,t:o().func};const bn=I(g(d(rn((0,k.Z)("common")(gn)))));class fn extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleEditSubscriptionClick=this.handleEditSubscriptionClick.bind(this)}handleSaveClick(){this.props.workflowContext.start(bn,{})}handleEditSubscriptionClick(){this.props.adminAccountRecoveryContext.resetChanges()}isSaveEnabled(){if(!this.props.adminAccountRecoveryContext.hasPolicyChanges())return!1;const e=this.props.adminAccountRecoveryContext.policyChanges,t=this.props.adminAccountRecoveryContext.currentPolicy;if(e?.policy===Ve.POLICY_DISABLED)return!0;const a=e.publicKey||t.account_recovery_organization_public_key?.armored_key;return!(!Boolean(e.policy)||!Boolean(a))||t.policy!==Ve.POLICY_DISABLED&&Boolean(e.publicKey)}isResetEnabled(){return this.props.adminAccountRecoveryContext.hasPolicyChanges()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isResetEnabled(),onClick:this.handleEditSubscriptionClick},n.createElement(Re,{name:"edit"}),n.createElement("span",null,n.createElement(v.c,null,"Reset settings")))))))}}fn.propTypes={adminAccountRecoveryContext:o().object,workflowContext:o().any};const yn=function(e){return class extends n.Component{render(){return n.createElement(cn.Consumer,null,(t=>n.createElement(e,ln({workflowContext:t},this.props))))}}}(rn((0,k.Z)("common")(fn)));class vn extends n.Component{constructor(e){super(e),this.bindCallback()}bindCallback(){this.handleClick=this.handleClick.bind(this)}handleClick(){this.props.onClick(this.props.name)}render(){return n.createElement("li",{className:"tab "+(this.props.isActive?"active":"")},n.createElement("button",{type:"button",className:"tab-link",onClick:this.handleClick},this.props.name))}}vn.propTypes={name:o().string,type:o().string,isActive:o().bool,onClick:o().func,children:o().any};const kn=vn;class En extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback()}getDefaultState(e){return{activeTabName:e.activeTabName}}bindCallback(){this.handleTabClick=this.handleTabClick.bind(this)}handleTabClick(e){this.setState({activeTabName:e.name}),"function"==typeof e.onClick&&e.onClick()}render(){return n.createElement("div",{className:"tabs"},n.createElement("ul",{className:"tabs-nav tabs-nav--bordered"},this.props.children.map((({key:e,props:t})=>n.createElement(kn,{key:e,name:t.name,onClick:()=>this.handleTabClick(t),isActive:t.name===this.state.activeTabName})))),n.createElement("div",{className:"tabs-active-content"},this.props.children.find((e=>e.props.name===this.state.activeTabName)).props.children))}}En.propTypes={activeTabName:o().string,children:o().any};const wn=En;class Cn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createInputRef()}get defaultState(){return{processing:!1,key:"",keyError:"",hasAlreadyBeenValidated:!1,selectedFile:null}}bindCallbacks(){this.handleSelectFile=this.handleSelectFile.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleSelectOrganizationKeyFile=this.handleSelectOrganizationKeyFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef()}async handleSelectOrganizationKeyFile(e){const[t]=e.target.files,a=await this.readOrganizationKeyFile(t);this.setState({key:a,selectedFile:t})}readOrganizationKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async validateKeyInput(){const e=this.state.key.trim();return""===e?Promise.reject(new Error(this.translate("The key can't be empty."))):await this.props.context.port.request("passbolt.account-recovery.validate-organization-key",e)}async validate(){return this.setState({keyError:""}),await this.validateKeyInput().then((()=>!0)).catch((e=>(this.setState({keyError:e.message}),!1)))}handleInputChange(e){const t=e.target;this.setState({[t.name]:t.value})}handleSelectFile(){this.fileUploaderRef.current.click()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}async save(){if(await this.setState({hasAlreadyBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();await this.props.onUpdateOrganizationKey(this.state.key.trim())}handleValidateError(){this.focusFieldError()}focusFieldError(){this.state.keyError&&this.keyInputRef.current.focus()}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}get translate(){return this.props.t}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}render(){return n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content import-organization-key"},n.createElement("div",{className:"input textarea required "+(this.state.keyError?"error":"")},n.createElement("label",{htmlFor:"organization-recover-form-key"},n.createElement(v.c,null,"Import an OpenPGP Public key")),n.createElement("textarea",{id:"organization-recover-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required",placeholder:this.translate("Add Open PGP Public key"),required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file"},n.createElement("input",{type:"file",id:"dialog-import-private-key",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectOrganizationKeyFile}),n.createElement("label",{htmlFor:"dialog-import-private-key"},n.createElement(v.c,null,"Select a file to import")),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No file selected"),defaultValue:this.selectedFilename}),n.createElement("button",{className:"button primary",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.handleSelectFile},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError))),!this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"message notice"},n.createElement(Re,{baseline:!0,name:"info-circle"}),n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"Learn how to ",n.createElement("a",{href:"https://help.passbolt.com/configure/account-recovery",target:"_blank",rel:"noopener noreferrer"},"generate a key separately."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.onClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Apply")})))}}Cn.propTypes={context:o().object,onUpdateOrganizationKey:o().func,onClose:o().func,t:o().func};const Sn=I((0,k.Z)("common")(Cn));var xn=a(9496),Nn=a.n(xn);const _n={"en-UK":["abdominal","acclimate","accompany","activator","acuteness","aerospace","affecting","affection","affidavit","affiliate","afflicted","afterglow","afterlife","aftermath","aftermost","afternoon","aggregate","agonizing","agreeable","agreeably","agreement","alabaster","albatross","algorithm","alienable","alongside","amazingly","ambiguity","ambiguous","ambitious","ambulance","amendable","amendment","amplifier","amusement","anaerobic","anatomist","angelfish","angriness","anguished","animating","animation","animosity","announcer","answering","antarctic","anthology","antiquely","antiquity","antitoxic","antitrust","antiviral","antivirus","appealing","appeasing","appendage","appetizer","appliance","applicant","appointee","appraisal","appraiser","apprehend","arbitrary","arbitrate","armadillo","arrogance","ascension","ascertain","asparagus","astrology","astronaut","astronomy","atrocious","attendant","attention","attentive","attractor","attribute","audacious","augmented","authentic","autograph","automaker","automated","automatic","autopilot","available","avalanche","backboard","backboned","backfield","backlands","backlight","backpedal","backshift","backspace","backstage","backtrack","backwater","bacterium","bagginess","balancing","bannister","barometer","barracuda","barricade","bartender","basically","battalion","battering","blanching","blandness","blaspheme","blasphemy","blatantly","blunderer","bodacious","boogeyman","boogieman","boondocks","borrowing","botanical","boundless","bountiful","breeching","brilliant","briskness","broadband","broadcast","broadness","broadside","broadways","bronchial","brownnose","brutishly","buccaneer","bucktooth","buckwheat","bulginess","bulldozer","bullfight","bunkhouse","cabdriver","calculate","calibrate","camcorder","canopener","capillary","capricorn","captivate","captivity","cardboard","cardstock","carefully","caregiver","caretaker","carnation","carnivore","carpenter","carpentry","carrousel","cartridge","cartwheel","catatonic","catchable","cathedral","cattishly","caucasian","causation","cauterize","celestial","certainly","certainty","certified","challenge","chamomile","chaperone","character","charbroil","chemicals","cherisher","chihuahua","childcare","childhood","childless","childlike","chokehold","circulate","clamshell","clergyman","clubhouse","clustered","coagulant","coastland","coastline","cofounder","cognition","cognitive","coherence","collected","collector","collision","commodity","commodore","commotion","commuting","compacted","compacter","compactly","compactor","companion","component","composite","composure","comprised","computing","concerned","concierge","condiment","condition","conducive","conductor","confidant","confident","confiding","configure","confining","confusing","confusion","congenial","congested","conjoined","connected","connector","consensus","consoling","consonant","constable","constrain","constrict","construct","consuming","container","contented","contently","contusion","copartner","cornbread","cornfield","cornflake","cornstalk","corporate","corroding","corrosive","cosmetics","cosponsor","countable","countdown","countless","crabgrass","craftsman","craftwork","cranberry","craziness","creamlike","creatable","crestless","crispness","crudeness","cruelness","crummiest","crunching","crushable","cubbyhole","culminate","cultivate","cupbearer","curliness","curvature","custodian","customary","customize","cytoplasm","cytoplast","dandelion","daredevil","darkening","darwinism","dastardly","deafening","dealmaker","debatable","decathlon","deceiving","deception","deceptive","decidable","decimeter","decompose","decorated","decorator","dedicator","defection","defective","defendant","defensive","deflation","deflected","deflector","degrading","dehydrate","delegator","delicious","delighted","delirious","deliverer","demanding","demeaning","democracy","demystify","denatured","deodorant","deodorize","departure","depletion","depravity","deprecate","desecrate","deserving","designate","designing","deskbound","destitute","detection","detective","detention","detergent","detonator","deviation","devotedly","devouring","dexterity","dexterous","diagnoses","diagnosis","diaphragm","dictation","difficult","diffusion","diffusive","diligence","dinginess","direction","directive","directory","dirtiness","disbelief","discharge","discourse","disengage","disfigure","disinfect","disliking","dislocate","dismantle","disparate","disparity","dispersal","dispersed","disperser","displease","disregard","dividable","divisible","divisibly","dizziness","dollhouse","doorframe","dormitory","dragonfly","dragonish","drainable","drainpipe","dramatize","dreadlock","dreamboat","dreamland","dreamless","dreamlike","drinkable","drop-down","dubiously","duplicate","duplicity","dwindling","earthlike","earthling","earthworm","eastbound","eastcoast","eccentric","ecologist","economist","ecosphere","ecosystem","education","effective","efficient","eggbeater","egomaniac","egotistic","elaborate","eldercare","electable","elevating","elevation","eliminate","elongated","eloquence","elsewhere","embattled","embellish","embroider","emergency","emphasize","empirical","emptiness","enactment","enchanted","enchilada","enclosure","encounter","encourage","endearing","endocrine","endorphin","endowment","endurable","endurance","energetic","engraving","enigmatic","enjoyable","enjoyably","enjoyment","enlarging","enlighten","entangled","entertain","entourage","enunciate","epidermal","epidermis","epileptic","equipment","equivocal","eradicate","ergonomic","escalator","escapable","esophagus","espionage","essential","establish","estimator","estranged","ethically","euphemism","evaluator","evaporate","everglade","evergreen","everybody","evolution","excavator","exceeding","exception","excitable","excluding","exclusion","exclusive","excretion","excretory","excursion","excusable","excusably","exemplary","exemplify","exemption","exerciser","exfoliate","exonerate","expansion","expansive","expectant","expedited","expediter","expensive","expletive","exploring","exposable","expulsion","exquisite","extending","extenuate","extortion","extradite","extrovert","extruding","exuberant","facecloth","faceplate","facsimile","factsheet","fanciness","fantasize","fantastic","favorable","favorably","ferocious","festivity","fidgeting","financial","finishing","flagstick","flagstone","flammable","flashback","flashbulb","flashcard","flattered","flatterer","flavorful","flavoring","footboard","footprint","fragility","fragrance","fraternal","freemason","freestyle","freezable","frequency","frightful","frigidity","frivolous","frostbite","frostlike","frugality","frustrate","gainfully","gallantly","gallstone","galvanize","gathering","gentleman","geography","geologist","geometric","geriatric","germicide","germinate","germproof","gestation","gibberish","giddiness","gigahertz","gladiator","glamorous","glandular","glorified","glorifier","glutinous","goldsmith","goofiness","graceless","gradation","gradually","grappling","gratified","gratitude","graveness","graveyard","gravitate","greedless","greyhound","grievance","grimacing","griminess","grumbling","guacamole","guileless","gumminess","habitable","hamburger","hamstring","handbrake","handclasp","handcraft","handiness","handiwork","handlebar","handprint","handsfree","handshake","handstand","handwoven","handwrite","hankering","haphazard","happening","happiness","hardcover","hardening","hardiness","hardwired","harmonica","harmonics","harmonize","hastiness","hatchback","hatchling","headboard","headcount","headdress","headfirst","headphone","headpiece","headscarf","headstand","headstone","heaviness","heftiness","hemstitch","herbicide","hesitancy","humiliate","humongous","humorless","hunchback","hundredth","hurricane","huskiness","hydration","hydroxide","hyperlink","hypertext","hypnotism","hypnotist","hypnotize","hypocrisy","hypocrite","ibuprofen","idealness","identical","illicitly","imaginary","imitation","immersion","immorally","immovable","immovably","impatient","impending","imperfect","implement","implicate","implosion","implosive","important","impotence","impotency","imprecise","impromptu","improving","improvise","imprudent","impulsive","irregular","irritable","irritably","isolating","isolation","italicize","itinerary","jackknife","jailbreak","jailhouse","jaywalker","jeeringly","jockstrap","jolliness","joylessly","jubilance","judgingly","judiciary","juiciness","justifier","kilometer","kinswoman","laborious","landowner","landscape","landslide","lankiness","legislate","legwarmer","lethargic","levitator","liability","librarian","limelight","litigator","livestock","lubricant","lubricate","luckiness","lucrative","ludicrous","luminance","lumpiness","lunchroom","lunchtime","luridness","lustfully","lustiness","luxurious","lyrically","machinist","magnesium","magnetism","magnetize","magnifier","magnitude","majorette","makeshift","malformed","mammogram","mandatory","manhandle","manicotti","manifesto","manliness","marauding","margarine","margarita","marmalade","marshland","marsupial","marvelous","masculine","matchbook","matchless","maternity","matriarch","matrimony","mayflower","modulator","moistness","molecular","monastery","moneybags","moneyless","moneywise","monologue","monstrous","moodiness","moonlight","moonscape","moonshine","moonstone","morbidity","mortality","mortician","mortified","mothproof","motivator","motocross","mountable","mousiness","moustache","multitask","multitude","mummified","municipal","murkiness","murmuring","mushiness","muskiness","mustiness","mutilated","mutilator","mystified","nanometer","nastiness","navigator","nebulizer","neglector","negligent","negotiate","neurology","ninetieth","numerator","nuttiness","obedience","oblivious","obnoxious","obscurity","observant","observing","obsession","obsessive","obstinate","obtrusive","occultist","occupancy","onslaught","operating","operation","operative","oppressed","oppressor","opulently","outnumber","outplayed","outskirts","outsource","outspoken","overblown","overboard","overbuilt","overcrowd","overdraft","overdrawn","overdress","overdrive","overeager","overeater","overexert","overgrown","overjoyed","overlabor","overlying","overnight","overplant","overpower","overprice","overreach","overreact","overshoot","oversight","oversized","oversleep","overspend","overstate","overstock","overstuff","oversweet","overthrow","overvalue","overwrite","oxidation","oxidizing","pacemaker","palatable","palpitate","panhandle","panoramic","pantomime","pantyhose","paparazzi","parachute","paragraph","paralegal","paralyses","paralysis","paramedic","parameter","paramount","parasitic","parchment","partition","partridge","passenger","passivism","patchwork","paternity","patriarch","patronage","patronize","pavestone","pediatric","pedometer","penholder","penniless","pentagram","percolate","perennial","perfected","perfectly","periscope","perkiness","perpetual","perplexed","persecute","persevere","persuaded","persuader","pessimism","pessimist","pesticide","petroleum","petticoat","pettiness","phonebook","phoniness","phosphate","plausible","plausibly","playgroup","playhouse","playmaker","plaything","plentiful","plexiglas","plutonium","pointless","polyester","polygraph","porcupine","portfolio","postnasal","powdering","prankster","preaching","precision","predefine","preflight","preformed","pregnancy","preheated","prelaunch","preoccupy","preschool","prescribe","preseason","president","presuming","pretended","pretender","prevalent","prewashed","primarily","privatize","proactive","probation","probiotic","procedure","procreate","profanity","professed","professor","profusely","prognosis","projector","prolonged","promenade","prominent","promotion","pronounce","proofread","propeller","proponent","protector","prototype","protozoan","providing","provoking","provolone","proximity","prudishly","publisher","pulmonary","pulverize","punctuate","punctured","pureblood","purgatory","purposely","pursuable","pushchair","pushiness","pyromania","qualified","qualifier","quartered","quarterly","quickness","quicksand","quickstep","quintuple","quizzical","quotation","radiantly","radiation","rancidity","ravishing","reacquire","reanalyze","reappoint","reapprove","rearrange","rebalance","recapture","recharger","recipient","reclining","reclusive","recognize","recollect","reconcile","reconfirm","reconvene","rectangle","rectified","recycling","reexamine","referable","reference","refinance","reflected","reflector","reformist","refueling","refurbish","refurnish","refutable","registrar","regretful","regulator","rehydrate","reimburse","reiterate","rejoicing","relapsing","relatable","relenting","relieving","reluctant","remindful","remission","remodeler","removable","rendering","rendition","renewable","renewably","renovator","repackage","repacking","repayment","repossess","repressed","reprimand","reprocess","reproduce","reprogram","reptilian","repugnant","repulsion","repulsive","repurpose","reputable","reputably","requisite","reshuffle","residence","residency","resilient","resistant","resisting","resurface","resurrect","retaining","retaliate","retention","retrieval","retriever","reverence","reversing","reversion","revisable","revivable","revocable","revolving","riverbank","riverboat","riverside","rockiness","rockslide","roundness","roundworm","runaround","sacrament","sacrifice","saddlebag","safeguard","safehouse","salvaging","salvation","sanctuary","sandblast","sandpaper","sandstone","sandstorm","sanitizer","sappiness","sarcastic","sasquatch","satirical","satisfied","sauciness","saxophone","scapegoat","scarecrow","scariness","scavenger","schematic","schilling","scientist","scorebook","scorecard","scoreless","scoundrel","scrambled","scrambler","scrimmage","scrounger","sculpture","secluding","seclusion","sectional","selection","selective","semicolon","semifinal","semisweet","sensation","sensitive","sensitize","sensually","september","sequester","serotonin","sevenfold","seventeen","shadiness","shakiness","sharpener","sharpness","shiftless","shininess","shivering","shortcake","shorthand","shortlist","shortness","shortwave","showpiece","showplace","shredding","shrubbery","shuffling","silliness","similarly","simmering","sincerity","situation","sixtyfold","skedaddle","skintight","skyrocket","slackness","slapstick","sliceable","slideshow","slighting","slingshot","slouching","smartness","smilingly","smokeless","smokiness","smuggling","snowboard","snowbound","snowdrift","snowfield","snowflake","snowiness","snowstorm","spearfish","spearhead","spearmint","spectacle","spectator","speculate","spellbind","spendable","spherical","spiritism","spiritual","splashing","spokesman","spotlight","sprinkled","sprinkler","squatting","squealing","squeamish","squeezing","squishier","stability","stabilize","stainable","stainless","stalemate","staleness","starboard","stargazer","starlight","startling","statistic","statutory","steadfast","steadying","steerable","steersman","stegosaur","sterility","sterilize","sternness","stiffness","stillness","stimulant","stimulate","stipulate","stonewall","stoneware","stonework","stoplight","stoppable","stopwatch","storeroom","storewide","straggler","straining","strangely","strategic","strenuous","strongbox","strongman","structure","stumbling","stylishly","subarctic","subatomic","subdivide","subheader","submarine","submersed","submitter","subscribe","subscript","subsector","subsiding","subsidize","substance","subsystem","subwoofer","succulent","suffering","suffocate","sulphuric","superbowl","superglue","superhero","supernova","supervise","supremacy","surcharge","surfacing","surfboard","surrender","surrogate","surviving","sustained","sustainer","swaddling","swampland","swiftness","swimmable","symphonic","synthesis","synthetic","tableware","tackiness","taekwondo","tarantula","tastiness","theatrics","thesaurus","thickness","thirstily","thirsting","threefold","throbbing","throwaway","throwback","thwarting","tightness","tightrope","tinderbox","tiptoeing","tradition","trailside","transform","translate","transpire","transport","transpose","trapezoid","treachery","treadmill","trembling","tribesman","tributary","trickster","trifocals","trimester","troubling","trustable","trustless","turbulent","twentieth","twiddling","twistable","ultimatum","umbilical","unabashed","unadorned","unadvised","unaligned","unaltered","unarmored","unashamed","unaudited","unbalance","unblended","unblessed","unbounded","unbraided","unbuckled","uncertain","unchanged","uncharted","unclaimed","unclamped","unclothed","uncolored","uncorrupt","uncounted","uncrushed","uncurious","undamaged","undaunted","undecided","undefined","undercoat","undercook","underdone","underfeed","underfoot","undergrad","underhand","underline","underling","undermine","undermost","underpaid","underpass","underrate","undertake","undertone","undertook","underwear","underwent","underwire","undesired","undiluted","undivided","undrafted","undrilled","uneatable","unelected","unengaged","unethical","unexpired","unexposed","unfailing","unfeeling","unfitting","unfixable","unfocused","unfounded","unfrosted","ungreased","unguarded","unhappily","unhealthy","unhearing","unhelpful","unhitched","uniformed","uniformly","unimpeded","uninjured","uninstall","uninsured","uninvited","unisexual","universal","unknotted","unknowing","unlearned","unleveled","unlighted","unlikable","unlimited","unlivable","unlocking","unlovable","unluckily","unmanaged","unmasking","unmatched","unmindful","unmixable","unmovable","unnamable","unnatural","unnerving","unnoticed","unopposed","unpainted","unpiloted","unplanned","unplanted","unpleased","unpledged","unpopular","unraveled","unreached","unreeling","unrefined","unrelated","unretired","unrevised","unrivaled","unroasted","unruffled","unscathed","unscented","unsecured","unselfish","unsettled","unshackle","unsheathe","unshipped","unsightly","unskilled","unspoiled","unstaffed","unstamped","unsterile","unstirred","unstopped","unstuffed","unstylish","untainted","untangled","untoasted","untouched","untracked","untrained","untreated","untrimmed","unvarying","unveiling","unvisited","unwarlike","unwatched","unwelcome","unwilling","unwitting","unwomanly","unworldly","unworried","unwrapped","unwritten","upcountry","uplifting","urologist","uselessly","vagrantly","vagueness","valuables","vaporizer","vehicular","veneering","ventricle","verbalize","vertebrae","viability","viewpoint","vindicate","violation","viscosity","vivacious","vividness","wackiness","washbasin","washboard","washcloth","washhouse","washstand","whimsical","wieldable","wikipedia","willfully","willpower","wolverine","womanhood","womankind","womanless","womanlike","worrisome","worsening","worshiper","wrongdoer","wrongness","yesterday","zestfully","zigzagged","zookeeper","zoologist","abnormal","abrasion","abrasive","abruptly","absentee","absently","absinthe","absolute","abstract","accuracy","accurate","accustom","achiness","acquaint","activate","activism","activist","activity","aeration","aerobics","affected","affluent","aflutter","agnostic","agreeing","alienate","alkaline","alkalize","almighty","alphabet","although","altitude","aluminum","amaretto","ambiance","ambition","amicably","ammonium","amniotic","amperage","amusable","anaconda","aneurism","animator","annotate","annoying","annually","anointer","anteater","antelope","antennae","antibody","antidote","antihero","antiques","antirust","anyplace","anything","anywhere","appendix","appetite","applause","approach","approval","aptitude","aqueduct","ardently","arguable","arguably","armchair","arrogant","aspirate","astonish","atlantic","atonable","attendee","attitude","atypical","audacity","audience","audition","autistic","avenging","aversion","aviation","babbling","backache","backdrop","backfire","backhand","backlash","backless","backpack","backrest","backroom","backside","backslid","backspin","backstab","backtalk","backward","backwash","backyard","bacteria","baffling","baguette","bakeshop","balsamic","banister","bankable","bankbook","banknote","bankroll","barbecue","bargraph","baritone","barrette","barstool","barterer","battered","blatancy","blighted","blinking","blissful","blizzard","bloating","bloomers","blooming","blustery","boastful","boasting","bondless","bonehead","boneless","bonelike","bootlace","borrower","botanist","bottling","bouncing","bounding","breeches","breeding","brethren","broiling","bronzing","browbeat","browsing","bruising","brunette","brussels","bubbling","buckshot","buckskin","buddhism","buddhist","bullfrog","bullhorn","bullring","bullseye","bullwhip","bunkmate","busybody","cadillac","calamari","calamity","calculus","camisole","campfire","campsite","canister","cannabis","capacity","cardigan","cardinal","careless","carmaker","carnival","cartload","cassette","casually","casualty","catacomb","catalyst","catalyze","catapult","cataract","catching","catering","catfight","cathouse","cautious","cavalier","celibacy","celibate","ceramics","ceremony","cesarean","cesspool","chaffing","champion","chaplain","charcoal","charging","charting","chastise","chastity","chatroom","chatting","cheating","chewable","childish","chirping","chitchat","chivalry","chloride","chlorine","choosing","chowtime","cilantro","cinnamon","circling","circular","citation","clambake","clanking","clapping","clarinet","clavicle","clerical","climatic","clinking","closable","clothing","clubbing","clumsily","coasting","coauthor","coeditor","cogwheel","coherent","cohesive","coleslaw","coliseum","collapse","colonial","colonist","colonize","colossal","commence","commerce","composed","composer","compound","compress","computer","conceded","conclude","concrete","condense","confetti","confider","confined","conflict","confound","confront","confused","congrats","congress","conjuror","constant","consumer","contempt","contents","contrite","cornball","cornhusk","cornmeal","coronary","corporal","corridor","cosigner","counting","covenant","coveting","coziness","crabbing","crablike","crabmeat","cradling","craftily","crawfish","crawlers","crawling","crayfish","creasing","creation","creative","creature","credible","credibly","crescent","cresting","crewless","crewmate","cringing","crisping","criteria","crumpled","cruncher","crusader","crushing","cucumber","cufflink","culinary","culpable","cultural","customer","cylinder","daffodil","daintily","dallying","dandruff","dangling","daringly","darkened","darkness","darkroom","datebook","daughter","daunting","daybreak","daydream","daylight","dazzling","deafness","debating","debtless","deceased","deceiver","december","decipher","declared","decrease","dedicate","deepness","defacing","defender","deferral","deferred","defiance","defiling","definite","deflator","deforest","degraded","degrease","dejected","delegate","deletion","delicacy","delicate","delirium","delivery","delusion","demeanor","democrat","demotion","deniable","departed","deplored","depraved","deputize","deranged","designed","designer","deskwork","desolate","destruct","detached","detector","detonate","detoxify","deviancy","deviator","devotion","devourer","devoutly","diabetes","diabetic","diabolic","diameter","dictator","diffused","diffuser","dilation","diligent","diminish","directed","directly","direness","disabled","disagree","disallow","disarray","disaster","disburse","disclose","discolor","discount","discover","disgrace","dislodge","disloyal","dismount","disorder","dispatch","dispense","displace","disposal","disprove","dissuade","distance","distaste","distinct","distract","distress","district","distrust","dividend","dividers","dividing","divinely","divinity","division","divisive","divorcee","doctrine","document","domelike","domestic","dominion","dominoes","donation","doorbell","doorknob","doornail","doorpost","doorstep","doorstop","doubling","dragging","dragster","drainage","dramatic","dreadful","dreamily","drearily","drilling","drinking","dripping","drivable","driveway","dropkick","drowsily","duckbill","duckling","ducktail","dullness","dumpling","dumpster","duration","dwelling","dynamite","dyslexia","dyslexic","earphone","earpiece","earplugs","easiness","eastward","economic","edginess","educated","educator","eggplant","eggshell","election","elective","elephant","elevator","eligible","eligibly","elliptic","eloquent","embezzle","embolism","emission","emoticon","empathic","emphases","emphasis","emphatic","employed","employee","employer","emporium","encircle","encroach","endanger","endeared","endpoint","enduring","energize","enforced","enforcer","engaging","engraved","engraver","enjoying","enlarged","enlisted","enquirer","entering","enticing","entrench","entryway","envelope","enviable","enviably","envision","epidemic","epidural","epilepsy","epilogue","epiphany","equation","erasable","escalate","escapade","escapist","escargot","espresso","esteemed","estimate","estrogen","eternity","evacuate","evaluate","everyday","everyone","evidence","excavate","exchange","exciting","existing","exorcism","exorcist","expenses","expiring","explicit","exponent","exporter","exposure","extended","exterior","external","fabulous","facebook","facedown","faceless","facelift","facility","familiar","famished","fastball","fastness","favoring","favorite","felt-tip","feminine","feminism","feminist","feminize","fernlike","ferocity","festival","fiddling","fidelity","fiftieth","figurine","filtrate","finalist","finalize","fineness","finished","finisher","fiscally","flagpole","flagship","flanking","flannels","flashily","flashing","flatfoot","flatness","flattery","flatware","flatworm","flavored","flaxseed","flogging","flounder","flypaper","follicle","fondling","fondness","football","footbath","footgear","foothill","foothold","footless","footnote","footpath","footrest","footsore","footwear","footwork","founding","fountain","fraction","fracture","fragment","fragrant","freckled","freckles","freebase","freefall","freehand","freeload","freeness","freeware","freewill","freezing","frenzied","frequent","friction","frighten","frigidly","frostily","frosting","fructose","frugally","galleria","gambling","gangrene","gatherer","gauntlet","generous","genetics","geologic","geometry","geranium","germless","gigabyte","gigantic","giggling","giveaway","glancing","glaucoma","gleaming","gloating","gloomily","glorious","glowworm","goatskin","goldfish","goldmine","goofball","gorgeous","graceful","gracious","gradient","graduate","graffiti","grafting","granddad","grandkid","grandson","granular","gratuity","greasily","greedily","greeting","grieving","grievous","grinning","groggily","grooving","grudging","grueling","grumpily","guidable","guidance","gullible","gurgling","gyration","habitant","habitual","handball","handbook","handcart","handclap","handcuff","handgrip","handheld","handling","handmade","handpick","handrail","handwash","handwork","handyman","hangnail","hangover","happiest","hardcopy","hardcore","harddisk","hardened","hardener","hardhead","hardness","hardship","hardware","hardwood","harmless","hatchery","hatching","hazelnut","haziness","headache","headband","headgear","headlamp","headless","headlock","headrest","headroom","headsman","headwear","helpless","helpline","henchman","heritage","hesitant","hesitate","hexagram","huddling","humbling","humility","humorist","humorous","humpback","hungrily","huntress","huntsman","hydrated","hydrogen","hypnoses","hypnosis","hypnotic","idealism","idealist","idealize","identify","identity","ideology","ignition","illusion","illusive","imagines","imbecile","immature","imminent","immobile","immodest","immortal","immunity","immunize","impaired","impeding","imperial","implicit","impolite","importer","imposing","impotent","imprison","improper","impurity","irrigate","irritant","irritate","islamist","isolated","jailbird","jalapeno","jaundice","jingling","jokester","jokingly","joyfully","joystick","jubilant","judicial","juggling","junction","juncture","junkyard","justness","juvenile","kangaroo","keenness","kerchief","kerosene","kilobyte","kilogram","kilowatt","kindling","kindness","kissable","knapsack","knickers","laboring","labrador","ladylike","landfall","landfill","landlady","landless","landline","landlord","landmark","landmass","landmine","landside","language","latitude","latticed","lavender","laxative","laziness","lecturer","leggings","lethargy","leverage","levitate","licorice","ligament","likeness","likewise","limpness","linguini","linguist","linoleum","litigate","luckless","lukewarm","luminous","lunchbox","luncheon","lushness","lustrous","lyricism","lyricist","macarena","macaroni","magazine","magician","magnetic","magnolia","mahogany","majestic","majority","makeover","managing","mandarin","mandolin","manicure","manpower","marathon","marbling","marigold","maritime","massager","matchbox","matching","material","maternal","maturely","maturing","maturity","maverick","maximize","mobility","mobilize","modified","moisture","molasses","molecule","molehill","monetary","monetize","mongoose","monkhood","monogamy","monogram","monopoly","monorail","monotone","monotype","monoxide","monsieur","monument","moonbeam","moonlike","moonrise","moonwalk","morality","morbidly","morphine","morphing","mortally","mortuary","mothball","motivate","mountain","mounting","mournful","mulberry","multiple","multiply","mumbling","munchkin","muscular","mushroom","mutation","national","nativity","naturist","nautical","navigate","nearness","neatness","negation","negative","negligee","neurosis","neurotic","nickname","nicotine","nineteen","nintendo","numbness","numerate","numerous","nuptials","nutrient","nutshell","obedient","obituary","obligate","oblivion","observer","obsessed","obsolete","obstacle","obstruct","occupant","occupier","ointment","olympics","omission","omnivore","oncoming","onlooker","onscreen","operable","operator","opponent","opposing","opposite","outboard","outbound","outbreak","outburst","outclass","outdated","outdoors","outfield","outflank","outgoing","outhouse","outlying","outmatch","outreach","outright","outscore","outshine","outshoot","outsider","outsmart","outtakes","outthink","outweigh","overarch","overbill","overbite","overbook","overcast","overcoat","overcome","overcook","overfeed","overfill","overflow","overfull","overhand","overhang","overhaul","overhead","overhear","overheat","overhung","overkill","overlaid","overload","overlook","overlord","overpass","overplay","overrate","override","overripe","overrule","overshot","oversold","overstay","overstep","overtake","overtime","overtone","overture","overturn","overview","oxymoron","pacifier","pacifism","pacifist","paddling","palpable","pampered","pamperer","pamphlet","pancreas","pandemic","panorama","parabola","parakeet","paralyze","parasail","parasite","parmesan","passable","passably","passcode","passerby","passover","passport","password","pastrami","paternal","patience","pavement","pavilion","paycheck","payphone","peculiar","peddling","pedicure","pedigree","pegboard","penalize","penknife","pentagon","perceive","perjurer","peroxide","petition","phrasing","placidly","platform","platinum","platonic","platypus","playable","playback","playlist","playmate","playroom","playtime","pleading","plethora","plunging","pointing","politely","popsicle","populace","populate","porridge","portable","porthole","portside","possible","possibly","postcard","pouncing","powdered","praising","prancing","prankish","preacher","preamble","precinct","predator","pregnant","premiere","premises","prenatal","preorder","pretense","previous","prideful","princess","pristine","probable","probably","proclaim","procurer","prodigal","profound","progress","prologue","promoter","prompter","promptly","proofing","properly","property","proposal","protegee","protract","protrude","provable","provided","provider","province","prowling","punctual","punisher","purchase","purebred","pureness","purifier","purplish","pursuant","purveyor","pushcart","pushover","puzzling","quadrant","quaintly","quarters","quotable","radiance","radiated","radiator","railroad","rambling","reabsorb","reaction","reactive","reaffirm","reappear","rearview","reassign","reassure","reattach","reburial","rebuttal","reckless","recliner","recovery","recreate","recycled","recycler","reemerge","refinery","refining","refinish","reforest","reformat","reformed","reformer","refreeze","refusing","register","registry","regulate","rekindle","relation","relative","reliable","reliably","reliance","relocate","remedial","remember","reminder","removing","renderer","renegade","renounce","renovate","rentable","reoccupy","repaying","repeated","repeater","rephrase","reporter","reproach","resample","research","reselect","reseller","resemble","resident","residual","resigned","resolute","resolved","resonant","resonate","resource","resubmit","resupply","retainer","retiring","retorted","reusable","reverend","reversal","revision","reviving","revolver","richness","riddance","ripeness","ripening","rippling","riverbed","riveting","robotics","rockband","rockfish","rocklike","rockstar","roulette","rounding","roundish","rumbling","sabotage","saddling","safeness","salaried","salutary","sampling","sanction","sanctity","sandbank","sandfish","sandworm","sanitary","satiable","saturate","saturday","scalding","scallion","scalping","scanning","scarcity","scarring","schedule","scheming","schnapps","scolding","scorpion","scouring","scouting","scowling","scrabble","scraggly","scribble","scribing","scrubbed","scrubber","scrutiny","sculptor","secluded","securely","security","sedation","sedative","sediment","seducing","selected","selector","semantic","semester","semisoft","senorita","sensuous","sequence","serrated","sessions","settling","severity","shakable","shamrock","shelving","shifting","shoplift","shopping","shoptalk","shortage","shortcut","showcase","showdown","showgirl","showroom","shrapnel","shredder","shrewdly","shrouded","shucking","siberian","silenced","silencer","simplify","singular","sinister","situated","sixtieth","sizzling","skeletal","skeleton","skillful","skimming","skimpily","skincare","skinhead","skinless","skinning","skipping","skirmish","skydiver","skylight","slacking","slapping","slashing","slighted","slightly","slimness","slinging","slobbery","sloppily","smashing","smelting","smuggler","smugness","sneezing","snipping","snowbird","snowdrop","snowfall","snowless","snowplow","snowshoe","snowsuit","snugness","spearman","specimen","speckled","spectrum","spelling","spending","spinning","spinster","spirited","splashed","splatter","splendid","splendor","splicing","splinter","splotchy","spoilage","spoiling","spookily","sporting","spotless","spotting","spyglass","squabble","squander","squatted","squatter","squealer","squeegee","squiggle","squiggly","stagnant","stagnate","staining","stalling","stallion","stapling","stardust","starfish","starless","starring","starship","starting","starving","steadier","steadily","steering","sterling","stifling","stimulus","stingily","stinging","stingray","stinking","stoppage","stopping","storable","stowaway","straddle","strained","strainer","stranger","strangle","strategy","strength","stricken","striking","striving","stroller","strongly","struggle","stubborn","stuffing","stunning","sturdily","stylized","subduing","subfloor","subgroup","sublease","sublevel","submerge","subpanel","subprime","subsonic","subtitle","subtotal","subtract","sufferer","suffrage","suitable","suitably","suitcase","sulphate","superior","superjet","superman","supermom","supplier","sureness","surgical","surprise","surround","survival","survivor","suspense","swapping","swimming","swimsuit","swimwear","swinging","sycamore","sympathy","symphony","syndrome","synopses","synopsis","tableful","tackling","tactical","tactless","talisman","tameness","tapeless","tapering","tapestry","tartness","tattered","tattling","theology","theorize","thespian","thieving","thievish","thinness","thinning","thirteen","thousand","threaten","thriving","throttle","throwing","thumping","thursday","tidiness","tightwad","tingling","tinkling","tinsmith","traction","trailing","tranquil","transfer","trapdoor","trapping","traverse","travesty","treading","trespass","triangle","tribunal","trickery","trickily","tricking","tricolor","tricycle","trillion","trimming","trimness","tripping","trolling","trombone","tropical","trousers","trustful","trusting","tubeless","tumbling","turbofan","turbojet","tweezers","twilight","twisting","ultimate","umbrella","unafraid","unbeaten","unbiased","unbitten","unbolted","unbridle","unbroken","unbundle","unburned","unbutton","uncapped","uncaring","uncoated","uncoiled","uncombed","uncommon","uncooked","uncouple","uncurled","underage","underarm","undercut","underdog","underfed","underpay","undertow","underuse","undocked","undusted","unearned","uneasily","unedited","unending","unenvied","unfasten","unfilled","unfitted","unflawed","unframed","unfreeze","unfrozen","unfunded","unglazed","ungloved","ungraded","unguided","unharmed","unheated","unhidden","unicycle","uniquely","unissued","universe","unjustly","unlawful","unleaded","unlinked","unlisted","unloaded","unloader","unlocked","unlovely","unloving","unmanned","unmapped","unmarked","unmasked","unmolded","unmoving","unneeded","unopened","unpadded","unpaired","unpeeled","unpicked","unpinned","unplowed","unproven","unranked","unrented","unrigged","unrushed","unsaddle","unsalted","unsavory","unsealed","unseated","unseeing","unseemly","unselect","unshaken","unshaved","unshaven","unsigned","unsliced","unsmooth","unsocial","unsoiled","unsolved","unsorted","unspoken","unstable","unsteady","unstitch","unsubtle","unsubtly","unsuited","untagged","untapped","unthawed","unthread","untimely","untitled","unturned","unusable","unvalued","unvaried","unveiled","unvented","unviable","unwanted","unwashed","unwieldy","unworthy","upcoming","upheaval","uplifted","uprising","upstairs","upstream","upstroke","upturned","urethane","vacation","vagabond","vagrancy","vanquish","variable","variably","vascular","vaseline","vastness","velocity","vendetta","vengeful","venomous","verbally","vertical","vexingly","vicinity","viewable","viewless","vigorous","vineyard","violator","virtuous","viselike","visiting","vitality","vitalize","vitamins","vocalist","vocalize","vocation","volatile","washable","washbowl","washroom","waviness","whacking","whenever","whisking","whomever","whooping","wildcard","wildfire","wildfowl","wildland","wildlife","wildness","winnings","wireless","wisplike","wobbling","wreckage","wrecking","wrongful","yearbook","yearling","yearning","zeppelin","abdomen","abiding","ability","abreast","abridge","absence","absolve","abstain","acclaim","account","acetone","acquire","acrobat","acronym","actress","acutely","aerosol","affront","ageless","agility","agonize","aground","alfalfa","algebra","almanac","alright","amenity","amiable","ammonia","amnesty","amplify","amusing","anagram","anatomy","anchovy","ancient","android","angelic","angling","angrily","angular","animate","annuity","another","antacid","anthill","antonym","anybody","anymore","anytime","apostle","appease","applaud","applied","approve","apricot","armband","armhole","armless","armoire","armored","armrest","arousal","arrange","arrival","ashamed","aspirin","astound","astride","atrophy","attempt","auction","audible","audibly","average","aviator","awkward","backing","backlit","backlog","badland","badness","baggage","bagging","bagpipe","balance","balcony","banking","banshee","barbell","barcode","barista","barmaid","barrack","barrier","battery","batting","bazooka","blabber","bladder","blaming","blazing","blemish","blinked","blinker","bloated","blooper","blubber","blurred","boaster","bobbing","bobsled","bobtail","bolster","bonanza","bonding","bonfire","booting","bootleg","borough","boxlike","breeder","brewery","brewing","bridged","brigade","brisket","briskly","bristle","brittle","broaden","broadly","broiler","brought","budding","buffalo","buffing","buffoon","bulldog","bullion","bullish","bullpen","bunkbed","busload","cabbage","caboose","cadmium","cahoots","calcium","caliber","caloric","calorie","calzone","camping","candied","canning","canteen","capable","capably","capital","capitol","capsize","capsule","caption","captive","capture","caramel","caravan","cardiac","carless","carload","carnage","carpool","carport","carried","cartoon","carving","carwash","cascade","catalog","catcall","catcher","caterer","catfish","catlike","cattail","catwalk","causing","caution","cavalry","certify","chalice","chamber","channel","chapped","chapter","charger","chariot","charity","charred","charter","chasing","chatter","cheddar","chemist","chevron","chewing","choking","chooser","chowder","citable","citadel","citizen","clapped","clapper","clarify","clarity","clatter","cleaver","clicker","climate","clobber","cloning","closure","clothes","clubbed","clutter","coastal","coaster","cobbler","coconut","coexist","collage","collide","comfort","commend","comment","commode","commute","company","compare","compile","compost","comrade","concave","conceal","concept","concert","concise","condone","conduit","confess","confirm","conform","conical","conjure","consent","console","consult","contact","contend","contest","context","contort","contour","control","convene","convent","copilot","copious","corncob","coroner","correct","corrode","corsage","cottage","country","courier","coveted","coyness","crafter","cranial","cranium","craving","crazily","creamed","creamer","crested","crevice","crewman","cricket","crimson","crinkle","crinkly","crisped","crisply","critter","crouton","crowbar","crucial","crudely","cruelly","cruelty","crumpet","crunchy","crushed","crusher","cryptic","crystal","cubical","cubicle","culprit","culture","cupcake","cupping","curable","curator","curling","cursive","curtain","custard","custody","customs","cycling","cyclist","dancing","darkish","darling","dawdler","daycare","daylong","dayroom","daytime","dazzler","dealing","debrief","decency","decibel","decimal","decline","default","defense","defiant","deflate","defraud","defrost","delouse","density","dentist","denture","deplete","depress","deprive","derived","deserve","desktop","despair","despise","despite","destiny","detract","devalue","deviant","deviate","devious","devotee","diagram","dictate","dimness","dingbat","diocese","dioxide","diploma","dipping","disband","discard","discern","discuss","disdain","disjoin","dislike","dismiss","disobey","display","dispose","dispute","disrupt","distant","distill","distort","divided","dolphin","donated","donator","doorman","doormat","doorway","drained","drainer","drapery","drastic","dreaded","dribble","driller","driving","drizzle","drizzly","dropbox","droplet","dropout","dropper","duchess","ducking","dumping","durable","durably","dutiful","dwelled","dweller","dwindle","dynamic","dynasty","earache","eardrum","earflap","earlobe","earmark","earmuff","earring","earshot","earthen","earthly","easeful","easiest","eatable","eclipse","ecology","economy","edition","effects","egotism","elastic","elderly","elevate","elitism","ellipse","elusive","embargo","embassy","emblaze","emerald","emotion","empathy","emperor","empower","emptier","enclose","encrust","encrypt","endless","endnote","endorse","engaged","engorge","engross","enhance","enjoyer","enslave","ensnare","entitle","entrust","entwine","envious","episode","equator","equinox","erasure","erratic","esquire","essence","etching","eternal","ethanol","evacuee","evasion","evasive","evident","exalted","example","exclaim","exclude","exhaust","expanse","explain","explode","exploit","explore","express","extinct","extrude","faceted","faction","factoid","factual","faculty","failing","falsify","fanatic","fancied","fanfare","fanning","fantasy","fascism","fasting","favored","federal","fencing","ferment","festive","fiction","fidgety","fifteen","figment","filling","finally","finance","finicky","finless","finlike","flaccid","flagman","flakily","flanked","flaring","flatbed","flatten","flattop","fleshed","florist","flyable","flyaway","flyover","footage","footing","footman","footpad","footsie","founder","fragile","framing","frantic","fraying","freebee","freebie","freedom","freeing","freeway","freight","fretful","fretted","frisbee","fritter","frosted","gaining","gallery","gallows","gangway","garbage","garland","garment","garnish","gauging","generic","gentile","geology","gestate","gesture","getaway","getting","giddily","gimmick","gizzard","glacial","glacier","glamour","glaring","glazing","gleeful","gliding","glimmer","glimpse","glisten","glitter","gloater","glorify","glowing","glucose","glutton","goggles","goliath","gondola","gosling","grading","grafted","grandly","grandma","grandpa","granite","granola","grapple","gratify","grating","gravity","grazing","greeter","grimace","gristle","grouped","growing","gruffly","grumble","grumbly","guiding","gumball","gumdrop","gumming","gutless","guzzler","habitat","hacking","hacksaw","haggler","halogen","hammock","hamster","handbag","handful","handgun","handled","handler","handoff","handsaw","handset","hangout","happier","happily","hardhat","harmful","harmony","harness","harpist","harvest","hastily","hatchet","hatless","heading","headset","headway","heavily","heaving","hedging","helpful","helping","hemlock","heroics","heroism","herring","herself","hexagon","humming","hunting","hurling","hurried","husband","hydrant","iciness","ideally","imaging","imitate","immerse","impeach","implant","implode","impound","imprint","improve","impulse","islamic","isotope","issuing","italics","jackpot","janitor","january","jarring","jasmine","jawless","jawline","jaybird","jellied","jitters","jittery","jogging","joining","joyride","jugular","jujitsu","jukebox","juniper","junkman","justice","justify","karaoke","kindred","kinetic","kinfolk","kinship","kinsman","kissing","kitchen","kleenex","krypton","labored","laborer","ladybug","lagging","landing","lantern","lapping","latrine","launder","laundry","legible","legibly","legroom","legwork","leotard","letdown","lettuce","liberty","library","licking","lifting","liftoff","limeade","limping","linseed","liquefy","liqueur","livable","lividly","luckily","lullaby","lumping","lumpish","lustily","machine","magenta","magical","magnify","majesty","mammary","manager","manatee","mandate","manhole","manhood","manhunt","mankind","manlike","manmade","mannish","marbled","marbles","marital","married","marxism","mashing","massive","mastiff","matador","matcher","maximum","moaning","mobster","modular","moisten","mollusk","mongrel","monitor","monsoon","monthly","moocher","moonlit","morally","mortify","mounted","mourner","movable","mullets","mummify","mundane","mushily","mustang","mustard","mutable","myspace","mystify","napping","nastily","natural","nearest","nemeses","nemesis","nervous","neutron","nuclear","nucleus","nullify","numbing","numeral","numeric","nursery","nursing","nurture","nutcase","nutlike","obliged","obscure","obvious","octagon","october","octopus","ominous","onboard","ongoing","onshore","onstage","opacity","operate","opossum","osmosis","outback","outcast","outcome","outgrow","outlast","outline","outlook","outmost","outpost","outpour","outrage","outrank","outsell","outward","overact","overall","overbid","overdue","overfed","overlap","overlay","overpay","overrun","overtly","overuse","oxidant","oxidize","pacific","padding","padlock","pajamas","pampers","pancake","panning","panther","paprika","papyrus","paradox","parched","parking","parkway","parsley","parsnip","partake","parting","partner","passage","passing","passion","passive","pastime","pasture","patient","patriot","payable","payback","payment","payroll","pelican","penalty","pendant","pending","pennant","pension","percent","perfume","perjury","petunia","phantom","phoenix","phonics","placard","placate","planner","plaster","plastic","plating","platter","playful","playing","playoff","playpen","playset","pliable","plunder","plywood","pointed","pointer","polygon","polymer","popcorn","popular","portion","postage","postbox","posting","posture","postwar","pouring","powdery","pranker","praying","preachy","precise","precook","predict","preface","pregame","prelude","premium","prepaid","preplan","preshow","presoak","presume","preteen","pretext","pretzel","prevail","prevent","preview","primary","primate","privacy","private","probing","problem","process","prodigy","produce","product","profane","profile","progeny","program","propose","prorate","proving","provoke","prowess","prowler","pruning","psychic","pulsate","pungent","purging","puritan","pursuit","pushing","pushpin","putdown","pyramid","quaking","qualify","quality","quantum","quarrel","quartet","quicken","quickly","quintet","ragweed","railcar","railing","railway","ranging","ranking","ransack","ranting","rasping","ravioli","reactor","reapply","reawake","rebirth","rebound","rebuild","rebuilt","recital","reclaim","recluse","recolor","recount","rectify","reenact","reenter","reentry","referee","refined","refocus","refract","refrain","refresh","refried","refusal","regalia","regally","regress","regroup","regular","reissue","rejoice","relapse","related","relearn","release","reliant","relieve","relight","remarry","rematch","remnant","remorse","removal","removed","remover","renewal","renewed","reoccur","reorder","repaint","replace","replica","reprint","reprise","reptile","request","require","reroute","rescuer","reshape","reshoot","residue","respect","rethink","retinal","retired","retiree","retouch","retrace","retract","retrain","retread","retreat","retrial","retying","reunion","reunite","reveler","revenge","revenue","revered","reverse","revisit","revival","reviver","rewrite","ribcage","rickety","ricotta","rifling","rigging","rimless","rinsing","ripcord","ripping","riptide","risotto","ritalin","riveter","roaming","robbing","rocking","rotting","rotunda","roundup","routine","routing","rubbing","rubdown","rummage","rundown","running","rupture","sabbath","saddled","sadness","saffron","sagging","salvage","sandbag","sandbar","sandbox","sanding","sandlot","sandpit","sapling","sarcasm","sardine","satchel","satisfy","savanna","savings","scabbed","scalded","scaling","scallop","scandal","scanner","scarily","scholar","science","scooter","scoring","scoured","scratch","scrawny","scrooge","scruffy","scrunch","scuttle","secrecy","secular","segment","seismic","seizing","seltzer","seminar","senator","serpent","service","serving","setback","setting","seventh","seventy","shadily","shading","shakily","shaking","shallot","shallow","shampoo","shaping","sharper","sharpie","sharply","shelter","shifter","shimmer","shindig","shingle","shining","shopper","shorten","shorter","shortly","showbiz","showing","showman","showoff","shrivel","shudder","shuffle","siamese","sibling","sighing","silicon","sincere","singing","sinless","sinuous","sitting","sixfold","sixteen","sixties","sizable","sizably","skating","skeptic","skilled","skillet","skimmed","skimmer","skipper","skittle","skyline","skyward","slacked","slacker","slander","slashed","slather","slicing","sliding","sloping","slouchy","smartly","smasher","smashup","smitten","smoking","smolder","smother","snagged","snaking","snippet","snooper","snoring","snorkel","snowcap","snowman","snuggle","species","specked","speller","spender","spinach","spindle","spinner","spinout","spirits","splashy","splurge","spoiled","spoiler","sponsor","spotted","spotter","spousal","sputter","squeeze","squishy","stadium","staging","stained","stamina","stammer","stardom","staring","starlet","starlit","starter","startle","startup","starved","stature","statute","staunch","stellar","stencil","sterile","sternum","stiffen","stiffly","stimuli","stinger","stipend","stoning","stopped","stopper","storage","stowing","stratus","stretch","strudel","stubbed","stubble","stubbly","student","studied","stuffed","stumble","stunned","stunner","styling","stylist","subdued","subject","sublime","subplot","subside","subsidy","subsoil","subtext","subtype","subzero","suction","suffice","suggest","sulfate","sulfide","sulfite","support","supreme","surface","surgery","surging","surname","surpass","surplus","surreal","survive","suspect","suspend","swagger","swifter","swiftly","swimmer","swinger","swizzle","swooned","symptom","synapse","synergy","t-shirt","tabasco","tabloid","tacking","tactful","tactics","tactile","tadpole","tainted","tannery","tanning","tantrum","tapered","tapioca","tapping","tarnish","tasting","theater","thermal","thermos","thicken","thicket","thimble","thinner","thirsty","thrower","thyself","tidings","tighten","tightly","tigress","timothy","tinfoil","tinwork","tipping","tracing","tractor","trading","traffic","tragedy","traitor","trapeze","trapped","trapper","treason","trekker","tremble","tribune","tribute","triceps","trickle","trident","trilogy","trimmer","trinity","triumph","trivial","trodden","tropics","trouble","truffle","trustee","tubular","tucking","tuesday","tuition","turbine","turmoil","twiddle","twisted","twister","twitter","unaired","unawake","unaware","unbaked","unblock","unboxed","uncanny","unchain","uncheck","uncivil","unclasp","uncloak","uncouth","uncover","uncross","uncrown","uncured","undated","undergo","undoing","undress","undying","unearth","uneaten","unequal","unfazed","unfiled","unfixed","ungodly","unhappy","unheard","unhinge","unicorn","unified","unifier","unkempt","unknown","unlaced","unlatch","unleash","unlined","unloved","unlucky","unmixed","unmoral","unmoved","unnamed","unnerve","unpaved","unquote","unrated","unrobed","unsaved","unscrew","unstuck","unsworn","untaken","untamed","untaxed","untimed","untried","untruth","untwist","untying","unusual","unvocal","unweave","unwired","unwound","unwoven","upchuck","upfront","upgrade","upright","upriver","upscale","upstage","upstart","upstate","upswing","uptight","uranium","urgency","urology","useable","utensil","utility","utilize","vacancy","vaguely","valiant","vanilla","vantage","variety","various","varmint","varnish","varsity","varying","vending","venture","verbose","verdict","version","vertigo","veteran","victory","viewing","village","villain","vintage","violate","virtual","viscous","visible","visibly","visitor","vitally","vividly","vocally","voicing","voltage","volumes","voucher","walmart","wannabe","wanting","washday","washing","washout","washtub","wasting","whoever","whoopee","wielder","wildcat","willing","wincing","winking","wistful","womanly","worried","worrier","wrangle","wrecker","wriggle","wriggly","wrinkle","wrinkly","writing","written","wronged","wrongly","wrought","yanking","yapping","yelling","yiddish","zealous","zipfile","zipping","zoology","abacus","ablaze","abroad","absurd","accent","aching","acting","action","active","affair","affirm","afford","aflame","afloat","afraid","agency","agenda","aghast","agreed","aliens","almost","alumni","always","ambush","amends","amount","amulet","amused","amuser","anchor","anemia","anemic","angled","angler","angles","animal","anthem","antics","antler","anyhow","anyone","anyway","apache","appear","armful","arming","armory","around","arrest","arrive","ascend","ascent","asleep","aspect","aspire","astute","atrium","attach","attain","attest","attire","august","author","autism","avatar","avenge","avenue","awaken","awhile","awning","babble","babied","baboon","backed","backer","backup","badass","baffle","bagful","bagged","baggie","bakery","baking","bamboo","banana","banish","banked","banker","banner","banter","barbed","barber","barley","barman","barrel","basics","basket","batboy","battle","bauble","blazer","bleach","blinks","blouse","bluish","blurry","bobbed","bobble","bobcat","bogged","boggle","bonded","bonnet","bonsai","booted","bootie","boring","botany","bottle","bottom","bounce","bouncy","bovine","boxcar","boxing","breach","breath","breeze","breezy","bright","broken","broker","bronco","bronze","browse","brunch","bubble","bubbly","bucked","bucket","buckle","budget","buffed","buffer","bulgur","bundle","bungee","bunion","busboy","busily","cabana","cabbie","cackle","cactus","caddie","camera","camper","campus","canary","cancel","candle","canine","canned","cannon","cannot","canola","canopy","canyon","capped","carbon","carded","caress","caring","carrot","cartel","carton","casing","casino","casket","catchy","catnap","catnip","catsup","cattle","caucus","causal","caviar","cavity","celery","celtic","cement","census","chance","change","chaste","chatty","cheese","cheesy","cherub","chewer","chirpy","choice","choosy","chosen","chrome","chubby","chummy","cinema","circle","circus","citric","citrus","clammy","clamor","clause","clench","clever","client","clinic","clique","clover","clumsy","clunky","clutch","cobalt","cobweb","coerce","coffee","collar","collie","colony","coming","common","compel","comply","concur","copied","copier","coping","copper","cornea","corned","corner","corral","corset","cortex","cosmic","cosmos","cotton","county","cozily","cradle","crafty","crayon","crazed","crease","create","credit","creole","cringe","crispy","crouch","crummy","crying","cuddle","cuddly","cupped","curdle","curfew","curing","curled","curler","cursor","curtly","curtsy","cussed","cyclic","cymbal","dagger","dainty","dander","danger","dangle","dating","daybed","deacon","dealer","debate","debtor","debunk","decade","deceit","decent","decode","decree","deduce","deduct","deepen","deeply","deface","defame","defeat","defile","define","deftly","defuse","degree","delete","deluge","deluxe","demise","demote","denial","denote","dental","depict","deploy","deport","depose","deputy","derail","detail","detest","device","diaper","dicing","dilute","dimmed","dimmer","dimple","dinghy","dining","dinner","dipped","dipper","disarm","dismay","disown","diving","doable","docile","dollar","dollop","domain","doodle","dorsal","dosage","dotted","douche","dreamt","dreamy","dreary","drench","drippy","driven","driver","drudge","dubbed","duffel","dugout","duller","duplex","duress","during","earful","earthy","earwig","easily","easing","easter","eatery","eating","eclair","edging","editor","effort","egging","eggnog","either","elated","eldest","eleven","elixir","embark","emblem","embody","emboss","enable","enamel","encode","encore","ending","energy","engine","engulf","enrage","enrich","enroll","ensure","entail","entire","entity","entomb","entrap","entree","enzyme","equate","equity","erased","eraser","errand","errant","eskimo","estate","ethics","evolve","excess","excuse","exhale","exhume","exodus","expand","expend","expert","expire","expose","extent","extras","fabric","facial","facing","factor","fading","falcon","family","famine","faster","faucet","fedora","feeble","feisty","feline","fender","ferret","ferris","fervor","fester","fiddle","figure","filing","filled","filler","filter","finale","finite","flashy","flatly","fleshy","flight","flinch","floral","flying","follow","fondly","fondue","footer","fossil","foster","frayed","freely","french","frenzy","friday","fridge","friend","fringe","frolic","frosty","frozen","frying","galley","gallon","galore","gaming","gander","gangly","garage","garden","gargle","garlic","garnet","garter","gating","gazing","geiger","gender","gently","gerbil","giblet","giggle","giggly","gigolo","gilled","girdle","giving","gladly","glance","glider","glitch","glitzy","gloomy","gluten","gnarly","google","gopher","gorged","gossip","gothic","gotten","graded","grader","granny","gravel","graves","greedy","grinch","groggy","groove","groovy","ground","grower","grudge","grunge","gurgle","gutter","hacked","hacker","halved","halves","hamlet","hamper","handed","hangup","hankie","harbor","hardly","hassle","hatbox","hatred","hazard","hazily","hazing","headed","header","helium","helmet","helper","herald","herbal","hermit","hubcap","huddle","humble","humbly","hummus","humped","humvee","hunger","hungry","hunter","hurdle","hurled","hurler","hurray","husked","hybrid","hyphen","idiocy","ignore","iguana","impale","impart","impish","impose","impure","iodine","iodize","iphone","itunes","jackal","jacket","jailer","jargon","jersey","jester","jigsaw","jingle","jockey","jogger","jovial","joyous","juggle","jumble","junior","junkie","jurist","justly","karate","keenly","kennel","kettle","kimono","kindle","kindly","kisser","kitten","kosher","ladder","ladies","lagged","lagoon","landed","lapdog","lapped","laptop","lather","latter","launch","laurel","lavish","lazily","legacy","legend","legged","legume","length","lesser","letter","levers","liable","lifter","likely","liking","lining","linked","liquid","litmus","litter","little","lively","living","lizard","lugged","lumber","lunacy","lushly","luster","luxury","lyrics","maggot","maimed","making","mammal","manger","mangle","manila","manned","mantis","mantra","manual","margin","marina","marine","marlin","maroon","marrow","marshy","mascot","mashed","masses","mating","matrix","matron","matted","matter","mayday","moaner","mobile","mocker","mockup","modify","module","monday","mooing","mooned","morale","mosaic","motion","motive","moving","mowing","mulled","mumble","muppet","museum","musket","muster","mutate","mutiny","mutual","muzzle","myself","naming","napkin","napped","narrow","native","nature","nearby","nearly","neatly","nebula","nectar","negate","nephew","neuron","neuter","nibble","nimble","nimbly","nuclei","nugget","number","numbly","nutmeg","nuzzle","object","oblong","obtain","obtuse","occupy","ocelot","octane","online","onward","oppose","outage","outbid","outfit","outing","outlet","output","outwit","oxford","oxygen","oyster","pacify","padded","paddle","paging","palace","paltry","panama","pantry","papaya","parade","parcel","pardon","parish","parlor","parole","parrot","parted","partly","pasted","pastel","pastor","patchy","patrol","pauper","paving","pawing","payday","paying","pebble","pebbly","pectin","pellet","pelvis","pencil","penpal","perish","pester","petite","petted","phobia","phoney","phrase","plasma","plated","player","pledge","plenty","plural","pointy","poison","poking","police","policy","polish","poncho","poplar","popper","porous","portal","portly","posing","possum","postal","posted","poster","pounce","powwow","prance","prayer","precut","prefix","prelaw","prepay","preppy","preset","pretty","prewar","primal","primer","prison","prissy","pronto","proofs","proton","proved","proven","prozac","public","pucker","pueblo","pumice","pummel","puppet","purely","purify","purist","purity","purple","pusher","pushup","puzzle","python","quarry","quench","quiver","racing","racism","racoon","radial","radish","raffle","ragged","raging","raider","raisin","raking","ramble","ramrod","random","ranged","ranger","ranked","rarity","rascal","ravage","ravine","raving","reason","rebate","reboot","reborn","rebuff","recall","recant","recast","recede","recent","recess","recite","recoil","recopy","record","recoup","rectal","refill","reflex","reflux","refold","refund","refuse","refute","regain","reggae","regime","region","reheat","rehire","rejoin","relish","relive","reload","relock","remake","remark","remedy","remold","remote","rename","rental","rented","renter","reopen","repair","repave","repeal","repent","replay","repose","repost","resale","reseal","resend","resent","resize","resort","result","resume","retail","retake","retold","retool","return","retype","reveal","reverb","revert","revise","revoke","revolt","reward","rewash","rewind","rewire","reword","rework","rewrap","ribbon","riches","richly","ridden","riding","rimmed","ripple","rising","roamer","robust","rocker","rocket","roping","roster","rotten","roving","rubbed","rubber","rubble","ruckus","rudder","ruined","rumble","runner","runway","sacred","sadden","safari","safely","salami","salary","saline","saloon","salute","sample","sandal","sanded","savage","savior","scabby","scarce","scared","scenic","scheme","scorch","scored","scorer","scotch","scouts","screen","scribe","script","scroll","scurvy","second","secret","sector","sedate","seduce","seldom","senate","senior","septic","septum","sequel","series","sermon","sesame","settle","shabby","shaded","shadow","shanty","sheath","shelve","sherry","shield","shifty","shimmy","shorts","shorty","shower","shrank","shriek","shrill","shrimp","shrine","shrink","shrubs","shrunk","siding","sierra","siesta","silent","silica","silver","simile","simple","simply","singer","single","sinner","sister","sitcom","sitter","sizing","sizzle","skater","sketch","skewed","skewer","skiing","skinny","slacks","sleeve","sliced","slicer","slider","slinky","sliver","slogan","sloped","sloppy","sludge","smoked","smooth","smudge","smudgy","smugly","snazzy","sneeze","snitch","snooze","snugly","specks","speech","sphere","sphinx","spider","spiffy","spinal","spiral","spleen","splice","spoils","spoken","sponge","spongy","spooky","sports","sporty","spotty","spouse","sprain","sprang","sprawl","spring","sprint","sprite","sprout","spruce","sprung","squall","squash","squeak","squint","squire","squirt","stable","staple","starch","starry","static","statue","status","stench","stereo","stifle","stingy","stinky","stitch","stooge","streak","stream","street","stress","strewn","strict","stride","strife","strike","strive","strobe","strode","struck","strung","stucco","studio","stuffy","stupor","sturdy","stylus","sublet","subpar","subtly","suburb","subway","sudden","sudoku","suffix","suitor","sulfur","sullen","sultry","supper","supply","surely","surfer","survey","swerve","switch","swivel","swoosh","system","tables","tablet","tackle","taking","talcum","tamale","tamper","tanned","target","tarmac","tartar","tartly","tassel","tattle","tattoo","tavern","thesis","thinly","thirty","thrash","thread","thrift","thrill","thrive","throat","throng","tidbit","tiling","timing","tingle","tingly","tinker","tinsel","tipoff","tipped","tipper","tiptop","tiring","tissue","trance","travel","treble","tremor","trench","triage","tricky","trifle","tripod","trophy","trough","trowel","trunks","tumble","turban","turkey","turret","turtle","twelve","twenty","twisty","twitch","tycoon","umpire","unable","unbend","unbent","unclad","unclip","unclog","uncork","undead","undone","unease","uneasy","uneven","unfair","unfold","unglue","unholy","unhook","unison","unkind","unless","unmade","unpack","unpaid","unplug","unread","unreal","unrest","unripe","unroll","unruly","unsafe","unsaid","unseen","unsent","unsnap","unsold","unsure","untidy","untold","untrue","unused","unwary","unwell","unwind","unworn","upbeat","update","upheld","uphill","uphold","upload","uproar","uproot","upside","uptake","uptown","upward","upwind","urchin","urgent","urging","usable","utmost","utopia","vacant","vacate","valium","valley","vanish","vanity","varied","vastly","veggie","velcro","velvet","vendor","verify","versus","vessel","viable","viewer","violet","violin","vision","volley","voting","voyage","waffle","waggle","waking","walnut","walrus","wanted","wasabi","washed","washer","waving","whacky","whinny","whoops","widely","widget","wilder","wildly","willed","willow","winner","winter","wiring","wisdom","wizard","wobble","wobbly","wooing","wreath","wrench","yearly","yippee","yogurt","yonder","zodiac","zombie","zoning","abide","acorn","affix","afoot","agent","agile","aging","agony","ahead","alarm","album","alias","alibi","alike","alive","aloft","aloha","alone","aloof","amaze","amber","amigo","amino","amiss","among","ample","amply","amuck","anger","anime","ankle","annex","antsy","anvil","aorta","apple","apply","april","apron","aptly","arena","argue","arise","armed","aroma","arose","array","arson","ashen","ashes","aside","askew","atlas","attic","audio","avert","avoid","await","award","aware","awoke","bacon","badge","badly","bagel","baggy","baked","balmy","banjo","barge","basil","basin","basis","batch","baton","blade","blame","blank","blast","bleak","bleep","blend","bless","blimp","bling","blitz","bluff","blunt","blurb","blurt","blush","bogus","boned","boney","bonus","booth","boots","boozy","borax","botch","boxer","briar","bribe","brick","bride","bring","brink","brook","broom","brunt","brush","brute","buddy","buggy","bulge","bully","bunch","bunny","cable","cache","cacti","caddy","cadet","cameo","canal","candy","canon","carat","cargo","carol","carry","carve","catty","cause","cedar","chafe","chain","chair","chant","chaos","chaps","charm","chase","cheek","cheer","chemo","chess","chest","chevy","chewy","chief","chili","chill","chimp","chive","chomp","chuck","chump","chunk","churn","chute","cider","cinch","civic","civil","claim","clamp","clang","clash","clasp","class","clean","clear","cleat","cleft","clerk","cling","cloak","clock","clone","cloud","clump","coach","cocoa","comfy","comic","comma","conch","coral","corny","couch","cough","could","cover","cramp","crane","crank","crate","crave","crazy","creed","creme","crepe","crept","cried","crier","crimp","croak","crock","crook","croon","cross","crowd","crown","crumb","crust","cupid","curly","curry","curse","curve","curvy","cushy","cycle","daily","dairy","daisy","dance","dandy","dares","dealt","debit","debug","decaf","decal","decay","decoy","defog","deity","delay","delta","denim","dense","depth","derby","deuce","diary","dimly","diner","dingo","dingy","ditch","ditto","ditzy","dizzy","dodge","dodgy","doily","doing","dolly","donor","donut","doozy","dowry","drank","dress","dried","drier","drift","drone","drool","droop","drove","drown","ducky","duvet","dwarf","dweeb","eagle","early","easel","eaten","ebony","ebook","ecard","eject","elbow","elite","elope","elude","elves","email","ember","emcee","emote","empty","ended","envoy","equal","error","erupt","essay","ether","evade","evict","evoke","exact","exert","exile","expel","fable","false","fancy","feast","femur","fence","ferry","fetal","fetch","fever","fiber","fifth","fifty","filth","finch","finer","flail","flaky","flame","flask","flick","flier","fling","flint","flirt","float","flock","floss","flyer","folic","foyer","frail","frame","frays","fresh","fried","frill","frisk","front","froth","frown","fruit","gaffe","gains","gamma","gauze","gecko","genre","gents","getup","giant","giddy","gills","given","giver","gizmo","glade","glare","glass","glory","gloss","glove","going","gonad","gooey","goofy","grain","grant","grape","graph","grasp","grass","gravy","green","grief","grill","grime","grimy","groin","groom","grope","grout","grove","growl","grunt","guide","guise","gully","gummy","gusto","gusty","haiku","hanky","happy","hardy","harsh","haste","hasty","haunt","haven","heave","hedge","hefty","hence","henna","herbs","hertz","human","humid","hurry","icing","idiom","igloo","image","imply","irate","issue","ivory","jaunt","jawed","jelly","jiffy","jimmy","jolly","judge","juice","juicy","jumbo","juror","kabob","karma","kebab","kitty","knelt","knoll","koala","kooky","kudos","ladle","lance","lanky","lapel","large","lasso","latch","legal","lemon","level","lilac","lilly","limes","limit","lingo","lived","liver","lucid","lunar","lurch","lusty","lying","macaw","magma","maker","mango","mangy","manly","manor","march","mardi","marry","mauve","maybe","mocha","molar","moody","morse","mossy","motor","motto","mouse","mousy","mouth","movie","mower","mulch","mumbo","mummy","mumps","mural","murky","mushy","music","musky","musty","nacho","nanny","nappy","nervy","never","niece","nifty","ninja","ninth","nutty","nylon","oasis","ocean","olive","omega","onion","onset","opium","other","otter","ought","ounce","outer","ovary","ozone","paced","pagan","pager","panda","panic","pants","paper","parka","party","pasta","pasty","patio","paver","payee","payer","pecan","penny","perch","perky","pesky","petal","petri","petty","phony","photo","plank","plant","plaza","pleat","pluck","poach","poise","poker","polar","polio","polka","poppy","poser","pouch","pound","power","press","pried","primp","print","prior","prism","prize","probe","prone","prong","props","proud","proxy","prude","prune","pulse","punch","pupil","puppy","purge","purse","pushy","quack","quail","quake","qualm","query","quiet","quill","quilt","quirk","quote","rabid","radar","radio","rally","ranch","rants","raven","reach","rebel","rehab","relax","relay","relic","remix","reply","rerun","reset","retry","reuse","rhyme","rigid","rigor","rinse","ritzy","rival","roast","robin","rocky","rogue","roman","rover","royal","rumor","runny","rural","sadly","saggy","saint","salad","salon","salsa","sandy","santa","sappy","sassy","satin","saucy","sauna","saved","savor","scale","scant","scarf","scary","scion","scoff","scone","scoop","scope","scorn","scrap","scuba","scuff","sedan","sepia","serve","setup","shack","shady","shaft","shaky","shale","shame","shank","shape","share","shawl","sheep","sheet","shelf","shell","shine","shiny","shirt","shock","shone","shore","shout","shove","shown","showy","shrug","shush","silly","siren","sixth","skied","skier","skies","skirt","skype","slain","slang","slate","sleek","sleep","sleet","slept","slick","slimy","slurp","slush","small","smell","smile","smirk","smite","smith","smock","smoky","snack","snare","snarl","sneak","sneer","snide","sniff","snore","snort","snout","snowy","snuff","speak","speed","spent","spied","spill","spilt","spiny","spoof","spool","spoon","spore","spout","spray","spree","sprig","squad","squid","stack","staff","stage","stamp","stand","stank","stark","stash","state","stays","steam","steed","steep","stick","stilt","stock","stoic","stoke","stole","stomp","stony","stood","stool","stoop","storm","stout","stove","straw","stray","strep","strum","strut","stuck","study","stump","stung","stunt","suave","sugar","suing","sushi","swarm","swear","sweat","sweep","swell","swept","swipe","swirl","swoop","swore","sworn","swung","syrup","tabby","tacky","talon","tamer","tarot","taste","tasty","taunt","thank","theft","theme","these","thigh","thing","think","thong","thorn","those","thumb","tiara","tibia","tidal","tiger","timid","trace","track","trade","train","traps","trash","treat","trend","trial","tried","trout","truce","truck","trump","truth","tubby","tulip","tummy","tutor","tweak","tweed","tweet","twerp","twice","twine","twins","twirl","tying","udder","ultra","uncle","uncut","unify","union","unlit","untie","until","unwed","unzip","upper","urban","usage","usher","usual","utter","valid","value","vegan","venue","venus","verse","vibes","video","viper","viral","virus","visor","vista","vixen","voice","voter","vowed","vowel","wafer","waged","wager","wages","wagon","waltz","watch","water","wharf","wheat","whiff","whiny","whole","widen","widow","width","wince","wired","wispy","woozy","worry","worst","wound","woven","wrath","wrist","xerox","yahoo","yeast","yield","yo-yo","yodel","yummy","zebra","zesty","zippy","able","acid","acre","acts","afar","aged","ahoy","aide","aids","ajar","aloe","alto","amid","anew","aqua","area","army","ashy","atom","atop","avid","awry","axis","barn","bash","bath","bats","blah","blip","blob","blog","blot","boat","body","boil","bolt","bony","book","boss","both","boxy","brim","bulb","bulk","bunt","bush","bust","buzz","cage","cake","calm","cane","cape","case","cash","chef","chip","chop","chug","city","clad","claw","clay","clip","coat","coil","coke","cola","cold","colt","coma","come","cone","cope","copy","cork","cost","cozy","crib","crop","crux","cube","cure","cusp","darn","dart","dash","data","dawn","dean","deck","deed","deem","defy","deny","dial","dice","dill","dime","dish","disk","dock","dole","dork","dose","dove","down","doze","drab","draw","drew","drum","duct","dude","duke","duly","dupe","dusk","dust","duty","each","eats","ebay","echo","edge","edgy","emit","envy","epic","even","evil","exes","exit","fade","fall","fame","fang","feed","feel","film","five","flap","fled","flip","flop","foam","foil","folk","font","food","fool","from","gala","game","gave","gawk","gear","geek","gift","glue","gnat","goal","goes","golf","gone","gong","good","goon","gore","gory","gout","gown","grab","gray","grew","grid","grip","grit","grub","gulf","gulp","guru","gush","guts","half","halt","hash","hate","hazy","heap","heat","huff","hula","hulk","hull","hunk","hurt","hush","icky","icon","idly","ipad","ipod","iron","item","java","jaws","jazz","jeep","jinx","john","jolt","judo","july","jump","june","jury","keep","kelp","kept","kick","kiln","kilt","king","kite","kiwi","knee","kung","lair","lake","lard","lark","lash","last","late","lazy","left","lego","lend","lens","lent","life","lily","limb","line","lint","lion","lisp","list","lung","lure","lurk","mace","malt","mama","many","math","mold","most","move","much","muck","mule","mute","mutt","myth","nail","name","nape","navy","neon","nerd","nest","next","oboe","ogle","oink","okay","omen","omit","only","onto","onyx","oops","ooze","oozy","opal","open","ouch","oval","oven","palm","pang","path","pelt","perm","peso","plod","plop","plot","plow","ploy","plug","plus","poem","poet","pogo","polo","pond","pony","pope","pork","posh","pout","pull","pulp","puma","punk","purr","putt","quit","race","rack","raft","rage","rake","ramp","rare","rash","ream","rely","reps","rice","ride","rift","rind","rink","riot","rise","risk","robe","romp","rope","rosy","ruby","rule","runt","ruse","rush","rust","saga","sage","said","sake","salt","same","sank","sash","scam","self","send","shed","ship","shun","shut","sift","silk","silo","silt","size","skid","slab","slam","slaw","sled","slip","slit","slot","slug","slum","smog","snap","snub","spew","spry","spud","spur","stem","step","stew","stir","such","suds","sulk","swab","swan","sway","taco","take","tall","tank","taps","task","that","thaw","thee","thud","thus","tidy","tile","till","tilt","tint","tiny","tray","tree","trio","turf","tusk","tutu","twig","tyke","unit","upon","used","user","veal","very","vest","veto","vice","visa","void","wake","walk","wand","wasp","wavy","wham","wick","wife","wifi","wilt","wimp","wind","wing","wipe","wiry","wise","wish","wolf","womb","woof","wool","word","work","xbox","yard","yarn","yeah","yelp","yoga","yoyo","zero","zips","zone","zoom","aim","art","bok","cod","cut","dab","dad","dig","dry","duh","duo","eel","elf","elk","elm","emu","fax","fit","foe","fog","fox","gab","gag","gap","gas","gem","guy","had","hug","hut","ice","icy","ion","irk","ivy","jab","jam","jet","job","jot","keg","lid","lip","map","mom","mop","mud","mug","nag","net","oaf","oak","oat","oil","old","opt","owl","pep","pod","pox","pry","pug","rug","rut","say","shy","sip","sly","tag","try","tug","tux","wad","why","wok","wow","yam","yen","yin","zap","zen","zit"]};var Rn=a(323),In=a.n(Rn);const An=[{id:"not_available",label:"n/a",strength:0},{id:"very-weak",label:"Very weak",strength:1},{id:"weak",label:"Weak",strength:60},{id:"fair",label:"Fair",strength:80},{id:"strong",label:"Strong",strength:112},{id:"very-strong",label:"Very strong",strength:128}],Pn={mask_upper:{label:"A-Z",characters:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},mask_lower:{label:"a-z",characters:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},mask_digit:{label:"0-9",characters:["0","1","2","3","4","5","6","7","8","9"]},mask_char1:{label:"# $ % & @ ^ ~",characters:["#","$","%","&","@","^","~"]},mask_parenthesis:{label:"{ [ ( | ) ] }",characters:["{","(","[","|","]",")","}"]},mask_char2:{label:". , : ;",characters:[".",",",":",";"]},mask_char3:{label:"' \" `",characters:["'",'"',"`"]},mask_char4:{label:"/ \\ _ -",characters:["/","\\","_","-"]},mask_char5:{label:"< * + ! ? =",characters:["<","*","+","!","?","="]},mask_emoji:{label:"😘",characters:["😀","😁","😂","😃","😄","😅","😆","😇","😈","😉","😊","😋","😌","😍","😎","😏","😐","😑","😒","😓","😔","😕","😖","😗","😘","😙","😚","😛","😜","😝","😞","😟","😠","😡","😢","😣","😤","😥","😦","😧","😨","😩","😪","😫","😬","😭","😮","😯","😰","😱","😲","😳","😴","😵","😶","😷","😸","😹","😺","😻","😼","😽","😾","😿","🙀","🙁","🙂","🙃","🙄","🙅","🙆","🙇","🙈","🙉","🙊","🙋","🙌","🙍","🙎","🙏"]}},Dn=["O","l","|","I","0","1"],Ln=e=>{const t=Object.entries(Pn).filter((([t])=>e[t])).reduce(((e,[t])=>[...e,...Pn[t].characters]),[]).filter((t=>!e.exclude_look_alike_chars||!Dn.includes(t)));return zn(e.length,t.length)},Tn=(e="")=>{const t=(new(In())).splitGraphemes(e);let a=0;for(const[e]of Object.entries(Pn)){const n=Pn[e];t.some((e=>n.characters.includes(e)))&&(a+=n.characters.length)}return zn(t.length,a)},Un=(e=0,t="")=>{const a=_n["en-UK"];return zn(e,128*t.length+a.length+3)},jn=(e=0)=>An.reduce(((t,a)=>t?a.strength>t.strength&&e>=a.strength?a:t:a));function zn(e,t){return e&&t?e*(Math.log(t)/Math.log(2)):0}const Mn=function(e){const t={isPassphrase:!1};if(!e)return t;const a=_n["en-UK"].reduce(((e,t)=>{const a=e.remainingSecret.replace(new RegExp(t,"g"),""),n=(e.remainingSecret.length-a.length)/t.length;return{numberReplacement:e.numberReplacement+n,remainingSecret:a}}),{numberReplacement:0,remainingSecret:e.toLowerCase()}),n=a.remainingSecret,i=a.numberReplacement-1;if(1===i)return-1===e.indexOf(n)||e.startsWith(n)||e.endsWith(n)?t:{numberWords:2,separator:n,isPassphrase:!0};if(0==n.length)return{numberWords:a.numberReplacement,separator:"",isPassphrase:!0};if(n.length%i!=0)return t;const s=n.length/i,o=n.substring(0,s),r=String(o).replace(/([-()\[\]{}+?*.$\^|,:#t.split(".").reduce(((e,t)=>void 0===e?e:e[t]),e),Bn=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const a=t.whitelistedProtocols||[Gn.HTTP,Gn.HTTPS],n=[Gn.JAVASCRIPT],i=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&i&&(e=`${i}//${e}`);try{const t=new URL(e);return!n.includes(t.protocol)&&!!a.includes(t.protocol)&&t.href}catch(e){return!1}},Gn={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class Kn{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const a=`passbolt.plugins.${e}`,n=Vn(this.settings,a)||null;if(n&&"object"==typeof n){const e=Vn(n,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return Vn(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return Vn(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=Vn(this.settings,"passbolt.legal.terms.url");return!!e&&Bn(e)}get privacyLink(){const e=Vn(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Bn(e)}get registrationPublic(){return!0===Vn(this.settings,"passbolt.registration.public")}get debug(){return!0===Vn(this.settings,"app.debug")}get url(){return Vn(this.settings,"app.url")||""}get version(){return Vn(this.settings,"app.version.number")}get locale(){return Vn(this.settings,"app.locale")||Kn.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return Vn(this.settings,"passbolt.plugins.locale.options")||Kn.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return Vn(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[Kn.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}class Hn{static validate(e){return"string"==typeof e&&Ct()("^[\\p{L}0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\p{L}0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[_\\p{L}0-9][-_\\p{L}0-9]*\\.)*(?:[\\p{L}0-9][-\\p{L}0-9]{0,62})\\.(?:(?:[a-z]{2}\\.)?[a-z]{2,})$","i").test(e)}}class $n{constructor(e){if("string"!=typeof e)throw Error("The regex should be a string.");this.regex=new(Ct())(e)}validate(e){return"string"==typeof e&&this.regex.test(e)}}class Zn{static validate(e,t){return Zn.getValidator(t).validate(e)}static getValidator(e){return e&&e instanceof Kn&&e.emailValidateRegex?new $n(e.emailValidateRegex):Hn}}function Yn(){return Yn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findPolicies:()=>{},shouldRunDictionaryCheck:()=>{}});class Qn extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{policies:null,getPolicies:this.getPolicies.bind(this),findPolicies:this.findPolicies.bind(this),shouldRunDictionaryCheck:this.shouldRunDictionaryCheck.bind(this)}}async findPolicies(){if(null!==this.getPolicies())return;const e=await this.props.context.port.request("passbolt.password-policies.get");this.setState({policies:e})}getPolicies(){return this.state.policies}shouldRunDictionaryCheck(){return Boolean(this.state.policies?.external_dictionary_check)}render(){return n.createElement(Jn.Provider,{value:this.state},this.props.children)}}Qn.propTypes={context:o().any,children:o().any},I(Qn);class Xn extends n.PureComponent{static getRelativeEntropyPosition(e){return 100-99/(1+Math.pow(e/90,3))}formatEntropy(e){return(e=e||0).toFixed(1)}get relativeTargetEntropyRatio(){return Xn.getRelativeEntropyPosition(this.props.targetEntropy)}get targetEntropyPositionStyle(){return{left:`calc(${this.relativeTargetEntropyRatio}% - 0.6rem`}}get colorClassName(){return this.hasEntropy()?this.props.entropy>=this.props.targetEntropy?"reached":this.props.isMinimumEntropyRequired?"required":"recommended":""}get tooltipMessage(){return this.props.isMinimumEntropyRequired?this.props.t("Minimal requirement"):this.props.t("Minimal recommendation")}getProgresseBarStyle(e){return{width:`${Xn.getRelativeEntropyPosition(e)}%`}}hasEntropy(){return null!==this.props.entropy&&void 0!==this.props.entropy}hasError(){return this.props.error}render(){const e=this.hasEntropy()||this.hasError(),t=jn(this.props.entropy);return n.createElement("div",{className:"password-complexity with-goal"},n.createElement("span",{className:"complexity-text"},e&&n.createElement(n.Fragment,null,t.label," (",n.createElement(v.c,null,"entropy: ",this.formatEntropy(this.props.entropy)," / ",this.formatEntropy(this.props.targetEntropy)," bits"),")"),!e&&n.createElement(v.c,null,"Quality")),n.createElement("span",{className:"progress"},n.createElement("span",{className:"progress-bar background"}),n.createElement("span",{className:"progress-bar target "+(this.props.isMinimumEntropyRequired?"required":""),style:this.hasEntropy()?this.getProgresseBarStyle(this.props.targetEntropy):null}),n.createElement("span",{className:`progress-bar foreground ${this.colorClassName}`,style:this.hasEntropy()?this.getProgresseBarStyle(this.props.entropy):null}),n.createElement("span",{className:`target-entropy ${this.colorClassName}`,style:this.targetEntropyPositionStyle},n.createElement(De,{message:this.tooltipMessage},n.createElement("span",{className:"tooltip-anchor"})))))}}Xn.defaultProps={isMinimumEntropyRequired:!0},Xn.propTypes={targetEntropy:o().number.isRequired,isMinimumEntropyRequired:o().bool.isRequired,entropy:o().number,error:o().bool,t:o().func};const ei=(0,k.Z)("common")(Xn);class ti extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.isPwndProcessingPromise=null,this.evaluatePassphraseIsInDictionaryDebounce=Nn()(this.evaluatePassphraseIsInDictionary,300),this.bindCallbacks(),this.createInputRef()}get defaultState(){return{name:"",nameError:"",email:"",emailError:"",algorithm:"RSA",keySize:4096,passphrase:"",passphraseConfirmation:"",passphraseWarning:"",passphraseEntropy:null,hasAlreadyBeenValidated:!1,isPwnedServiceAvailable:!0,passphraseInDictionnary:!1}}async componentDidMount(){await this.props.passwordPoliciesContext.findPolicies(),this.initPwnedPasswordService()}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleNameInputKeyUp=this.handleNameInputKeyUp.bind(this),this.handleEmailInputKeyUp=this.handleEmailInputKeyUp.bind(this),this.handlePassphraseChange=this.handlePassphraseChange.bind(this)}createInputRef(){this.nameInputRef=n.createRef(),this.emailInputRef=n.createRef(),this.passphraseInputRef=n.createRef(),this.passphraseConfirmationInputRef=n.createRef()}initPwnedPasswordService(){const e=this.props.passwordPoliciesContext.shouldRunDictionaryCheck();e&&(this.pownedService=new class{constructor(e){this.port=e}async evaluateSecret(e){let t=!0,a=!0;if(e.length>=8)try{t=await this.checkIfPasswordPowned(e)}catch(e){t=!1,a=!1}return{inDictionary:t,isPwnedServiceAvailable:a}}async checkIfPasswordPowned(e){return await this.port.request("passbolt.secrets.powned-password",e)>0}}(this.props.context.port)),this.setState({isPwnedServiceAvailable:e})}handleNameInputKeyUp(){this.state.hasAlreadyBeenValidated&&this.validateNameInput()}validateNameInput(){let e=null;return this.state.name.trim().length||(e=this.translate("A name is required.")),this.setState({nameError:e}),null===e}handleEmailInputKeyUp(){this.state.hasAlreadyBeenValidated&&this.validateEmailInput()}validateEmailInput(){let e=null;const t=this.state.email.trim();return t.length?Zn.validate(t,this.props.context.siteSettings)||(e=this.translate("Please enter a valid email address.")):e=this.translate("An email is required."),this.setState({email:t,emailError:e}),null===e}async handlePassphraseChange(e){const t=e.target.value;this.setState({passphrase:t},(()=>this.checkPassphraseValidity()))}async checkPassphraseValidity(){let e=null;if(this.state.passphrase.length>0?(e=(e=>{const{numberWords:t,separator:a,isPassphrase:n}=Mn(e);return n?Un(t,a):Tn(e)})(this.state.passphrase),this.state.isPwnedServiceAvailable&&(this.isPwndProcessingPromise=this.evaluatePassphraseIsInDictionaryDebounce(this.state.passphrase))):this.setState({passphraseInDictionnary:!1,passwordEntropy:null}),this.state.hasAlreadyBeenValidated)this.validatePassphraseInput();else{const e=this.state.passphrase.length>=4096,t=this.translate("this is the maximum size for this field, make sure your data was not truncated"),a=e?t:"";this.setState({passphraseWarning:a})}this.setState({passphraseEntropy:e})}validatePassphraseInput(){return!this.hasAnyErrors()}validatePassphraseConfirmationInput(){return!this.isEmptyPasswordConfirmation()&&!this.isPassphraseAndConfirmationDifferent()}hasWeakPassword(){return!this.isMinimumRequiredEntropyReached(this.state.passphraseEntropy)}isEmptyPasswordConfirmation(){return!this.state.passphraseConfirmation.length}isEmptyPassword(){return!this.state.passphrase.length}isPassphraseAndConfirmationDifferent(){return!this.isEmptyPasswordConfirmation()&&this.state.passphrase!==this.state.passphraseConfirmation}async evaluatePassphraseIsInDictionary(e){let t=this.state.isPwnedServiceAvailable;if(!t)return;let a=!1;try{const n=await this.pownedService.evaluateSecret(e);a=this.state.passphrase&&n.inDictionary&&this.isMinimumRequiredEntropyReached(this.state.passphraseEntropy),t=n.isPwnedServiceAvailable}catch(e){if(!(e instanceof Fn||e instanceof Wn))throw e;t=!1,a=!1}this.setState({isPwnedServiceAvailable:t,passphraseInDictionnary:a})}handleInputChange(e){const t=e.target;this.setState({[t.name]:t.value})}handleValidateError(){this.focusFirstFieldError()}focusFirstFieldError(){this.state.nameError?this.nameInputRef.current.focus():this.state.emailError?this.emailInputRef.current.focus():this.hasAnyErrors()?this.passphraseInputRef.current.focus():this.validatePassphraseConfirmationInput()||this.passphraseConfirmationInputRef.current.focus()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||(this.setState({hasAlreadyBeenValidated:!0}),this.state.isPwnedServiceAvailable&&await this.isPwndProcessingPromise,this.state.passphraseInDictionnary&&this.pownedService||await this.save())}hasAnyErrors(){const e=[this.isEmptyPassword(),this.state.passphraseInDictionnary];return e.push(this.hasWeakPassword()),e.push(!this.pownedService&&this.state.passphrase.length<8),e.includes(!0)}async save(){if(this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void this.toggleProcessing();const e=await this.generateKey();this.props.onUpdateOrganizationKey(e.public_key.armored_key,e.private_key.armored_key)}async validate(){const e=this.validateNameInput(),t=this.validateEmailInput(),a=this.validatePassphraseInput(),n=this.validatePassphraseConfirmationInput();return e&&t&&a&&n}async generateKey(){const e={name:this.state.name,email:this.state.email,algorithm:this.state.algorithm,keySize:this.state.keySize,passphrase:this.state.passphrase};return await this.props.context.port.request("passbolt.account-recovery.generate-organization-key",e)}toggleProcessing(){this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}isMinimumRequiredEntropyReached(e){return e>=80}get translate(){return this.props.t}get isPassphraseWarning(){return this.state.passphrase?.length>0&&!this.state.hasAlreadyBeenValidated&&(!this.state.isPwnedServiceAvailable||this.state.passphraseInDictionnary)}render(){const e=this.state.passphraseInDictionnary?0:this.state.passphraseEntropy;return n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content generate-organization-key"},n.createElement("div",{className:"input text required "+(this.state.nameError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-name"},n.createElement(v.c,null,"Name")),n.createElement("input",{id:"generate-organization-key-form-name",name:"name",type:"text",value:this.state.name,onKeyUp:this.handleNameInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.nameInputRef,className:"required fluid",maxLength:"64",required:"required",autoComplete:"off",autoFocus:!0,placeholder:this.translate("Name")}),this.state.nameError&&n.createElement("div",{className:"name error-message"},this.state.nameError)),n.createElement("div",{className:"input text required "+(this.state.emailError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-email"},n.createElement(v.c,null,"Email")),n.createElement("input",{id:"generate-organization-key-form-email",name:"email",ref:this.emailInputRef,className:"required fluid",maxLength:"64",type:"email",autoComplete:"off",value:this.state.email,onChange:this.handleInputChange,placeholder:this.translate("Email Address"),onKeyUp:this.handleEmailInputKeyUp,disabled:this.hasAllInputDisabled(),required:"required"}),this.state.emailError&&n.createElement("div",{className:"email error-message"},this.state.emailError)),n.createElement("div",{className:"input select-wrapper"},n.createElement("label",{htmlFor:"generate-organization-key-form-algorithm"},n.createElement(v.c,null,"Algorithm"),n.createElement(De,{message:this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")},n.createElement(Re,{name:"info-circle"}))),n.createElement("input",{id:"generate-organization-key-form-algorithm",name:"algorithm",value:this.state.algorithm,className:"fluid",type:"text",autoComplete:"off",disabled:!0})),n.createElement("div",{className:"input select-wrapper"},n.createElement("label",{htmlFor:"generate-organization-key-form-keySize"},n.createElement(v.c,null,"Key Size"),n.createElement(De,{message:this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")},n.createElement(Re,{name:"info-circle"}))),n.createElement("input",{id:"generate-organization-key-form-key-size",name:"keySize",value:this.state.keySize,className:"fluid",type:"text",autoComplete:"off",disabled:!0})),n.createElement("div",{className:"input-password-wrapper input required "+(this.hasAnyErrors()&&this.state.hasAlreadyBeenValidated?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase"),this.isPassphraseWarning&&n.createElement(Re,{name:"exclamation"})),n.createElement(It,{id:"generate-organization-key-form-password",name:"password",placeholder:this.translate("Passphrase"),autoComplete:"new-password",preview:!0,securityToken:this.props.context.userSettings.getSecurityToken(),value:this.state.passphrase,onChange:this.handlePassphraseChange,disabled:this.hasAllInputDisabled(),inputRef:this.passphraseInputRef}),n.createElement(ei,{entropy:e,targetEntropy:80}),this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"password error-message"},this.isEmptyPassword()&&n.createElement("div",{className:"empty-passphrase error-message"},n.createElement(v.c,null,"A passphrase is required.")),this.hasWeakPassword()&&e>0&&n.createElement("div",{className:"invalid-passphrase error-message"},n.createElement(v.c,null,"A strong passphrase is required. The minimum complexity must be 'fair'.")),this.state.passphraseInDictionnary&&0===e&&!this.isEmptyPassword()&&n.createElement("div",{className:"invalid-passphrase error-message"},n.createElement(v.c,null,"The passphrase should not be part of an exposed data breach."))),this.state.passphrase?.length>0&&!this.state.hasAlreadyBeenValidated&&this.pownedService&&n.createElement(n.Fragment,null,!this.state.isPwnedServiceAvailable&&n.createElement("div",{className:"password warning-message"},n.createElement(v.c,null,"The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.")),this.state.passphraseInDictionnary&&n.createElement("div",{className:"password warning-message"},n.createElement(v.c,null,"The passphrase is part of an exposed data breach."))),!this.state.isPwnedServiceAvailable&&null!==this.pownedService&&n.createElement("div",{className:"password warning-message"},n.createElement("strong",null,n.createElement(v.c,null,"Warning:"))," ",n.createElement(v.c,null,"The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.")),n.createElement("div",{className:"input-password-wrapper input required "+(this.state.hasAlreadyBeenValidated&&!this.validatePassphraseConfirmationInput()?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase confirmation")),n.createElement(It,{id:"generate-organization-key-form-password-confirmation",name:"passphraseConfirmation",placeholder:this.translate("Passphrase confirmation"),autoComplete:"new-password",preview:!0,securityToken:this.props.context.userSettings.getSecurityToken(),value:this.state.passphraseConfirmation,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),inputRef:this.passphraseConfirmationInputRef}),this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"password-confirmation error-message"},this.isEmptyPasswordConfirmation()&&n.createElement("div",{className:"empty-passphrase-confirmation error-message"},n.createElement(v.c,null,"The passphrase confirmation is required.")),this.isPassphraseAndConfirmationDifferent()&&n.createElement("div",{className:"invalid-passphrase-confirmation error-message"},n.createElement(v.c,null,"The passphrase confirmation should match the passphrase")))))),n.createElement("div",{className:"warning message",id:"generate-organization-key-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, we encourage you to generate your OpenPGP Organization Recovery Key separately. Make sure you keep a backup in a safe place."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.onClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Generate & Apply")})))}}ti.propTypes={context:o().any,onUpdateOrganizationKey:o().func,onClose:o().func,t:o().func,passwordPoliciesContext:o().object};const ai=I(g(function(e){return class extends n.Component{render(){return n.createElement(Jn.Consumer,null,(t=>n.createElement(e,Yn({passwordPoliciesContext:t},this.props))))}}}((0,k.Z)("common")(ti))));function ni(){return ni=Object.assign?Object.assign.bind():function(e){for(var t=1;t{await this.props.adminAccountRecoveryContext.downloadPrivateKey(e)}})}hasAllInputDisabled(){return this.state.processing||this.state.loading}hasOrganisationRecoveryKey(){const e=this.state.keyInfoDto;return Boolean(e)}isPolicyEnabled(){return Boolean("disabled"!==this.policy)}resetKeyInfo(){this.setState({keyInfoDto:null})}async toggleProcessing(){this.setState({processing:!this.state.processing})}formatFingerprint(e){if(!e)return null;const t=e.toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}formatUserIds(e){return e?e.map(((e,t)=>n.createElement(n.Fragment,{key:t},e.name," <",e.email,">",n.createElement("br",null)))):null}get translate(){return this.props.t}render(){return n.createElement("div",{className:"row"},n.createElement("div",{className:"recover-account-settings col8 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Account Recovery")),this.props.adminAccountRecoveryContext.hasPolicyChanges()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!this.hasOrganisationRecoveryKey()&&this.isPolicyEnabled()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, Don't forget to add an organization recovery key."))),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Account Recovery Policy")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose the default behavior of account recovery for all users.")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio "+("mandatory"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"mandatory",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"mandatory"===this.policy,id:"accountRecoveryPolicyMandatory",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyMandatory"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Mandatory")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user is required to provide a copy of their private key and passphrase during setup."),n.createElement("br",null),n.createElement(v.c,null,"You should inform your users not to store personal passwords.")))),n.createElement("div",{className:"input radio "+("opt-out"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"opt-out",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"opt-out"===this.policy,id:"accountRecoveryPolicyOptOut",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyOptOut"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Optional, Opt-out")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user will be prompted to provide a copy of their private key and passphrase by default during the setup, but they can opt out.")))),n.createElement("div",{className:"input radio "+("opt-in"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"opt-in",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"opt-in"===this.policy,id:"accountRecoveryPolicyOptIn",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyOptIn"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Optional, Opt-in")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user can decide to provide a copy of their private key and passphrase by default during the setup, but they can opt in.")))),n.createElement("div",{className:"input radio "+("disabled"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"disabled",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"disabled"===this.policy,id:"accountRecoveryPolicyDisable",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyDisable"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Disable (Default)")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Backup of the private key and passphrase will not be stored. This is the safest option."),n.createElement(v.c,null,"If users lose their private key and passphrase they will not be able to recover their account."))))),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element "},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"organisationRecoveryKeyToggle",disabled:this.hasAllInputDisabled(),checked:this.isPolicyEnabled(),id:"recovery-key-toggle-button"}),n.createElement("label",{htmlFor:"recovery-key-toggle-button"},n.createElement(v.c,null,"Organization Recovery Key")))),this.isPolicyEnabled()&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"Your organization recovery key will be used to decrypt and recover the private key and passphrase of the users that are participating in the account recovery program.")," ",n.createElement(v.c,null,"The organization private recovery key should not be stored in passbolt.")," ",n.createElement(v.c,null,"You should keep it offline in a safe place.")),n.createElement("div",{className:"recovery-key-details"},n.createElement("table",{className:"table-info recovery-key"},n.createElement("tbody",null,n.createElement("tr",{className:"user-ids"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"User ids")),this.organizationKeyInfo?.user_ids&&n.createElement("td",{className:"value"},this.formatUserIds(this.organizationKeyInfo.user_ids)),!this.organizationKeyInfo?.user_ids&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available")),n.createElement("td",{className:"table-button"},n.createElement("button",{className:"button primary medium",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.HandleUpdatePublicKeyClick},this.hasOrganisationRecoveryKey()&&n.createElement(v.c,null,"Rotate Key"),!this.hasOrganisationRecoveryKey()&&n.createElement(v.c,null,"Add an Organization Recovery Key")))),n.createElement("tr",{className:"fingerprint"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Fingerprint")),this.organizationKeyInfo?.fingerprint&&n.createElement("td",{className:"value"},this.formatFingerprint(this.organizationKeyInfo.fingerprint)),!this.organizationKeyInfo?.fingerprint&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"algorithm"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Algorithm")),this.organizationKeyInfo?.algorithm&&n.createElement("td",{className:"value"},this.organizationKeyInfo.algorithm),!this.organizationKeyInfo?.algorithm&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"key-length"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Key length")),this.organizationKeyInfo?.length&&n.createElement("td",{className:"value"},this.organizationKeyInfo.length),!this.organizationKeyInfo?.length&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"created"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Created")),this.organizationKeyInfo?.created&&n.createElement("td",{className:"value"},Ga(this.organizationKeyInfo.created,this.props.t,this.props.context.locale)),!this.organizationKeyInfo?.created&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"expires"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Expires")),this.organizationKeyInfo?.expires&&n.createElement("td",{className:"value"},Ga(this.organizationKeyInfo.expires,this.props.t,this.props.context.locale)),!this.organizationKeyInfo?.expires&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about account recovery, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/account-recovery",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}li.propTypes={context:o().object,dialogContext:o().any,administrationWorkspaceContext:o().object,adminAccountRecoveryContext:o().object,t:o().func};const ci=I(g(O(rn((0,k.Z)("common")(li))))),mi={25:{port:25,tls:!1},2525:{port:2525,tls:!1},587:{port:587,tls:!0},588:{port:588,tls:!0},465:{port:465,tls:!0}};function di(e,t){const a=[];for(let n=0;n(!a||e.host===a)&&e.port===t))}const pi={id:"aws-ses",name:"AWS SES",icon:"aws-ses.svg",help_page:"https://docs.aws.amazon.com/ses/latest/dg/send-email-smtp.html",availableConfigurations:di(function(){const e=[];return["us-east-2","us-east-1","us-west-1","us-west-2","ap-south-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","ap-southeast-1","ap-southeast-2","ca-central-1","eu-central-1","eu-west-1","eu-west-2","eu-west-3","sa-east-1","us-gov-west-1"].forEach((t=>{e.push(`email-smtp.${t}.amazonaws.com`)})),e}(),[25,2525,587])};pi.defaultConfiguration=hi(pi,587,"email-smtp.eu-central-1.amazonaws.com");const ui={id:"elastic-email",name:"ElasticEmail",icon:"elastic-email.svg",help_page:"https://help.elasticemail.com/en/articles/4803409-smtp-settings",availableConfigurations:di(["smtp.elasticemail.com","smtp25.elasticemail.com"],[25,2525,587])};ui.defaultConfiguration=hi(ui,587,"smtp.elasticemail.com");const gi={id:"google-workspace",name:"Google Workspace",icon:"gmail.svg",help_page:"https://support.google.com/a/answer/2956491",availableConfigurations:di(["smtp-relay.gmail.com"],[25,587])};gi.defaultConfiguration=hi(gi,587);const bi={id:"google-mail",name:"Google Mail",icon:"gmail.svg",help_page:"https://support.google.com/a/answer/2956491",availableConfigurations:di(["smtp.gmail.com"],[587])};bi.defaultConfiguration=hi(bi,587);const fi={id:"mailgun",name:"MailGun",icon:"mailgun.svg",help_page:"https://documentation.mailgun.com/en/latest/quickstart-sending.html",availableConfigurations:di(["smtp.mailgun.com"],[587])};fi.defaultConfiguration=fi.availableConfigurations[0];const yi={id:"mailjet",name:"Mailjet",icon:"mailjet.svg",help_page:"https://dev.mailjet.com/smtp-relay/configuration/",availableConfigurations:di(["in-v3.mailjet.com"],[25,2525,587,588])};yi.defaultConfiguration=hi(yi,587);const vi={id:"mandrill",name:"Mandrill",icon:"mandrill.svg",help_page:"https://mailchimp.com/developer/transactional/docs/smtp-integration/",availableConfigurations:di(["smtp.mandrillapp.com"],[25,2525,587])};vi.defaultConfiguration=hi(vi,587);const ki={id:"office-365",name:"Office 365",icon:"office365.svg",help_page:"https://learn.microsoft.com/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365",availableConfigurations:di(["smtp.office365.com"],[25,587])};ki.defaultConfiguration=hi(ki,587);const Ei={id:"outlook",name:"Outlook",icon:"outlook.svg",help_page:"https://support.microsoft.com/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040",availableConfigurations:di(["smtp-mail.outlook.com"],[587])};Ei.defaultConfiguration=hi(Ei,587);const wi={id:"sendgrid",name:"Sendgrid",icon:"sendgrid.svg",help_page:"https://docs.sendgrid.com/for-developers/sending-email/integrating-with-the-smtp-api",availableConfigurations:di(["smtp.sendgrid.net"],[25,2525,587])};wi.defaultConfiguration=hi(wi,587);const Ci={id:"sendinblue",name:"Sendinblue",icon:"sendinblue.svg",help_page:"https://help.sendinblue.com/hc/en-us/articles/209462765",availableConfigurations:di(["smtp-relay.sendinblue.com"],[25,587])};Ci.defaultConfiguration=hi(Ci,587);const Si={id:"zoho",name:"Zoho",icon:"zoho.svg",help_page:"https://www.zoho.com/mail/help/zoho-smtp.html",availableConfigurations:di(["smtp.zoho.eu","smtppro.zoho.eu"],[587])};Si.defaultConfiguration=hi(Si,587,"smtp.zoho.eu");const xi=[pi,ui,bi,gi,fi,yi,vi,ki,Ei,wi,Ci,Si,{id:"other",name:"Other",icon:null,availableConfigurations:[],defaultConfiguration:{host:"",port:"",tls:!0}}],Ni=["0-mail.com","007addict.com","020.co.uk","027168.com","0815.ru","0815.su","0clickemail.com","0sg.net","0wnd.net","0wnd.org","1033edge.com","10mail.org","10minutemail.co.za","10minutemail.com","11mail.com","123-m.com","123.com","123box.net","123india.com","123mail.cl","123mail.org","123qwe.co.uk","126.com","126.net","138mail.com","139.com","150mail.com","150ml.com","15meg4free.com","163.com","16mail.com","188.com","189.cn","1auto.com","1ce.us","1chuan.com","1colony.com","1coolplace.com","1email.eu","1freeemail.com","1fsdfdsfsdf.tk","1funplace.com","1internetdrive.com","1mail.ml","1mail.net","1me.net","1mum.com","1musicrow.com","1netdrive.com","1nsyncfan.com","1pad.de","1under.com","1webave.com","1webhighway.com","1zhuan.com","2-mail.com","20email.eu","20mail.in","20mail.it","20minutemail.com","212.com","21cn.com","247emails.com","24horas.com","2911.net","2980.com","2bmail.co.uk","2coolforyou.net","2d2i.com","2die4.com","2fdgdfgdfgdf.tk","2hotforyou.net","2mydns.com","2net.us","2prong.com","2trom.com","3000.it","30minutemail.com","30minutesmail.com","3126.com","321media.com","33mail.com","360.ru","37.com","3ammagazine.com","3dmail.com","3email.com","3g.ua","3mail.ga","3trtretgfrfe.tk","3xl.net","444.net","4email.com","4email.net","4gfdsgfdgfd.tk","4mg.com","4newyork.com","4warding.com","4warding.net","4warding.org","4x4fan.com","4x4man.com","50mail.com","5fm.za.com","5ghgfhfghfgh.tk","5iron.com","5star.com","60minutemail.com","6hjgjhgkilkj.tk","6ip.us","6mail.cf","6paq.com","702mail.co.za","74.ru","7mail.ga","7mail.ml","7tags.com","88.am","8848.net","888.nu","8mail.ga","8mail.ml","97rock.com","99experts.com","9ox.net","a-bc.net","a-player.org","a2z4u.net","a45.in","aaamail.zzn.com","aahlife.com","aamail.net","aapt.net.au","aaronkwok.net","abbeyroadlondon.co.uk","abcflash.net","abdulnour.com","aberystwyth.com","abolition-now.com","about.com","absolutevitality.com","abusemail.de","abv.bg","abwesend.de","abyssmail.com","ac20mail.in","academycougars.com","acceso.or.cr","access4less.net","accessgcc.com","accountant.com","acdcfan.com","acdczone.com","ace-of-base.com","acmecity.com","acmemail.net","acninc.net","acrobatmail.com","activatormail.com","activist.com","adam.com.au","add3000.pp.ua","addcom.de","address.com","adelphia.net","adexec.com","adfarrow.com","adinet.com.uy","adios.net","admin.in.th","administrativos.com","adoption.com","ados.fr","adrenalinefreak.com","adres.nl","advalvas.be","advantimo.com","aeiou.pt","aemail4u.com","aeneasmail.com","afreeinternet.com","africa-11.com","africamail.com","africamel.net","africanpartnersonline.com","afrobacon.com","ag.us.to","agedmail.com","agelessemail.com","agoodmail.com","ahaa.dk","ahk.jp","aichi.com","aim.com","aircraftmail.com","airforce.net","airforceemail.com","airpost.net","aiutamici.com","ajacied.com","ajaxapp.net","ak47.hu","aknet.kg","akphantom.com","albawaba.com","alecsmail.com","alex4all.com","alexandria.cc","algeria.com","algeriamail.com","alhilal.net","alibaba.com","alice.it","aliceadsl.fr","aliceinchainsmail.com","alivance.com","alive.cz","aliyun.com","allergist.com","allmail.net","alloymail.com","allracing.com","allsaintsfan.com","alltel.net","alpenjodel.de","alphafrau.de","alskens.dk","altavista.com","altavista.net","altavista.se","alternativagratis.com","alumni.com","alumnidirector.com","alvilag.hu","ama-trade.de","amail.com","amazonses.com","amele.com","america.hm","ameritech.net","amilegit.com","amiri.net","amiriindustries.com","amnetsal.com","amorki.pl","amrer.net","amuro.net","amuromail.com","ananzi.co.za","ancestry.com","andreabocellimail.com","andylau.net","anfmail.com","angelfan.com","angelfire.com","angelic.com","animail.net","animal.net","animalhouse.com","animalwoman.net","anjungcafe.com","anniefans.com","annsmail.com","ano-mail.net","anonmails.de","anonymbox.com","anonymous.to","anote.com","another.com","anotherdomaincyka.tk","anotherwin95.com","anti-ignorance.net","anti-social.com","antichef.com","antichef.net","antiqueemail.com","antireg.ru","antisocial.com","antispam.de","antispam24.de","antispammail.de","antongijsen.com","antwerpen.com","anymoment.com","anytimenow.com","aol.co.uk","aol.com","aol.de","aol.fr","aol.it","aol.jp","aon.at","apexmail.com","apmail.com","apollo.lv","aport.ru","aport2000.ru","apple.sib.ru","appraiser.net","approvers.net","aquaticmail.net","arabia.com","arabtop.net","arcademaster.com","archaeologist.com","archerymail.com","arcor.de","arcotronics.bg","arcticmail.com","argentina.com","arhaelogist.com","aristotle.org","army.net","armyspy.com","arnet.com.ar","art-en-ligne.pro","artistemail.com","artlover.com","artlover.com.au","artman-conception.com","as-if.com","asdasd.nl","asean-mail","asean-mail.com","asheville.com","asia-links.com","asia-mail.com","asia.com","asiafind.com","asianavenue.com","asiancityweb.com","asiansonly.net","asianwired.net","asiapoint.net","askaclub.ru","ass.pp.ua","assala.com","assamesemail.com","astroboymail.com","astrolover.com","astrosfan.com","astrosfan.net","asurfer.com","atheist.com","athenachu.net","atina.cl","atl.lv","atlas.cz","atlaswebmail.com","atlink.com","atmc.net","ato.check.com","atozasia.com","atrus.ru","att.net","attglobal.net","attymail.com","au.ru","auctioneer.net","aufeminin.com","aus-city.com","ausi.com","aussiemail.com.au","austin.rr.com","australia.edu","australiamail.com","austrosearch.net","autoescuelanerja.com","autograf.pl","automail.ru","automotiveauthority.com","autorambler.ru","aver.com","avh.hu","avia-tonic.fr","avtoritet.ru","awayonvacation.com","awholelotofamechi.com","awsom.net","axoskate.com","ayna.com","azazazatashkent.tk","azimiweb.com","azmeil.tk","bachelorboy.com","bachelorgal.com","backfliper.com","backpackers.com","backstreet-boys.com","backstreetboysclub.com","backtothefuturefans.com","backwards.com","badtzmail.com","bagherpour.com","bahrainmail.com","bakpaka.com","bakpaka.net","baldmama.de","baldpapa.de","ballerstatus.net","ballyfinance.com","balochistan.org","baluch.com","bangkok.com","bangkok2000.com","bannertown.net","baptistmail.com","baptized.com","barcelona.com","bareed.ws","barid.com","barlick.net","bartender.net","baseball-email.com","baseballmail.com","basketballmail.com","batuta.net","baudoinconsulting.com","baxomale.ht.cx","bboy.com","bboy.zzn.com","bcvibes.com","beddly.com","beeebank.com","beefmilk.com","beenhad.com","beep.ru","beer.com","beerandremotes.com","beethoven.com","beirut.com","belice.com","belizehome.com","belizemail.net","belizeweb.com","bell.net","bellair.net","bellsouth.net","berkscounty.com","berlin.com","berlin.de","berlinexpo.de","bestmail.us","betriebsdirektor.de","bettergolf.net","bharatmail.com","big1.us","big5mail.com","bigassweb.com","bigblue.net.au","bigboab.com","bigfoot.com","bigfoot.de","bigger.com","biggerbadder.com","bigmailbox.com","bigmir.net","bigpond.au","bigpond.com","bigpond.com.au","bigpond.net","bigpond.net.au","bigramp.com","bigstring.com","bikemechanics.com","bikeracer.com","bikeracers.net","bikerider.com","billsfan.com","billsfan.net","bimamail.com","bimla.net","bin-wieder-da.de","binkmail.com","bio-muesli.info","bio-muesli.net","biologyfan.com","birdfanatic.com","birdlover.com","birdowner.net","bisons.com","bitmail.com","bitpage.net","bizhosting.com","bk.ru","bkkmail.com","bla-bla.com","blackburnfans.com","blackburnmail.com","blackplanet.com","blader.com","bladesmail.net","blazemail.com","bleib-bei-mir.de","blink182.net","blockfilter.com","blogmyway.org","blondandeasy.com","bluebottle.com","bluehyppo.com","bluemail.ch","bluemail.dk","bluesfan.com","bluewin.ch","blueyonder.co.uk","blumail.org","blushmail.com","blutig.me","bmlsports.net","boardermail.com","boarderzone.com","boatracers.com","bobmail.info","bodhi.lawlita.com","bofthew.com","bol.com.br","bolando.com","bollywoodz.com","bolt.com","boltonfans.com","bombdiggity.com","bonbon.net","boom.com","bootmail.com","bootybay.de","bornagain.com","bornnaked.com","bossofthemoss.com","bostonoffice.com","boun.cr","bounce.net","bounces.amazon.com","bouncr.com","box.az","box.ua","boxbg.com","boxemail.com","boxformail.in","boxfrog.com","boximail.com","boyzoneclub.com","bradfordfans.com","brasilia.net","bratan.ru","brazilmail.com","brazilmail.com.br","breadtimes.press","breakthru.com","breathe.com","brefmail.com","brennendesreich.de","bresnan.net","brestonline.com","brew-master.com","brew-meister.com","brfree.com.br","briefemail.com","bright.net","britneyclub.com","brittonsign.com","broadcast.net","broadwaybuff.com","broadwaylove.com","brokeandhappy.com","brokenvalve.com","brujula.net","brunetka.ru","brusseler.com","bsdmail.com","bsnow.net","bspamfree.org","bt.com","btcc.org","btcmail.pw","btconnect.co.uk","btconnect.com","btinternet.com","btopenworld.co.uk","buerotiger.de","buffymail.com","bugmenot.com","bulgaria.com","bullsfan.com","bullsgame.com","bumerang.ro","bumpymail.com","bumrap.com","bund.us","bunita.net","bunko.com","burnthespam.info","burntmail.com","burstmail.info","buryfans.com","bushemail.com","business-man.com","businessman.net","businessweekmail.com","bust.com","busta-rhymes.com","busymail.com","busymail.com.com","busymail.comhomeart.com","butch-femme.net","butovo.net","buyersusa.com","buymoreplays.com","buzy.com","bvimailbox.com","byke.com","byom.de","byteme.com","c2.hu","c2i.net","c3.hu","c4.com","c51vsgq.com","cabacabana.com","cable.comcast.com","cableone.net","caere.it","cairomail.com","calcuttaads.com","calendar-server.bounces.google.com","calidifontain.be","californiamail.com","callnetuk.com","callsign.net","caltanet.it","camidge.com","canada-11.com","canada.com","canadianmail.com","canoemail.com","cantv.net","canwetalk.com","caramail.com","card.zp.ua","care2.com","careceo.com","careerbuildermail.com","carioca.net","cartelera.org","cartestraina.ro","casablancaresort.com","casema.nl","cash4u.com","cashette.com","casino.com","casualdx.com","cataloniamail.com","cataz.com","catcha.com","catchamail.com","catemail.com","catholic.org","catlover.com","catsrule.garfield.com","ccnmail.com","cd2.com","cek.pm","celineclub.com","celtic.com","center-mail.de","centermail.at","centermail.com","centermail.de","centermail.info","centermail.net","centoper.it","centralpets.com","centrum.cz","centrum.sk","centurylink.net","centurytel.net","certifiedmail.com","cfl.rr.com","cgac.es","cghost.s-a-d.de","chacuo.net","chaiyo.com","chaiyomail.com","chalkmail.net","chammy.info","chance2mail.com","chandrasekar.net","channelonetv.com","charityemail.com","charmedmail.com","charter.com","charter.net","chat.ru","chatlane.ru","chattown.com","chauhanweb.com","cheatmail.de","chechnya.conf.work","check.com","check.com12","check1check.com","cheeb.com","cheerful.com","chef.net","chefmail.com","chek.com","chello.nl","chemist.com","chequemail.com","cheshiremail.com","cheyenneweb.com","chez.com","chickmail.com","chil-e.com","childrens.md","childsavetrust.org","china.com","china.net.vg","chinalook.com","chinamail.com","chinesecool.com","chirk.com","chocaholic.com.au","chocofan.com","chogmail.com","choicemail1.com","chong-mail.com","chong-mail.net","christianmail.net","chronicspender.com","churchusa.com","cia-agent.com","cia.hu","ciaoweb.it","cicciociccio.com","cincinow.net","cirquefans.com","citeweb.net","citiz.net","citlink.net","city-of-bath.org","city-of-birmingham.com","city-of-brighton.org","city-of-cambridge.com","city-of-coventry.com","city-of-edinburgh.com","city-of-lichfield.com","city-of-lincoln.com","city-of-liverpool.com","city-of-manchester.com","city-of-nottingham.com","city-of-oxford.com","city-of-swansea.com","city-of-westminster.com","city-of-westminster.net","city-of-york.net","city2city.com","citynetusa.com","cityofcardiff.net","cityoflondon.org","ciudad.com.ar","ckaazaza.tk","claramail.com","classicalfan.com","classicmail.co.za","clear.net.nz","clearwire.net","clerk.com","clickforadate.com","cliffhanger.com","clixser.com","close2you.ne","close2you.net","clrmail.com","club-internet.fr","club4x4.net","clubalfa.com","clubbers.net","clubducati.com","clubhonda.net","clubmember.org","clubnetnoir.com","clubvdo.net","cluemail.com","cmail.net","cmail.org","cmail.ru","cmpmail.com","cmpnetmail.com","cnegal.com","cnnsimail.com","cntv.cn","codec.ro","codec.ro.ro","codec.roemail.ro","coder.hu","coid.biz","coldemail.info","coldmail.com","collectiblesuperstore.com","collector.org","collegebeat.com","collegeclub.com","collegemail.com","colleges.com","columbus.rr.com","columbusrr.com","columnist.com","comast.com","comast.net","comcast.com","comcast.net","comic.com","communityconnect.com","complxmind.com","comporium.net","comprendemail.com","compuserve.com","computer-expert.net","computer-freak.com","computer4u.com","computerconfused.com","computermail.net","computernaked.com","conexcol.com","cong.ru","conk.com","connect4free.net","connectbox.com","conok.com","consultant.com","consumerriot.com","contractor.net","contrasto.cu.cc","cookiemonster.com","cool.br","cool.fr.nf","coole-files.de","coolgoose.ca","coolgoose.com","coolkiwi.com","coollist.com","coolmail.com","coolmail.net","coolrio.com","coolsend.com","coolsite.net","cooooool.com","cooperation.net","cooperationtogo.net","copacabana.com","copper.net","copticmail.com","cornells.com","cornerpub.com","corporatedirtbag.com","correo.terra.com.gt","corrsfan.com","cortinet.com","cosmo.com","cotas.net","counsellor.com","countrylover.com","courriel.fr.nf","courrieltemporaire.com","cox.com","cox.net","coxinet.net","cpaonline.net","cracker.hu","craftemail.com","crapmail.org","crazedanddazed.com","crazy.ru","crazymailing.com","crazysexycool.com","crewstart.com","cristianemail.com","critterpost.com","croeso.com","crosshairs.com","crosswinds.net","crunkmail.com","crwmail.com","cry4helponline.com","cryingmail.com","cs.com","csinibaba.hu","cubiclink.com","cuemail.com","cumbriamail.com","curio-city.com","curryworld.de","curtsmail.com","cust.in","cute-girl.com","cuteandcuddly.com","cutekittens.com","cutey.com","cuvox.de","cww.de","cyber-africa.net","cyber-innovation.club","cyber-matrix.com","cyber-phone.eu","cyber-wizard.com","cyber4all.com","cyberbabies.com","cybercafemaui.com","cybercity-online.net","cyberdude.com","cyberforeplay.net","cybergal.com","cybergrrl.com","cyberinbox.com","cyberleports.com","cybermail.net","cybernet.it","cyberservices.com","cyberspace-asia.com","cybertrains.org","cyclefanz.com","cymail.net","cynetcity.com","d3p.dk","dabsol.net","dacoolest.com","dadacasa.com","daha.com","dailypioneer.com","dallas.theboys.com","dallasmail.com","dandikmail.com","dangerous-minds.com","dansegulvet.com","dasdasdascyka.tk","data54.com","date.by","daum.net","davegracey.com","dawnsonmail.com","dawsonmail.com","dayrep.com","dazedandconfused.com","dbzmail.com","dcemail.com","dcsi.net","ddns.org","deadaddress.com","deadlymob.org","deadspam.com","deafemail.net","deagot.com","deal-maker.com","dearriba.com","death-star.com","deepseafisherman.net","deforestationsucks.com","degoo.com","dejanews.com","delikkt.de","deliveryman.com","deneg.net","depechemode.com","deseretmail.com","desertmail.com","desertonline.com","desertsaintsmail.com","desilota.com","deskmail.com","deskpilot.com","despam.it","despammed.com","destin.com","detik.com","deutschland-net.com","devnullmail.com","devotedcouples.com","dezigner.ru","dfgh.net","dfwatson.com","dglnet.com.br","dgoh.org","di-ve.com","diamondemail.com","didamail.com","die-besten-bilder.de","die-genossen.de","die-optimisten.de","die-optimisten.net","die.life","diehardmail.com","diemailbox.de","digibel.be","digital-filestore.de","digitalforeplay.net","digitalsanctuary.com","digosnet.com","dingbone.com","diplomats.com","directbox.com","director-general.com","diri.com","dirtracer.com","dirtracers.com","discard.email","discard.ga","discard.gq","discardmail.com","discardmail.de","disciples.com","discofan.com","discovery.com","discoverymail.com","discoverymail.net","disign-concept.eu","disign-revelation.com","disinfo.net","dispomail.eu","disposable.com","disposableaddress.com","disposableemailaddresses.com","disposableinbox.com","dispose.it","dispostable.com","divismail.ru","divorcedandhappy.com","dm.w3internet.co.uk","dmailman.com","dmitrovka.net","dmitry.ru","dnainternet.net","dnsmadeeasy.com","doar.net","doclist.bounces.google.com","docmail.cz","docs.google.com","doctor.com","dodgeit.com","dodgit.com","dodgit.org","dodo.com.au","dodsi.com","dog.com","dogit.com","doglover.com","dogmail.co.uk","dogsnob.net","doityourself.com","domforfb1.tk","domforfb2.tk","domforfb3.tk","domforfb4.tk","domforfb5.tk","domforfb6.tk","domforfb7.tk","domforfb8.tk","domozmail.com","doneasy.com","donegal.net","donemail.ru","donjuan.com","dontgotmail.com","dontmesswithtexas.com","dontreg.com","dontsendmespam.de","doramail.com","dostmail.com","dotcom.fr","dotmsg.com","dotnow.com","dott.it","download-privat.de","dplanet.ch","dr.com","dragoncon.net","dragracer.com","drdrb.net","drivehq.com","dropmail.me","dropzone.com","drotposta.hu","dubaimail.com","dublin.com","dublin.ie","dump-email.info","dumpandjunk.com","dumpmail.com","dumpmail.de","dumpyemail.com","dunlopdriver.com","dunloprider.com","duno.com","duskmail.com","dustdevil.com","dutchmail.com","dvd-fan.net","dwp.net","dygo.com","dynamitemail.com","dyndns.org","e-apollo.lv","e-hkma.com","e-mail.com","e-mail.com.tr","e-mail.dk","e-mail.org","e-mail.ru","e-mail.ua","e-mailanywhere.com","e-mails.ru","e-tapaal.com","e-webtec.com","e4ward.com","earthalliance.com","earthcam.net","earthdome.com","earthling.net","earthlink.net","earthonline.net","eastcoast.co.za","eastlink.ca","eastmail.com","eastrolog.com","easy.com","easy.to","easypeasy.com","easypost.com","easytrashmail.com","eatmydirt.com","ebprofits.net","ec.rr.com","ecardmail.com","ecbsolutions.net","echina.com","ecolo-online.fr","ecompare.com","edmail.com","ednatx.com","edtnmail.com","educacao.te.pt","educastmail.com","eelmail.com","ehmail.com","einmalmail.de","einrot.com","einrot.de","eintagsmail.de","eircom.net","ekidz.com.au","elisanet.fi","elitemail.org","elsitio.com","eltimon.com","elvis.com","elvisfan.com","email-fake.gq","email-london.co.uk","email-value.com","email.biz","email.cbes.net","email.com","email.cz","email.ee","email.it","email.nu","email.org","email.ro","email.ru","email.si","email.su","email.ua","email.women.com","email2me.com","email2me.net","email4u.info","email60.com","emailacc.com","emailaccount.com","emailaddresses.com","emailage.ga","emailage.gq","emailasso.net","emailchoice.com","emailcorner.net","emailem.com","emailengine.net","emailengine.org","emailer.hubspot.com","emailforyou.net","emailgaul.com","emailgo.de","emailgroups.net","emailias.com","emailinfive.com","emailit.com","emaillime.com","emailmiser.com","emailoregon.com","emailpinoy.com","emailplanet.com","emailplus.org","emailproxsy.com","emails.ga","emails.incisivemedia.com","emails.ru","emailsensei.com","emailservice.com","emailsydney.com","emailtemporanea.com","emailtemporanea.net","emailtemporar.ro","emailtemporario.com.br","emailthe.net","emailtmp.com","emailto.de","emailuser.net","emailwarden.com","emailx.at.hm","emailx.net","emailxfer.com","emailz.ga","emailz.gq","emale.ru","ematic.com","embarqmail.com","emeil.in","emeil.ir","emil.com","eml.cc","eml.pp.ua","empereur.com","emptymail.com","emumail.com","emz.net","end-war.com","enel.net","enelpunto.net","engineer.com","england.com","england.edu","englandmail.com","epage.ru","epatra.com","ephemail.net","epiqmail.com","epix.net","epomail.com","epost.de","eposta.hu","eprompter.com","eqqu.com","eramail.co.za","eresmas.com","eriga.lv","ero-tube.org","eshche.net","esmailweb.net","estranet.it","ethos.st","etoast.com","etrademail.com","etranquil.com","etranquil.net","eudoramail.com","europamel.net","europe.com","europemail.com","euroseek.com","eurosport.com","evafan.com","evertonfans.com","every1.net","everyday.com.kh","everymail.net","everyone.net","everytg.ml","evopo.com","examnotes.net","excite.co.jp","excite.co.uk","excite.com","excite.it","execs.com","execs2k.com","executivemail.co.za","exemail.com.au","exg6.exghost.com","explodemail.com","express.net.ua","expressasia.com","extenda.net","extended.com","extremail.ru","eyepaste.com","eyou.com","ezagenda.com","ezcybersearch.com","ezmail.egine.com","ezmail.ru","ezrs.com","f-m.fm","f1fans.net","facebook-email.ga","facebook.com","facebookmail.com","facebookmail.gq","fadrasha.net","fadrasha.org","fahr-zur-hoelle.org","fake-email.pp.ua","fake-mail.cf","fake-mail.ga","fake-mail.ml","fakeinbox.com","fakeinformation.com","fakemailz.com","falseaddress.com","fan.com","fan.theboys.com","fannclub.com","fansonlymail.com","fansworldwide.de","fantasticmail.com","fantasymail.de","farang.net","farifluset.mailexpire.com","faroweb.com","fast-email.com","fast-mail.fr","fast-mail.org","fastacura.com","fastchevy.com","fastchrysler.com","fastem.com","fastemail.us","fastemailer.com","fastemailextractor.net","fastermail.com","fastest.cc","fastimap.com","fastkawasaki.com","fastmail.ca","fastmail.cn","fastmail.co.uk","fastmail.com","fastmail.com.au","fastmail.es","fastmail.fm","fastmail.gr","fastmail.im","fastmail.in","fastmail.jp","fastmail.mx","fastmail.net","fastmail.nl","fastmail.se","fastmail.to","fastmail.tw","fastmail.us","fastmailbox.net","fastmazda.com","fastmessaging.com","fastmitsubishi.com","fastnissan.com","fastservice.com","fastsubaru.com","fastsuzuki.com","fasttoyota.com","fastyamaha.com","fatcock.net","fatflap.com","fathersrightsne.org","fatyachts.com","fax.ru","fbi-agent.com","fbi.hu","fdfdsfds.com","fea.st","federalcontractors.com","feinripptraeger.de","felicity.com","felicitymail.com","female.ru","femenino.com","fepg.net","fetchmail.co.uk","fetchmail.com","fettabernett.de","feyenoorder.com","ffanet.com","fiberia.com","fibertel.com.ar","ficken.de","fificorp.com","fificorp.net","fightallspam.com","filipinolinks.com","filzmail.com","financefan.net","financemail.net","financier.com","findfo.com","findhere.com","findmail.com","findmemail.com","finebody.com","fineemail.com","finfin.com","finklfan.com","fire-brigade.com","fireman.net","fishburne.org","fishfuse.com","fivemail.de","fixmail.tk","fizmail.com","flashbox.5july.org","flashemail.com","flashmail.com","flashmail.net","fleckens.hu","flipcode.com","floridaemail.net","flytecrew.com","fmail.co.uk","fmailbox.com","fmgirl.com","fmguy.com","fnbmail.co.za","fnmail.com","folkfan.com","foodmail.com","footard.com","football.theboys.com","footballmail.com","foothills.net","for-president.com","force9.co.uk","forfree.at","forgetmail.com","fornow.eu","forpresident.com","fortuncity.com","fortunecity.com","forum.dk","fossefans.com","foxmail.com","fr33mail.info","francefans.com","francemel.fr","frapmail.com","free-email.ga","free-online.net","free-org.com","free.com.pe","free.fr","freeaccess.nl","freeaccount.com","freeandsingle.com","freebox.com","freedom.usa.com","freedomlover.com","freefanmail.com","freegates.be","freeghana.com","freelance-france.eu","freeler.nl","freemail.bozz.com","freemail.c3.hu","freemail.com.au","freemail.com.pk","freemail.de","freemail.et","freemail.gr","freemail.hu","freemail.it","freemail.lt","freemail.ms","freemail.nl","freemail.org.mk","freemail.ru","freemails.ga","freemeil.gq","freenet.de","freenet.kg","freeola.com","freeola.net","freeproblem.com","freesbee.fr","freeserve.co.uk","freeservers.com","freestamp.com","freestart.hu","freesurf.fr","freesurf.nl","freeuk.com","freeuk.net","freeukisp.co.uk","freeweb.org","freewebemail.com","freeyellow.com","freezone.co.uk","fresnomail.com","freudenkinder.de","freundin.ru","friction.net","friendlydevices.com","friendlymail.co.uk","friends-cafe.com","friendsfan.com","from-africa.com","from-america.com","from-argentina.com","from-asia.com","from-australia.com","from-belgium.com","from-brazil.com","from-canada.com","from-china.net","from-england.com","from-europe.com","from-france.net","from-germany.net","from-holland.com","from-israel.com","from-italy.net","from-japan.net","from-korea.com","from-mexico.com","from-outerspace.com","from-russia.com","from-spain.net","fromalabama.com","fromalaska.com","fromarizona.com","fromarkansas.com","fromcalifornia.com","fromcolorado.com","fromconnecticut.com","fromdelaware.com","fromflorida.net","fromgeorgia.com","fromhawaii.net","fromidaho.com","fromillinois.com","fromindiana.com","frominter.net","fromiowa.com","fromjupiter.com","fromkansas.com","fromkentucky.com","fromlouisiana.com","frommaine.net","frommaryland.com","frommassachusetts.com","frommiami.com","frommichigan.com","fromminnesota.com","frommississippi.com","frommissouri.com","frommontana.com","fromnebraska.com","fromnevada.com","fromnewhampshire.com","fromnewjersey.com","fromnewmexico.com","fromnewyork.net","fromnorthcarolina.com","fromnorthdakota.com","fromohio.com","fromoklahoma.com","fromoregon.net","frompennsylvania.com","fromrhodeisland.com","fromru.com","fromru.ru","fromsouthcarolina.com","fromsouthdakota.com","fromtennessee.com","fromtexas.com","fromthestates.com","fromutah.com","fromvermont.com","fromvirginia.com","fromwashington.com","fromwashingtondc.com","fromwestvirginia.com","fromwisconsin.com","fromwyoming.com","front.ru","frontier.com","frontiernet.net","frostbyte.uk.net","fsmail.net","ftc-i.net","ftml.net","fuckingduh.com","fudgerub.com","fullmail.com","funiran.com","funkfan.com","funky4.com","fuorissimo.com","furnitureprovider.com","fuse.net","fusemail.com","fut.es","fux0ringduh.com","fwnb.com","fxsmails.com","fyii.de","galamb.net","galaxy5.com","galaxyhit.com","gamebox.com","gamebox.net","gamegeek.com","games.com","gamespotmail.com","gamil.com","gamil.com.au","gamno.config.work","garbage.com","gardener.com","garliclife.com","gatwickemail.com","gawab.com","gay.com","gaybrighton.co.uk","gaza.net","gazeta.pl","gazibooks.com","gci.net","gdi.net","gee-wiz.com","geecities.com","geek.com","geek.hu","geeklife.com","gehensiemirnichtaufdensack.de","gelitik.in","gencmail.com","general-hospital.com","gentlemansclub.de","genxemail.com","geocities.com","geography.net","geologist.com","geopia.com","germanymail.com","get.pp.ua","get1mail.com","get2mail.fr","getairmail.cf","getairmail.com","getairmail.ga","getairmail.gq","getmails.eu","getonemail.com","getonemail.net","gfxartist.ru","gh2000.com","ghanamail.com","ghostmail.com","ghosttexter.de","giantmail.de","giantsfan.com","giga4u.de","gigileung.org","girl4god.com","girlsundertheinfluence.com","gishpuppy.com","givepeaceachance.com","glay.org","glendale.net","globalfree.it","globalpagan.com","globalsite.com.br","globetrotter.net","globo.com","globomail.com","gmail.co.za","gmail.com","gmail.com.au","gmail.com.br","gmail.ru","gmial.com","gmx.at","gmx.ch","gmx.co.uk","gmx.com","gmx.de","gmx.fr","gmx.li","gmx.net","gmx.us","gnwmail.com","go.com","go.ro","go.ru","go2.com.py","go2net.com","go4.it","gobrainstorm.net","gocollege.com","gocubs.com","godmail.dk","goemailgo.com","gofree.co.uk","gol.com","goldenmail.ru","goldmail.ru","goldtoolbox.com","golfemail.com","golfilla.info","golfmail.be","gonavy.net","gonuts4free.com","goodnewsmail.com","goodstick.com","google.com","googlegroups.com","googlemail.com","goosemoose.com","goplay.com","gorillaswithdirtyarmpits.com","gorontalo.net","gospelfan.com","gothere.uk.com","gotmail.com","gotmail.net","gotmail.org","gotomy.com","gotti.otherinbox.com","govolsfan.com","gportal.hu","grabmail.com","graduate.org","graffiti.net","gramszu.net","grandmamail.com","grandmasmail.com","graphic-designer.com","grapplers.com","gratisweb.com","great-host.in","greenmail.net","greensloth.com","groupmail.com","grr.la","grungecafe.com","gsrv.co.uk","gtemail.net","gtmc.net","gua.net","guerillamail.biz","guerillamail.com","guerrillamail.biz","guerrillamail.com","guerrillamail.de","guerrillamail.info","guerrillamail.net","guerrillamail.org","guerrillamailblock.com","guessmail.com","guju.net","gurlmail.com","gustr.com","guy.com","guy2.com","guyanafriends.com","gwhsgeckos.com","gyorsposta.com","gyorsposta.hu","h-mail.us","hab-verschlafen.de","hablas.com","habmalnefrage.de","hacccc.com","hackermail.com","hackermail.net","hailmail.net","hairdresser.com","hairdresser.net","haltospam.com","hamptonroads.com","handbag.com","handleit.com","hang-ten.com","hangglidemail.com","hanmail.net","happemail.com","happycounsel.com","happypuppy.com","harakirimail.com","haramamba.ru","hardcorefreak.com","hardyoungbabes.com","hartbot.de","hat-geld.de","hatespam.org","hawaii.rr.com","hawaiiantel.net","headbone.com","healthemail.net","heartthrob.com","heavynoize.net","heerschap.com","heesun.net","hehe.com","hello.hu","hello.net.au","hello.to","hellokitty.com","helter-skelter.com","hempseed.com","herediano.com","heremail.com","herono1.com","herp.in","herr-der-mails.de","hetnet.nl","hewgen.ru","hey.to","hhdevel.com","hideakifan.com","hidemail.de","hidzz.com","highmilton.com","highquality.com","highveldmail.co.za","hilarious.com","hinduhome.com","hingis.org","hiphopfan.com","hispavista.com","hitmail.com","hitmanrecords.com","hitthe.net","hkg.net","hkstarphoto.com","hmamail.com","hochsitze.com","hockeymail.com","hollywoodkids.com","home-email.com","home.de","home.nl","home.no.net","home.ro","home.se","homeart.com","homelocator.com","homemail.com","homenetmail.com","homeonthethrone.com","homestead.com","homeworkcentral.com","honduras.com","hongkong.com","hookup.net","hoopsmail.com","hopemail.biz","horrormail.com","host-it.com.sg","hot-mail.gq","hot-shop.com","hot-shot.com","hot.ee","hotbot.com","hotbox.ru","hotbrev.com","hotcoolmail.com","hotepmail.com","hotfire.net","hotletter.com","hotlinemail.com","hotmail.be","hotmail.ca","hotmail.ch","hotmail.co","hotmail.co.il","hotmail.co.jp","hotmail.co.nz","hotmail.co.uk","hotmail.co.za","hotmail.com","hotmail.com.ar","hotmail.com.au","hotmail.com.br","hotmail.com.mx","hotmail.com.tr","hotmail.de","hotmail.es","hotmail.fi","hotmail.fr","hotmail.it","hotmail.kg","hotmail.kz","hotmail.my","hotmail.nl","hotmail.ro","hotmail.roor","hotmail.ru","hotpop.com","hotpop3.com","hotvoice.com","housefan.com","housefancom","housemail.com","hsuchi.net","html.tou.com","hu2.ru","hughes.net","hulapla.de","humanoid.net","humanux.com","humn.ws.gy","humour.com","hunsa.com","hurting.com","hush.com","hushmail.com","hypernautica.com","i-connect.com","i-france.com","i-love-cats.com","i-mail.com.au","i-mailbox.net","i-p.com","i.am","i.am.to","i.amhey.to","i.ua","i12.com","i2828.com","i2pmail.org","iam4msu.com","iamawoman.com","iamfinallyonline.com","iamwaiting.com","iamwasted.com","iamyours.com","icestorm.com","ich-bin-verrueckt-nach-dir.de","ich-will-net.de","icloud.com","icmsconsultants.com","icq.com","icqmail.com","icrazy.com","icu.md","id-base.com","id.ru","ididitmyway.com","idigjesus.com","idirect.com","ieatspam.eu","ieatspam.info","ieh-mail.de","iespana.es","ifoward.com","ig.com.br","ignazio.it","ignmail.com","ihateclowns.com","ihateyoualot.info","iheartspam.org","iinet.net.au","ijustdontcare.com","ikbenspamvrij.nl","ilkposta.com","ilovechocolate.com","ilovegiraffes.net","ilovejesus.com","ilovelionking.com","ilovepokemonmail.com","ilovethemovies.com","ilovetocollect.net","ilse.nl","imaginemail.com","imail.org","imail.ru","imailbox.com","imails.info","imap-mail.com","imap.cc","imapmail.org","imel.org","imgof.com","imgv.de","immo-gerance.info","imneverwrong.com","imposter.co.uk","imstations.com","imstressed.com","imtoosexy.com","in-box.net","in2jesus.com","iname.com","inbax.tk","inbound.plus","inbox.com","inbox.lv","inbox.net","inbox.ru","inbox.si","inboxalias.com","inboxclean.com","inboxclean.org","incamail.com","includingarabia.com","incredimail.com","indeedemail.com","index.ua","indexa.fr","india.com","indiatimes.com","indo-mail.com","indocities.com","indomail.com","indosat.net.id","indus.ru","indyracers.com","inerted.com","inet.com","inet.net.au","info-media.de","info-radio.ml","info.com","info66.com","infoapex.com","infocom.zp.ua","infohq.com","infomail.es","infomart.or.jp","informaticos.com","infospacemail.com","infovia.com.ar","inicia.es","inmail.sk","inmail24.com","inmano.com","inmynetwork.tk","innocent.com","inonesearch.com","inorbit.com","inoutbox.com","insidebaltimore.net","insight.rr.com","inspectorjavert.com","instant-mail.de","instantemailaddress.com","instantmail.fr","instruction.com","instructor.net","insurer.com","interburp.com","interfree.it","interia.pl","interlap.com.ar","intermail.co.il","internet-club.com","internet-e-mail.com","internet-mail.org","internet-police.com","internetbiz.com","internetdrive.com","internetegypt.com","internetemails.net","internetmailing.net","internode.on.net","invalid.com","investormail.com","inwind.it","iobox.com","iobox.fi","iol.it","iol.pt","iowaemail.com","ip3.com","ip4.pp.ua","ip6.li","ip6.pp.ua","ipdeer.com","ipex.ru","ipoo.org","iportalexpress.com","iprimus.com.au","iqemail.com","irangate.net","iraqmail.com","ireland.com","irelandmail.com","irish2me.com","irj.hu","iroid.com","iscooler.com","isellcars.com","iservejesus.com","islamonline.net","islandemail.net","isleuthmail.com","ismart.net","isonfire.com","isp9.net","israelmail.com","ist-allein.info","ist-einmalig.de","ist-ganz-allein.de","ist-willig.de","italymail.com","itelefonica.com.br","itloox.com","itmom.com","ivebeenframed.com","ivillage.com","iwan-fals.com","iwi.net","iwmail.com","iwon.com","izadpanah.com","jabble.com","jahoopa.com","jakuza.hu","japan.com","jaydemail.com","jazzandjava.com","jazzfan.com","jazzgame.com","je-recycle.info","jeanvaljean.com","jerusalemmail.com","jesusanswers.com","jet-renovation.fr","jetable.com","jetable.de","jetable.fr.nf","jetable.net","jetable.org","jetable.pp.ua","jetemail.net","jewishmail.com","jfkislanders.com","jingjo.net","jippii.fi","jmail.co.za","jnxjn.com","job4u.com","jobbikszimpatizans.hu","joelonsoftware.com","joinme.com","jojomail.com","jokes.com","jordanmail.com","journalist.com","jourrapide.com","jovem.te.pt","joymail.com","jpopmail.com","jsrsolutions.com","jubiimail.dk","jump.com","jumpy.it","juniormail.com","junk1e.com","junkmail.com","junkmail.gq","juno.com","justemail.net","justicemail.com","justmail.de","justmailz.com","justmarriedmail.com","jwspamspy","k.ro","kaazoo.com","kabissa.org","kaduku.net","kaffeeschluerfer.com","kaffeeschluerfer.de","kaixo.com","kalpoint.com","kansascity.com","kapoorweb.com","karachian.com","karachioye.com","karbasi.com","kasmail.com","kaspop.com","katamail.com","kayafmmail.co.za","kbjrmail.com","kcks.com","kebi.com","keftamail.com","keg-party.com","keinpardon.de","keko.com.ar","kellychen.com","keptprivate.com","keromail.com","kewpee.com","keyemail.com","kgb.hu","khosropour.com","kichimail.com","kickassmail.com","killamail.com","killergreenmail.com","killermail.com","killmail.com","killmail.net","kimo.com","kimsdisk.com","kinglibrary.net","kinki-kids.com","kismail.ru","kissfans.com","kitemail.com","kittymail.com","kitznet.at","kiwibox.com","kiwitown.com","klassmaster.com","klassmaster.net","klzlk.com","km.ru","kmail.com.au","knol-power.nl","koko.com","kolumbus.fi","kommespaeter.de","konkovo.net","konsul.ru","konx.com","korea.com","koreamail.com","kosino.net","koszmail.pl","kozmail.com","kpnmail.nl","kreditor.ru","krim.ws","krongthip.com","krovatka.net","krunis.com","ksanmail.com","ksee24mail.com","kube93mail.com","kukamail.com","kulturbetrieb.info","kumarweb.com","kurzepost.de","kuwait-mail.com","kuzminki.net","kyokodate.com","kyokofukada.net","l33r.eu","la.com","labetteraverouge.at","lackmail.ru","ladyfire.com","ladymail.cz","lagerlouts.com","lags.us","lahoreoye.com","lakmail.com","lamer.hu","land.ru","langoo.com","lankamail.com","laoeq.com","laposte.net","lass-es-geschehen.de","last-chance.pro","lastmail.co","latemodels.com","latinmail.com","latino.com","lavabit.com","lavache.com","law.com","lawlita.com","lawyer.com","lazyinbox.com","learn2compute.net","lebanonatlas.com","leeching.net","leehom.net","lefortovo.net","legalactions.com","legalrc.loan","legislator.com","legistrator.com","lenta.ru","leonlai.net","letsgomets.net","letterbox.com","letterboxes.org","letthemeatspam.com","levele.com","levele.hu","lex.bg","lexis-nexis-mail.com","lhsdv.com","lianozovo.net","libero.it","liberomail.com","lick101.com","liebt-dich.info","lifebyfood.com","link2mail.net","linkmaster.com","linktrader.com","linuxfreemail.com","linuxmail.org","lionsfan.com.au","liontrucks.com","liquidinformation.net","lissamail.com","list.ru","listomail.com","litedrop.com","literaturelover.com","littleapple.com","littleblueroom.com","live.at","live.be","live.ca","live.cl","live.cn","live.co.uk","live.co.za","live.com","live.com.ar","live.com.au","live.com.mx","live.com.my","live.com.pt","live.com.sg","live.de","live.dk","live.fr","live.hk","live.ie","live.in","live.it","live.jp","live.nl","live.no","live.ru","live.se","liveradio.tk","liverpoolfans.com","ljiljan.com","llandudno.com","llangollen.com","lmxmail.sk","lobbyist.com","localbar.com","localgenius.com","locos.com","login-email.ga","loh.pp.ua","lol.ovpn.to","lolfreak.net","lolito.tk","lolnetwork.net","london.com","loobie.com","looksmart.co.uk","looksmart.com","looksmart.com.au","lookugly.com","lopezclub.com","lortemail.dk","louiskoo.com","lov.ru","love.com","love.cz","loveable.com","lovecat.com","lovefall.ml","lovefootball.com","loveforlostcats.com","lovelygirl.net","lovemail.com","lover-boy.com","lovergirl.com","lovesea.gq","lovethebroncos.com","lovethecowboys.com","lovetocook.net","lovetohike.com","loveyouforever.de","lovingjesus.com","lowandslow.com","lr7.us","lr78.com","lroid.com","lubovnik.ru","lukop.dk","luso.pt","luukku.com","luv2.us","luvrhino.com","lvie.com.sg","lvwebmail.com","lycos.co.uk","lycos.com","lycos.es","lycos.it","lycos.ne.jp","lycos.ru","lycosemail.com","lycosmail.com","m-a-i-l.com","m-hmail.com","m21.cc","m4.org","m4ilweb.info","mac.com","macbox.com","macbox.ru","macfreak.com","machinecandy.com","macmail.com","mad.scientist.com","madcrazy.com","madcreations.com","madonnafan.com","madrid.com","maennerversteherin.com","maennerversteherin.de","maffia.hu","magicmail.co.za","mahmoodweb.com","mail-awu.de","mail-box.cz","mail-center.com","mail-central.com","mail-easy.fr","mail-filter.com","mail-me.com","mail-page.com","mail-temporaire.fr","mail-tester.com","mail.austria.com","mail.az","mail.be","mail.bg","mail.bulgaria.com","mail.by","mail.byte.it","mail.co.za","mail.com","mail.com.tr","mail.ee","mail.entrepeneurmag.com","mail.freetown.com","mail.gr","mail.hitthebeach.com","mail.htl22.at","mail.kmsp.com","mail.md","mail.mezimages.net","mail.misterpinball.de","mail.nu","mail.org.uk","mail.pf","mail.pharmacy.com","mail.pt","mail.r-o-o-t.com","mail.ru","mail.salu.net","mail.sisna.com","mail.spaceports.com","mail.svenz.eu","mail.theboys.com","mail.usa.com","mail.vasarhely.hu","mail.vu","mail.wtf","mail.zp.ua","mail114.net","mail15.com","mail1a.de","mail1st.com","mail2007.com","mail21.cc","mail2aaron.com","mail2abby.com","mail2abc.com","mail2actor.com","mail2admiral.com","mail2adorable.com","mail2adoration.com","mail2adore.com","mail2adventure.com","mail2aeolus.com","mail2aether.com","mail2affection.com","mail2afghanistan.com","mail2africa.com","mail2agent.com","mail2aha.com","mail2ahoy.com","mail2aim.com","mail2air.com","mail2airbag.com","mail2airforce.com","mail2airport.com","mail2alabama.com","mail2alan.com","mail2alaska.com","mail2albania.com","mail2alcoholic.com","mail2alec.com","mail2alexa.com","mail2algeria.com","mail2alicia.com","mail2alien.com","mail2allan.com","mail2allen.com","mail2allison.com","mail2alpha.com","mail2alyssa.com","mail2amanda.com","mail2amazing.com","mail2amber.com","mail2america.com","mail2american.com","mail2andorra.com","mail2andrea.com","mail2andy.com","mail2anesthesiologist.com","mail2angela.com","mail2angola.com","mail2ann.com","mail2anna.com","mail2anne.com","mail2anthony.com","mail2anything.com","mail2aphrodite.com","mail2apollo.com","mail2april.com","mail2aquarius.com","mail2arabia.com","mail2arabic.com","mail2architect.com","mail2ares.com","mail2argentina.com","mail2aries.com","mail2arizona.com","mail2arkansas.com","mail2armenia.com","mail2army.com","mail2arnold.com","mail2art.com","mail2artemus.com","mail2arthur.com","mail2artist.com","mail2ashley.com","mail2ask.com","mail2astronomer.com","mail2athena.com","mail2athlete.com","mail2atlas.com","mail2atom.com","mail2attitude.com","mail2auction.com","mail2aunt.com","mail2australia.com","mail2austria.com","mail2azerbaijan.com","mail2baby.com","mail2bahamas.com","mail2bahrain.com","mail2ballerina.com","mail2ballplayer.com","mail2band.com","mail2bangladesh.com","mail2bank.com","mail2banker.com","mail2bankrupt.com","mail2baptist.com","mail2bar.com","mail2barbados.com","mail2barbara.com","mail2barter.com","mail2basketball.com","mail2batter.com","mail2beach.com","mail2beast.com","mail2beatles.com","mail2beauty.com","mail2becky.com","mail2beijing.com","mail2belgium.com","mail2belize.com","mail2ben.com","mail2bernard.com","mail2beth.com","mail2betty.com","mail2beverly.com","mail2beyond.com","mail2biker.com","mail2bill.com","mail2billionaire.com","mail2billy.com","mail2bio.com","mail2biologist.com","mail2black.com","mail2blackbelt.com","mail2blake.com","mail2blind.com","mail2blonde.com","mail2blues.com","mail2bob.com","mail2bobby.com","mail2bolivia.com","mail2bombay.com","mail2bonn.com","mail2bookmark.com","mail2boreas.com","mail2bosnia.com","mail2boston.com","mail2botswana.com","mail2bradley.com","mail2brazil.com","mail2breakfast.com","mail2brian.com","mail2bride.com","mail2brittany.com","mail2broker.com","mail2brook.com","mail2bruce.com","mail2brunei.com","mail2brunette.com","mail2brussels.com","mail2bryan.com","mail2bug.com","mail2bulgaria.com","mail2business.com","mail2buy.com","mail2ca.com","mail2california.com","mail2calvin.com","mail2cambodia.com","mail2cameroon.com","mail2canada.com","mail2cancer.com","mail2capeverde.com","mail2capricorn.com","mail2cardinal.com","mail2cardiologist.com","mail2care.com","mail2caroline.com","mail2carolyn.com","mail2casey.com","mail2cat.com","mail2caterer.com","mail2cathy.com","mail2catlover.com","mail2catwalk.com","mail2cell.com","mail2chad.com","mail2champaign.com","mail2charles.com","mail2chef.com","mail2chemist.com","mail2cherry.com","mail2chicago.com","mail2chile.com","mail2china.com","mail2chinese.com","mail2chocolate.com","mail2christian.com","mail2christie.com","mail2christmas.com","mail2christy.com","mail2chuck.com","mail2cindy.com","mail2clark.com","mail2classifieds.com","mail2claude.com","mail2cliff.com","mail2clinic.com","mail2clint.com","mail2close.com","mail2club.com","mail2coach.com","mail2coastguard.com","mail2colin.com","mail2college.com","mail2colombia.com","mail2color.com","mail2colorado.com","mail2columbia.com","mail2comedian.com","mail2composer.com","mail2computer.com","mail2computers.com","mail2concert.com","mail2congo.com","mail2connect.com","mail2connecticut.com","mail2consultant.com","mail2convict.com","mail2cook.com","mail2cool.com","mail2cory.com","mail2costarica.com","mail2country.com","mail2courtney.com","mail2cowboy.com","mail2cowgirl.com","mail2craig.com","mail2crave.com","mail2crazy.com","mail2create.com","mail2croatia.com","mail2cry.com","mail2crystal.com","mail2cuba.com","mail2culture.com","mail2curt.com","mail2customs.com","mail2cute.com","mail2cutey.com","mail2cynthia.com","mail2cyprus.com","mail2czechrepublic.com","mail2dad.com","mail2dale.com","mail2dallas.com","mail2dan.com","mail2dana.com","mail2dance.com","mail2dancer.com","mail2danielle.com","mail2danny.com","mail2darlene.com","mail2darling.com","mail2darren.com","mail2daughter.com","mail2dave.com","mail2dawn.com","mail2dc.com","mail2dealer.com","mail2deanna.com","mail2dearest.com","mail2debbie.com","mail2debby.com","mail2deer.com","mail2delaware.com","mail2delicious.com","mail2demeter.com","mail2democrat.com","mail2denise.com","mail2denmark.com","mail2dennis.com","mail2dentist.com","mail2derek.com","mail2desert.com","mail2devoted.com","mail2devotion.com","mail2diamond.com","mail2diana.com","mail2diane.com","mail2diehard.com","mail2dilemma.com","mail2dillon.com","mail2dinner.com","mail2dinosaur.com","mail2dionysos.com","mail2diplomat.com","mail2director.com","mail2dirk.com","mail2disco.com","mail2dive.com","mail2diver.com","mail2divorced.com","mail2djibouti.com","mail2doctor.com","mail2doglover.com","mail2dominic.com","mail2dominica.com","mail2dominicanrepublic.com","mail2don.com","mail2donald.com","mail2donna.com","mail2doris.com","mail2dorothy.com","mail2doug.com","mail2dough.com","mail2douglas.com","mail2dow.com","mail2downtown.com","mail2dream.com","mail2dreamer.com","mail2dude.com","mail2dustin.com","mail2dyke.com","mail2dylan.com","mail2earl.com","mail2earth.com","mail2eastend.com","mail2eat.com","mail2economist.com","mail2ecuador.com","mail2eddie.com","mail2edgar.com","mail2edwin.com","mail2egypt.com","mail2electron.com","mail2eli.com","mail2elizabeth.com","mail2ellen.com","mail2elliot.com","mail2elsalvador.com","mail2elvis.com","mail2emergency.com","mail2emily.com","mail2engineer.com","mail2english.com","mail2environmentalist.com","mail2eos.com","mail2eric.com","mail2erica.com","mail2erin.com","mail2erinyes.com","mail2eris.com","mail2eritrea.com","mail2ernie.com","mail2eros.com","mail2estonia.com","mail2ethan.com","mail2ethiopia.com","mail2eu.com","mail2europe.com","mail2eurus.com","mail2eva.com","mail2evan.com","mail2evelyn.com","mail2everything.com","mail2exciting.com","mail2expert.com","mail2fairy.com","mail2faith.com","mail2fanatic.com","mail2fancy.com","mail2fantasy.com","mail2farm.com","mail2farmer.com","mail2fashion.com","mail2fat.com","mail2feeling.com","mail2female.com","mail2fever.com","mail2fighter.com","mail2fiji.com","mail2filmfestival.com","mail2films.com","mail2finance.com","mail2finland.com","mail2fireman.com","mail2firm.com","mail2fisherman.com","mail2flexible.com","mail2florence.com","mail2florida.com","mail2floyd.com","mail2fly.com","mail2fond.com","mail2fondness.com","mail2football.com","mail2footballfan.com","mail2found.com","mail2france.com","mail2frank.com","mail2frankfurt.com","mail2franklin.com","mail2fred.com","mail2freddie.com","mail2free.com","mail2freedom.com","mail2french.com","mail2freudian.com","mail2friendship.com","mail2from.com","mail2fun.com","mail2gabon.com","mail2gabriel.com","mail2gail.com","mail2galaxy.com","mail2gambia.com","mail2games.com","mail2gary.com","mail2gavin.com","mail2gemini.com","mail2gene.com","mail2genes.com","mail2geneva.com","mail2george.com","mail2georgia.com","mail2gerald.com","mail2german.com","mail2germany.com","mail2ghana.com","mail2gilbert.com","mail2gina.com","mail2girl.com","mail2glen.com","mail2gloria.com","mail2goddess.com","mail2gold.com","mail2golfclub.com","mail2golfer.com","mail2gordon.com","mail2government.com","mail2grab.com","mail2grace.com","mail2graham.com","mail2grandma.com","mail2grandpa.com","mail2grant.com","mail2greece.com","mail2green.com","mail2greg.com","mail2grenada.com","mail2gsm.com","mail2guard.com","mail2guatemala.com","mail2guy.com","mail2hades.com","mail2haiti.com","mail2hal.com","mail2handhelds.com","mail2hank.com","mail2hannah.com","mail2harold.com","mail2harry.com","mail2hawaii.com","mail2headhunter.com","mail2heal.com","mail2heather.com","mail2heaven.com","mail2hebe.com","mail2hecate.com","mail2heidi.com","mail2helen.com","mail2hell.com","mail2help.com","mail2helpdesk.com","mail2henry.com","mail2hephaestus.com","mail2hera.com","mail2hercules.com","mail2herman.com","mail2hermes.com","mail2hespera.com","mail2hestia.com","mail2highschool.com","mail2hindu.com","mail2hip.com","mail2hiphop.com","mail2holland.com","mail2holly.com","mail2hollywood.com","mail2homer.com","mail2honduras.com","mail2honey.com","mail2hongkong.com","mail2hope.com","mail2horse.com","mail2hot.com","mail2hotel.com","mail2houston.com","mail2howard.com","mail2hugh.com","mail2human.com","mail2hungary.com","mail2hungry.com","mail2hygeia.com","mail2hyperspace.com","mail2hypnos.com","mail2ian.com","mail2ice-cream.com","mail2iceland.com","mail2idaho.com","mail2idontknow.com","mail2illinois.com","mail2imam.com","mail2in.com","mail2india.com","mail2indian.com","mail2indiana.com","mail2indonesia.com","mail2infinity.com","mail2intense.com","mail2iowa.com","mail2iran.com","mail2iraq.com","mail2ireland.com","mail2irene.com","mail2iris.com","mail2irresistible.com","mail2irving.com","mail2irwin.com","mail2isaac.com","mail2israel.com","mail2italian.com","mail2italy.com","mail2jackie.com","mail2jacob.com","mail2jail.com","mail2jaime.com","mail2jake.com","mail2jamaica.com","mail2james.com","mail2jamie.com","mail2jan.com","mail2jane.com","mail2janet.com","mail2janice.com","mail2japan.com","mail2japanese.com","mail2jasmine.com","mail2jason.com","mail2java.com","mail2jay.com","mail2jazz.com","mail2jed.com","mail2jeffrey.com","mail2jennifer.com","mail2jenny.com","mail2jeremy.com","mail2jerry.com","mail2jessica.com","mail2jessie.com","mail2jesus.com","mail2jew.com","mail2jeweler.com","mail2jim.com","mail2jimmy.com","mail2joan.com","mail2joann.com","mail2joanna.com","mail2jody.com","mail2joe.com","mail2joel.com","mail2joey.com","mail2john.com","mail2join.com","mail2jon.com","mail2jonathan.com","mail2jones.com","mail2jordan.com","mail2joseph.com","mail2josh.com","mail2joy.com","mail2juan.com","mail2judge.com","mail2judy.com","mail2juggler.com","mail2julian.com","mail2julie.com","mail2jumbo.com","mail2junk.com","mail2justin.com","mail2justme.com","mail2k.ru","mail2kansas.com","mail2karate.com","mail2karen.com","mail2karl.com","mail2karma.com","mail2kathleen.com","mail2kathy.com","mail2katie.com","mail2kay.com","mail2kazakhstan.com","mail2keen.com","mail2keith.com","mail2kelly.com","mail2kelsey.com","mail2ken.com","mail2kendall.com","mail2kennedy.com","mail2kenneth.com","mail2kenny.com","mail2kentucky.com","mail2kenya.com","mail2kerry.com","mail2kevin.com","mail2kim.com","mail2kimberly.com","mail2king.com","mail2kirk.com","mail2kiss.com","mail2kosher.com","mail2kristin.com","mail2kurt.com","mail2kuwait.com","mail2kyle.com","mail2kyrgyzstan.com","mail2la.com","mail2lacrosse.com","mail2lance.com","mail2lao.com","mail2larry.com","mail2latvia.com","mail2laugh.com","mail2laura.com","mail2lauren.com","mail2laurie.com","mail2lawrence.com","mail2lawyer.com","mail2lebanon.com","mail2lee.com","mail2leo.com","mail2leon.com","mail2leonard.com","mail2leone.com","mail2leslie.com","mail2letter.com","mail2liberia.com","mail2libertarian.com","mail2libra.com","mail2libya.com","mail2liechtenstein.com","mail2life.com","mail2linda.com","mail2linux.com","mail2lionel.com","mail2lipstick.com","mail2liquid.com","mail2lisa.com","mail2lithuania.com","mail2litigator.com","mail2liz.com","mail2lloyd.com","mail2lois.com","mail2lola.com","mail2london.com","mail2looking.com","mail2lori.com","mail2lost.com","mail2lou.com","mail2louis.com","mail2louisiana.com","mail2lovable.com","mail2love.com","mail2lucky.com","mail2lucy.com","mail2lunch.com","mail2lust.com","mail2luxembourg.com","mail2luxury.com","mail2lyle.com","mail2lynn.com","mail2madagascar.com","mail2madison.com","mail2madrid.com","mail2maggie.com","mail2mail4.com","mail2maine.com","mail2malawi.com","mail2malaysia.com","mail2maldives.com","mail2mali.com","mail2malta.com","mail2mambo.com","mail2man.com","mail2mandy.com","mail2manhunter.com","mail2mankind.com","mail2many.com","mail2marc.com","mail2marcia.com","mail2margaret.com","mail2margie.com","mail2marhaba.com","mail2maria.com","mail2marilyn.com","mail2marines.com","mail2mark.com","mail2marriage.com","mail2married.com","mail2marries.com","mail2mars.com","mail2marsha.com","mail2marshallislands.com","mail2martha.com","mail2martin.com","mail2marty.com","mail2marvin.com","mail2mary.com","mail2maryland.com","mail2mason.com","mail2massachusetts.com","mail2matt.com","mail2matthew.com","mail2maurice.com","mail2mauritania.com","mail2mauritius.com","mail2max.com","mail2maxwell.com","mail2maybe.com","mail2mba.com","mail2me4u.com","mail2mechanic.com","mail2medieval.com","mail2megan.com","mail2mel.com","mail2melanie.com","mail2melissa.com","mail2melody.com","mail2member.com","mail2memphis.com","mail2methodist.com","mail2mexican.com","mail2mexico.com","mail2mgz.com","mail2miami.com","mail2michael.com","mail2michelle.com","mail2michigan.com","mail2mike.com","mail2milan.com","mail2milano.com","mail2mildred.com","mail2milkyway.com","mail2millennium.com","mail2millionaire.com","mail2milton.com","mail2mime.com","mail2mindreader.com","mail2mini.com","mail2minister.com","mail2minneapolis.com","mail2minnesota.com","mail2miracle.com","mail2missionary.com","mail2mississippi.com","mail2missouri.com","mail2mitch.com","mail2model.com","mail2moldova.commail2molly.com","mail2mom.com","mail2monaco.com","mail2money.com","mail2mongolia.com","mail2monica.com","mail2montana.com","mail2monty.com","mail2moon.com","mail2morocco.com","mail2morpheus.com","mail2mors.com","mail2moscow.com","mail2moslem.com","mail2mouseketeer.com","mail2movies.com","mail2mozambique.com","mail2mp3.com","mail2mrright.com","mail2msright.com","mail2museum.com","mail2music.com","mail2musician.com","mail2muslim.com","mail2my.com","mail2myboat.com","mail2mycar.com","mail2mycell.com","mail2mygsm.com","mail2mylaptop.com","mail2mymac.com","mail2mypager.com","mail2mypalm.com","mail2mypc.com","mail2myphone.com","mail2myplane.com","mail2namibia.com","mail2nancy.com","mail2nasdaq.com","mail2nathan.com","mail2nauru.com","mail2navy.com","mail2neal.com","mail2nebraska.com","mail2ned.com","mail2neil.com","mail2nelson.com","mail2nemesis.com","mail2nepal.com","mail2netherlands.com","mail2network.com","mail2nevada.com","mail2newhampshire.com","mail2newjersey.com","mail2newmexico.com","mail2newyork.com","mail2newzealand.com","mail2nicaragua.com","mail2nick.com","mail2nicole.com","mail2niger.com","mail2nigeria.com","mail2nike.com","mail2no.com","mail2noah.com","mail2noel.com","mail2noelle.com","mail2normal.com","mail2norman.com","mail2northamerica.com","mail2northcarolina.com","mail2northdakota.com","mail2northpole.com","mail2norway.com","mail2notus.com","mail2noway.com","mail2nowhere.com","mail2nuclear.com","mail2nun.com","mail2ny.com","mail2oasis.com","mail2oceanographer.com","mail2ohio.com","mail2ok.com","mail2oklahoma.com","mail2oliver.com","mail2oman.com","mail2one.com","mail2onfire.com","mail2online.com","mail2oops.com","mail2open.com","mail2ophthalmologist.com","mail2optometrist.com","mail2oregon.com","mail2oscars.com","mail2oslo.com","mail2painter.com","mail2pakistan.com","mail2palau.com","mail2pan.com","mail2panama.com","mail2paraguay.com","mail2paralegal.com","mail2paris.com","mail2park.com","mail2parker.com","mail2party.com","mail2passion.com","mail2pat.com","mail2patricia.com","mail2patrick.com","mail2patty.com","mail2paul.com","mail2paula.com","mail2pay.com","mail2peace.com","mail2pediatrician.com","mail2peggy.com","mail2pennsylvania.com","mail2perry.com","mail2persephone.com","mail2persian.com","mail2peru.com","mail2pete.com","mail2peter.com","mail2pharmacist.com","mail2phil.com","mail2philippines.com","mail2phoenix.com","mail2phonecall.com","mail2phyllis.com","mail2pickup.com","mail2pilot.com","mail2pisces.com","mail2planet.com","mail2platinum.com","mail2plato.com","mail2pluto.com","mail2pm.com","mail2podiatrist.com","mail2poet.com","mail2poland.com","mail2policeman.com","mail2policewoman.com","mail2politician.com","mail2pop.com","mail2pope.com","mail2popular.com","mail2portugal.com","mail2poseidon.com","mail2potatohead.com","mail2power.com","mail2presbyterian.com","mail2president.com","mail2priest.com","mail2prince.com","mail2princess.com","mail2producer.com","mail2professor.com","mail2protect.com","mail2psychiatrist.com","mail2psycho.com","mail2psychologist.com","mail2qatar.com","mail2queen.com","mail2rabbi.com","mail2race.com","mail2racer.com","mail2rachel.com","mail2rage.com","mail2rainmaker.com","mail2ralph.com","mail2randy.com","mail2rap.com","mail2rare.com","mail2rave.com","mail2ray.com","mail2raymond.com","mail2realtor.com","mail2rebecca.com","mail2recruiter.com","mail2recycle.com","mail2redhead.com","mail2reed.com","mail2reggie.com","mail2register.com","mail2rent.com","mail2republican.com","mail2resort.com","mail2rex.com","mail2rhodeisland.com","mail2rich.com","mail2richard.com","mail2ricky.com","mail2ride.com","mail2riley.com","mail2rita.com","mail2rob.com","mail2robert.com","mail2roberta.com","mail2robin.com","mail2rock.com","mail2rocker.com","mail2rod.com","mail2rodney.com","mail2romania.com","mail2rome.com","mail2ron.com","mail2ronald.com","mail2ronnie.com","mail2rose.com","mail2rosie.com","mail2roy.com","mail2rss.org","mail2rudy.com","mail2rugby.com","mail2runner.com","mail2russell.com","mail2russia.com","mail2russian.com","mail2rusty.com","mail2ruth.com","mail2rwanda.com","mail2ryan.com","mail2sa.com","mail2sabrina.com","mail2safe.com","mail2sagittarius.com","mail2sail.com","mail2sailor.com","mail2sal.com","mail2salaam.com","mail2sam.com","mail2samantha.com","mail2samoa.com","mail2samurai.com","mail2sandra.com","mail2sandy.com","mail2sanfrancisco.com","mail2sanmarino.com","mail2santa.com","mail2sara.com","mail2sarah.com","mail2sat.com","mail2saturn.com","mail2saudi.com","mail2saudiarabia.com","mail2save.com","mail2savings.com","mail2school.com","mail2scientist.com","mail2scorpio.com","mail2scott.com","mail2sean.com","mail2search.com","mail2seattle.com","mail2secretagent.com","mail2senate.com","mail2senegal.com","mail2sensual.com","mail2seth.com","mail2sevenseas.com","mail2sexy.com","mail2seychelles.com","mail2shane.com","mail2sharon.com","mail2shawn.com","mail2ship.com","mail2shirley.com","mail2shoot.com","mail2shuttle.com","mail2sierraleone.com","mail2simon.com","mail2singapore.com","mail2single.com","mail2site.com","mail2skater.com","mail2skier.com","mail2sky.com","mail2sleek.com","mail2slim.com","mail2slovakia.com","mail2slovenia.com","mail2smile.com","mail2smith.com","mail2smooth.com","mail2soccer.com","mail2soccerfan.com","mail2socialist.com","mail2soldier.com","mail2somalia.com","mail2son.com","mail2song.com","mail2sos.com","mail2sound.com","mail2southafrica.com","mail2southamerica.com","mail2southcarolina.com","mail2southdakota.com","mail2southkorea.com","mail2southpole.com","mail2spain.com","mail2spanish.com","mail2spare.com","mail2spectrum.com","mail2splash.com","mail2sponsor.com","mail2sports.com","mail2srilanka.com","mail2stacy.com","mail2stan.com","mail2stanley.com","mail2star.com","mail2state.com","mail2stephanie.com","mail2steve.com","mail2steven.com","mail2stewart.com","mail2stlouis.com","mail2stock.com","mail2stockholm.com","mail2stockmarket.com","mail2storage.com","mail2store.com","mail2strong.com","mail2student.com","mail2studio.com","mail2studio54.com","mail2stuntman.com","mail2subscribe.com","mail2sudan.com","mail2superstar.com","mail2surfer.com","mail2suriname.com","mail2susan.com","mail2suzie.com","mail2swaziland.com","mail2sweden.com","mail2sweetheart.com","mail2swim.com","mail2swimmer.com","mail2swiss.com","mail2switzerland.com","mail2sydney.com","mail2sylvia.com","mail2syria.com","mail2taboo.com","mail2taiwan.com","mail2tajikistan.com","mail2tammy.com","mail2tango.com","mail2tanya.com","mail2tanzania.com","mail2tara.com","mail2taurus.com","mail2taxi.com","mail2taxidermist.com","mail2taylor.com","mail2taz.com","mail2teacher.com","mail2technician.com","mail2ted.com","mail2telephone.com","mail2teletubbie.com","mail2tenderness.com","mail2tennessee.com","mail2tennis.com","mail2tennisfan.com","mail2terri.com","mail2terry.com","mail2test.com","mail2texas.com","mail2thailand.com","mail2therapy.com","mail2think.com","mail2tickets.com","mail2tiffany.com","mail2tim.com","mail2time.com","mail2timothy.com","mail2tina.com","mail2titanic.com","mail2toby.com","mail2todd.com","mail2togo.com","mail2tom.com","mail2tommy.com","mail2tonga.com","mail2tony.com","mail2touch.com","mail2tourist.com","mail2tracey.com","mail2tracy.com","mail2tramp.com","mail2travel.com","mail2traveler.com","mail2travis.com","mail2trekkie.com","mail2trex.com","mail2triallawyer.com","mail2trick.com","mail2trillionaire.com","mail2troy.com","mail2truck.com","mail2trump.com","mail2try.com","mail2tunisia.com","mail2turbo.com","mail2turkey.com","mail2turkmenistan.com","mail2tv.com","mail2tycoon.com","mail2tyler.com","mail2u4me.com","mail2uae.com","mail2uganda.com","mail2uk.com","mail2ukraine.com","mail2uncle.com","mail2unsubscribe.com","mail2uptown.com","mail2uruguay.com","mail2usa.com","mail2utah.com","mail2uzbekistan.com","mail2v.com","mail2vacation.com","mail2valentines.com","mail2valerie.com","mail2valley.com","mail2vamoose.com","mail2vanessa.com","mail2vanuatu.com","mail2venezuela.com","mail2venous.com","mail2venus.com","mail2vermont.com","mail2vickie.com","mail2victor.com","mail2victoria.com","mail2vienna.com","mail2vietnam.com","mail2vince.com","mail2virginia.com","mail2virgo.com","mail2visionary.com","mail2vodka.com","mail2volleyball.com","mail2waiter.com","mail2wallstreet.com","mail2wally.com","mail2walter.com","mail2warren.com","mail2washington.com","mail2wave.com","mail2way.com","mail2waycool.com","mail2wayne.com","mail2webmaster.com","mail2webtop.com","mail2webtv.com","mail2weird.com","mail2wendell.com","mail2wendy.com","mail2westend.com","mail2westvirginia.com","mail2whether.com","mail2whip.com","mail2white.com","mail2whitehouse.com","mail2whitney.com","mail2why.com","mail2wilbur.com","mail2wild.com","mail2willard.com","mail2willie.com","mail2wine.com","mail2winner.com","mail2wired.com","mail2wisconsin.com","mail2woman.com","mail2wonder.com","mail2world.com","mail2worship.com","mail2wow.com","mail2www.com","mail2wyoming.com","mail2xfiles.com","mail2xox.com","mail2yachtclub.com","mail2yahalla.com","mail2yemen.com","mail2yes.com","mail2yugoslavia.com","mail2zack.com","mail2zambia.com","mail2zenith.com","mail2zephir.com","mail2zeus.com","mail2zipper.com","mail2zoo.com","mail2zoologist.com","mail2zurich.com","mail3000.com","mail333.com","mail4trash.com","mail4u.info","mail8.com","mailandftp.com","mailandnews.com","mailas.com","mailasia.com","mailbidon.com","mailbiz.biz","mailblocks.com","mailbolt.com","mailbomb.net","mailboom.com","mailbox.as","mailbox.co.za","mailbox.gr","mailbox.hu","mailbox72.biz","mailbox80.biz","mailbr.com.br","mailbucket.org","mailc.net","mailcan.com","mailcat.biz","mailcatch.com","mailcc.com","mailchoose.co","mailcity.com","mailclub.fr","mailclub.net","mailde.de","mailde.info","maildrop.cc","maildrop.gq","maildx.com","mailed.ro","maileimer.de","mailexcite.com","mailexpire.com","mailfa.tk","mailfly.com","mailforce.net","mailforspam.com","mailfree.gq","mailfreeonline.com","mailfreeway.com","mailfs.com","mailftp.com","mailgate.gr","mailgate.ru","mailgenie.net","mailguard.me","mailhaven.com","mailhood.com","mailimate.com","mailin8r.com","mailinatar.com","mailinater.com","mailinator.com","mailinator.net","mailinator.org","mailinator.us","mailinator2.com","mailinblack.com","mailincubator.com","mailingaddress.org","mailingweb.com","mailisent.com","mailismagic.com","mailite.com","mailmate.com","mailme.dk","mailme.gq","mailme.ir","mailme.lv","mailme24.com","mailmetrash.com","mailmight.com","mailmij.nl","mailmoat.com","mailms.com","mailnator.com","mailnesia.com","mailnew.com","mailnull.com","mailops.com","mailorg.org","mailoye.com","mailpanda.com","mailpick.biz","mailpokemon.com","mailpost.zzn.com","mailpride.com","mailproxsy.com","mailpuppy.com","mailquack.com","mailrock.biz","mailroom.com","mailru.com","mailsac.com","mailscrap.com","mailseal.de","mailsent.net","mailserver.ru","mailservice.ms","mailshell.com","mailshuttle.com","mailsiphon.com","mailslapping.com","mailsnare.net","mailstart.com","mailstartplus.com","mailsurf.com","mailtag.com","mailtemp.info","mailto.de","mailtome.de","mailtothis.com","mailtrash.net","mailtv.net","mailtv.tv","mailueberfall.de","mailup.net","mailwire.com","mailworks.org","mailzi.ru","mailzilla.com","mailzilla.org","makemetheking.com","maktoob.com","malayalamtelevision.net","malayalapathram.com","male.ru","maltesemail.com","mamber.net","manager.de","manager.in.th","mancity.net","manlymail.net","mantrafreenet.com","mantramail.com","mantraonline.com","manutdfans.com","manybrain.com","marchmail.com","marfino.net","margarita.ru","mariah-carey.ml.org","mariahc.com","marijuana.com","marijuana.nl","marketing.lu","marketingfanatic.com","marketweighton.com","married-not.com","marriedandlovingit.com","marry.ru","marsattack.com","martindalemail.com","martinguerre.net","mash4077.com","masrawy.com","matmail.com","mauimail.com","mauritius.com","maximumedge.com","maxleft.com","maxmail.co.uk","mayaple.ru","mbox.com.au","mbx.cc","mchsi.com","mcrmail.com","me-mail.hu","me.com","meanpeoplesuck.com","meatismurder.net","medical.net.au","medmail.com","medscape.com","meetingmall.com","mega.zik.dj","megago.com","megamail.pt","megapoint.com","mehrani.com","mehtaweb.com","meine-dateien.info","meine-diashow.de","meine-fotos.info","meine-urlaubsfotos.de","meinspamschutz.de","mekhong.com","melodymail.com","meloo.com","meltmail.com","members.student.com","menja.net","merda.flu.cc","merda.igg.biz","merda.nut.cc","merda.usa.cc","merseymail.com","mesra.net","message.hu","message.myspace.com","messagebeamer.de","messages.to","messagez.com","metacrawler.com","metalfan.com","metaping.com","metta.lk","mexicomail.com","mezimages.net","mfsa.ru","miatadriver.com","mierdamail.com","miesto.sk","mighty.co.za","migmail.net","migmail.pl","migumail.com","miho-nakayama.com","mikrotamanet.com","millionaireintraining.com","millionairemail.com","milmail.com","milmail.com15","mindless.com","mindspring.com","minermail.com","mini-mail.com","minister.com","ministry-of-silly-walks.de","mintemail.com","misery.net","misterpinball.de","mit.tc","mittalweb.com","mixmail.com","mjfrogmail.com","ml1.net","mlanime.com","mlb.bounce.ed10.net","mm.st","mmail.com","mns.ru","mo3gov.net","moakt.com","mobico.ru","mobilbatam.com","mobileninja.co.uk","mochamail.com","modemnet.net","modernenglish.com","modomail.com","mohammed.com","mohmal.com","moldova.cc","moldova.com","moldovacc.com","mom-mail.com","momslife.com","moncourrier.fr.nf","monemail.com","monemail.fr.nf","money.net","mongol.net","monmail.fr.nf","monsieurcinema.com","montevideo.com.uy","monumentmail.com","moomia.com","moonman.com","moose-mail.com","mor19.uu.gl","mortaza.com","mosaicfx.com","moscowmail.com","mosk.ru","most-wanted.com","mostlysunny.com","motorcyclefan.net","motormania.com","movemail.com","movieemail.net","movieluver.com","mox.pp.ua","mozartmail.com","mozhno.net","mp3haze.com","mp4.it","mr-potatohead.com","mrpost.com","mrspender.com","mscold.com","msgbox.com","msn.cn","msn.com","msn.nl","msx.ru","mt2009.com","mt2014.com","mt2015.com","mt2016.com","mttestdriver.com","muehlacker.tk","multiplechoices","mundomail.net","munich.com","music.com","music.com19","music.maigate.ru","musician.com","musician.org","musicscene.org","muskelshirt.de","muslim.com","muslimemail.com","muslimsonline.com","mutantweb.com","mvrht.com","my.com","my10minutemail.com","mybox.it","mycabin.com","mycampus.com","mycard.net.ua","mycity.com","mycleaninbox.net","mycool.com","mydomain.com","mydotcomaddress.com","myfairpoint.net","myfamily.com","myfastmail.com","myfunnymail.com","mygo.com","myiris.com","myjazzmail.com","mymac.ru","mymacmail.com","mymail-in.net","mymail.ro","mynamedot.com","mynet.com","mynetaddress.com","mynetstore.de","myotw.net","myownemail.com","myownfriends.com","mypacks.net","mypad.com","mypartyclip.de","mypersonalemail.com","myphantomemail.com","myplace.com","myrambler.ru","myrealbox.com","myremarq.com","mysamp.de","myself.com","myspaceinc.net","myspamless.com","mystupidjob.com","mytemp.email","mytempemail.com","mytempmail.com","mythirdage.com","mytrashmail.com","myway.com","myworldmail.com","n2.com","n2baseball.com","n2business.com","n2mail.com","n2soccer.com","n2software.com","nabc.biz","nabuma.com","nafe.com","nagarealm.com","nagpal.net","nakedgreens.com","name.com","nameplanet.com","nanaseaikawa.com","nandomail.com","naplesnews.net","naseej.com","nate.com","nativestar.net","nativeweb.net","naui.net","naver.com","navigator.lv","navy.org","naz.com","nc.rr.com","nc.ru","nchoicemail.com","neeva.net","nekto.com","nekto.net","nekto.ru","nemra1.com","nenter.com","neo.rr.com","neomailbox.com","nepwk.com","nervhq.org","nervmich.net","nervtmich.net","net-c.be","net-c.ca","net-c.cat","net-c.com","net-c.es","net-c.fr","net-c.it","net-c.lu","net-c.nl","net-c.pl","net-pager.net","net-shopping.com","net.tf","net4b.pt","net4you.at","netaddres.ru","netaddress.ru","netbounce.com","netbroadcaster.com","netby.dk","netc.eu","netc.fr","netc.it","netc.lu","netc.pl","netcenter-vn.net","netcity.ru","netcmail.com","netcourrier.com","netexecutive.com","netexpressway.com","netfirms.com","netgenie.com","netian.com","netizen.com.ar","netkushi.com","netlane.com","netlimit.com","netmail.kg","netmails.com","netmails.net","netman.ru","netmanor.com","netmongol.com","netnet.com.sg","netnoir.net","netpiper.com","netposta.net","netradiomail.com","netralink.com","netscape.net","netscapeonline.co.uk","netspace.net.au","netspeedway.com","netsquare.com","netster.com","nettaxi.com","nettemail.com","netterchef.de","netti.fi","netvigator.com","netzero.com","netzero.net","netzidiot.de","netzoola.com","neue-dateien.de","neuf.fr","neuro.md","neustreet.com","neverbox.com","newap.ru","newarbat.net","newmail.com","newmail.net","newmail.ru","newsboysmail.com","newyork.com","newyorkcity.com","nextmail.ru","nexxmail.com","nfmail.com","ngs.ru","nhmail.com","nice-4u.com","nicebush.com","nicegal.com","nicholastse.net","nicolastse.com","niepodam.pl","nightimeuk.com","nightmail.com","nightmail.ru","nikopage.com","nikulino.net","nimail.com","nincsmail.hu","ninfan.com","nirvanafan.com","nm.ru","nmail.cf","nnh.com","nnov.ru","no-spam.ws","no4ma.ru","noavar.com","noblepioneer.com","nogmailspam.info","nomail.pw","nomail.xl.cx","nomail2me.com","nomorespamemails.com","nonpartisan.com","nonspam.eu","nonspammer.de","nonstopcinema.com","norika-fujiwara.com","norikomail.com","northgates.net","nospam.ze.tc","nospam4.us","nospamfor.us","nospammail.net","nospamthanks.info","notmailinator.com","notsharingmy.info","notyouagain.com","novogireevo.net","novokosino.net","nowhere.org","nowmymail.com","ntelos.net","ntlhelp.net","ntlworld.com","ntscan.com","null.net","nullbox.info","numep.ru","nur-fuer-spam.de","nurfuerspam.de","nus.edu.sg","nuvse.com","nwldx.com","nxt.ru","ny.com","nybce.com","nybella.com","nyc.com","nycmail.com","nz11.com","nzoomail.com","o-tay.com","o2.co.uk","o2.pl","oaklandas-fan.com","oath.com","objectmail.com","obobbo.com","oceanfree.net","ochakovo.net","odaymail.com","oddpost.com","odmail.com","odnorazovoe.ru","office-dateien.de","office-email.com","officedomain.com","offroadwarrior.com","oi.com.br","oicexchange.com","oikrach.com","ok.kz","ok.net","ok.ru","okbank.com","okhuman.com","okmad.com","okmagic.com","okname.net","okuk.com","oldbuthealthy.com","oldies1041.com","oldies104mail.com","ole.com","olemail.com","oligarh.ru","olympist.net","olypmall.ru","omaninfo.com","omen.ru","ondikoi.com","onebox.com","onenet.com.ar","oneoffemail.com","oneoffmail.com","onet.com.pl","onet.eu","onet.pl","onewaymail.com","oninet.pt","onlatedotcom.info","online.de","online.ie","online.ms","online.nl","online.ru","onlinecasinogamblings.com","onlinewiz.com","onmicrosoft.com","onmilwaukee.com","onobox.com","onvillage.com","oopi.org","op.pl","opayq.com","opendiary.com","openmailbox.org","operafan.com","operamail.com","opoczta.pl","optician.com","optonline.net","optusnet.com.au","orange.fr","orange.net","orbitel.bg","ordinaryamerican.net","orgmail.net","orthodontist.net","osite.com.br","oso.com","otakumail.com","otherinbox.com","our-computer.com","our-office.com","our.st","ourbrisbane.com","ourklips.com","ournet.md","outel.com","outgun.com","outlawspam.com","outlook.at","outlook.be","outlook.cl","outlook.co.id","outlook.co.il","outlook.co.nz","outlook.co.th","outlook.com","outlook.com.au","outlook.com.br","outlook.com.gr","outlook.com.pe","outlook.com.tr","outlook.com.vn","outlook.cz","outlook.de","outlook.dk","outlook.es","outlook.fr","outlook.hu","outlook.ie","outlook.in","outlook.it","outlook.jp","outlook.kr","outlook.lv","outlook.my","outlook.nl","outlook.ph","outlook.pt","outlook.sa","outlook.sg","outlook.sk","outloook.com","over-the-rainbow.com","ovi.com","ovpn.to","owlpic.com","ownmail.net","ozbytes.net.au","ozemail.com.au","ozz.ru","pacbell.net","pacific-ocean.com","pacific-re.com","pacificwest.com","packersfan.com","pagina.de","pagons.org","paidforsurf.com","pakistanmail.com","pakistanoye.com","palestinemail.com","pancakemail.com","pandawa.com","pandora.be","paradiseemail.com","paris.com","parkjiyoon.com","parrot.com","parsmail.com","partlycloudy.com","partybombe.de","partyheld.de","partynight.at","parvazi.com","passwordmail.com","pathfindermail.com","patmail.com","patra.net","pconnections.net","pcpostal.com","pcsrock.com","pcusers.otherinbox.com","peachworld.com","pechkin.ru","pediatrician.com","pekklemail.com","pemail.net","penpen.com","peoplepc.com","peopleweb.com","pepbot.com","perfectmail.com","perovo.net","perso.be","personal.ro","personales.com","petlover.com","petml.com","petr.ru","pettypool.com","pezeshkpour.com","pfui.ru","phayze.com","phone.net","photo-impact.eu","photographer.net","phpbb.uu.gl","phreaker.net","phus8kajuspa.cu.cc","physicist.net","pianomail.com","pickupman.com","picusnet.com","piercedallover.com","pigeonportal.com","pigmail.net","pigpig.net","pilotemail.com","pimagop.com","pinoymail.com","piracha.net","pisem.net","pjjkp.com","planet-mail.com","planet.nl","planetaccess.com","planetall.com","planetarymotion.net","planetdirect.com","planetearthinter.net","planetmail.com","planetmail.net","planetout.com","plasa.com","playersodds.com","playful.com","playstation.sony.com","plexolan.de","pluno.com","plus.com","plus.google.com","plusmail.com.br","pmail.net","pobox.com","pobox.hu","pobox.ru","pobox.sk","pochta.by","pochta.ru","pochta.ws","pochtamt.ru","poczta.fm","poczta.onet.pl","poetic.com","pokemail.net","pokemonpost.com","pokepost.com","polandmail.com","polbox.com","policeoffice.com","politician.com","politikerclub.de","polizisten-duzer.de","polyfaust.com","poofy.org","poohfan.com","pookmail.com","pool-sharks.com","poond.com","pop3.ru","popaccount.com","popmail.com","popsmail.com","popstar.com","populus.net","portableoffice.com","portugalmail.com","portugalmail.pt","portugalnet.com","positive-thinking.com","post.com","post.cz","post.sk","posta.net","posta.ro","posta.rosativa.ro.org","postaccesslite.com","postafiok.hu","postafree.com","postaweb.com","poste.it","postfach.cc","postinbox.com","postino.ch","postino.it","postmark.net","postmaster.co.uk","postmaster.twitter.com","postpro.net","pousa.com","powerdivas.com","powerfan.com","pp.inet.fi","praize.com","pray247.com","predprinimatel.ru","premium-mail.fr","premiumproducts.com","premiumservice.com","prepodavatel.ru","presidency.com","presnya.net","press.co.jp","prettierthanher.com","priest.com","primposta.com","primposta.hu","printesamargareta.ro","privacy.net","privatdemail.net","privy-mail.com","privymail.de","pro.hu","probemail.com","prodigy.net","prodigy.net.mx","professor.ru","progetplus.it","programist.ru","programmer.net","programozo.hu","proinbox.com","project2k.com","prokuratura.ru","prolaunch.com","promessage.com","prontomail.com","prontomail.compopulus.net","protestant.com","protonmail.com","proxymail.eu","prtnx.com","prydirect.info","psv-supporter.com","ptd.net","public-files.de","public.usa.com","publicist.com","pulp-fiction.com","punkass.com","puppy.com.my","purinmail.com","purpleturtle.com","put2.net","putthisinyourspamdatabase.com","pwrby.com","q.com","qatar.io","qatarmail.com","qdice.com","qip.ru","qmail.com","qprfans.com","qq.com","qrio.com","quackquack.com","quake.ru","quakemail.com","qualityservice.com","quantentunnel.de","qudsmail.com","quepasa.com","quickhosts.com","quickinbox.com","quickmail.nl","quickmail.ru","quicknet.nl","quickwebmail.com","quiklinks.com","quikmail.com","qv7.info","qwest.net","qwestoffice.net","r-o-o-t.com","r7.com","raakim.com","racedriver.com","racefanz.com","racingfan.com.au","racingmail.com","radicalz.com","radiku.ye.vc","radiologist.net","ragingbull.com","ralib.com","rambler.ru","ranmamail.com","rastogi.net","ratt-n-roll.com","rattle-snake.com","raubtierbaendiger.de","ravearena.com","ravefan.com","ravemail.co.za","ravemail.com","razormail.com","rccgmail.org","rcn.com","rcpt.at","realemail.net","realestatemail.net","reality-concept.club","reallyfast.biz","reallyfast.info","reallymymail.com","realradiomail.com","realtyagent.com","realtyalerts.ca","reborn.com","recode.me","reconmail.com","recursor.net","recycledmail.com","recycler.com","recyclermail.com","rediff.com","rediffmail.com","rediffmailpro.com","rednecks.com","redseven.de","redsfans.com","redwhitearmy.com","regbypass.com","reggaefan.com","reggafan.com","regiononline.com","registerednurses.com","regspaces.tk","reincarnate.com","relia.com","reliable-mail.com","religious.com","remail.ga","renren.com","repairman.com","reply.hu","reply.ticketmaster.com","represantive.com","representative.com","rescueteam.com","resgedvgfed.tk","resource.calendar.google.com","resumemail.com","retailfan.com","rexian.com","rezai.com","rhyta.com","richmondhill.com","rickymail.com","rin.ru","ring.by","riopreto.com.br","rklips.com","rmqkr.net","rn.com","ro.ru","roadrunner.com","roanokemail.com","rock.com","rocketmail.com","rocketship.com","rockfan.com","rodrun.com","rogers.com","rojname.com","rol.ro","rome.com","romymichele.com","roosh.com","rootprompt.org","rotfl.com","roughnet.com","royal.net","rpharmacist.com","rr.com","rrohio.com","rsub.com","rt.nl","rtrtr.com","ru.ru","rubyridge.com","runbox.com","rushpost.com","ruttolibero.com","rvshop.com","rxdoc.biz","s-mail.com","s0ny.net","sabreshockey.com","sacbeemail.com","saeuferleber.de","safarimail.com","safe-mail.net","safersignup.de","safetymail.info","safetypost.de","safrica.com","sagra.lu","sagra.lu.lu","sagra.lumarketing.lu","sags-per-mail.de","sailormoon.com","saint-mike.org","saintly.com","saintmail.net","sale-sale-sale.com","salehi.net","salesperson.net","samerica.com","samilan.net","samiznaetekogo.net","sammimail.com","sanchezsharks.com","sandelf.de","sanfranmail.com","sanook.com","sanriotown.com","santanmail.com","sapo.pt","sativa.ro.org","saturnfans.com","saturnperformance.com","saudia.com","savecougars.com","savelife.ml","saveowls.com","sayhi.net","saynotospams.com","sbcglbal.net","sbcglobal.com","sbcglobal.net","scandalmail.com","scanova.in","scanova.io","scarlet.nl","scfn.net","schafmail.de","schizo.com","schmusemail.de","schoolemail.com","schoolmail.com","schoolsucks.com","schreib-doch-mal-wieder.de","schrott-email.de","schweiz.org","sci.fi","science.com.au","scientist.com","scifianime.com","scotland.com","scotlandmail.com","scottishmail.co.uk","scottishtories.com","scottsboro.org","scrapbookscrapbook.com","scubadiving.com","seanet.com","search.ua","search417.com","searchwales.com","sebil.com","seckinmail.com","secret-police.com","secretarias.com","secretary.net","secretemail.de","secretservices.net","secure-mail.biz","secure-mail.cc","seductive.com","seekstoyboy.com","seguros.com.br","sekomaonline.com","selfdestructingmail.com","sellingspree.com","send.hu","sendmail.ru","sendme.cz","sendspamhere.com","senseless-entertainment.com","sent.as","sent.at","sent.com","sentrismail.com","serga.com.ar","servemymail.com","servermaps.net","services391.com","sesmail.com","sexmagnet.com","seznam.cz","sfr.fr","shahweb.net","shaniastuff.com","shared-files.de","sharedmailbox.org","sharewaredevelopers.com","sharklasers.com","sharmaweb.com","shaw.ca","she.com","shellov.net","shieldedmail.com","shieldemail.com","shiftmail.com","shinedyoureyes.com","shitaway.cf","shitaway.cu.cc","shitaway.ga","shitaway.gq","shitaway.ml","shitaway.tk","shitaway.usa.cc","shitmail.de","shitmail.me","shitmail.org","shitware.nl","shmeriously.com","shockinmytown.cu.cc","shootmail.com","shortmail.com","shortmail.net","shotgun.hu","showfans.com","showslow.de","shqiptar.eu","shuf.com","sialkotcity.com","sialkotian.com","sialkotoye.com","sibmail.com","sify.com","sigaret.net","silkroad.net","simbamail.fm","sina.cn","sina.com","sinamail.com","singapore.com","singles4jesus.com","singmail.com","singnet.com.sg","singpost.com","sinnlos-mail.de","sirindia.com","siteposter.net","skafan.com","skeefmail.com","skim.com","skizo.hu","skrx.tk","skunkbox.com","sky.com","skynet.be","slamdunkfan.com","slapsfromlastnight.com","slaskpost.se","slave-auctions.net","slickriffs.co.uk","slingshot.com","slippery.email","slipry.net","slo.net","slotter.com","sm.westchestergov.com","smap.4nmv.ru","smapxsmap.net","smashmail.de","smellfear.com","smellrear.com","smileyface.comsmithemail.net","sminkymail.com","smoothmail.com","sms.at","smtp.ru","snail-mail.net","snail-mail.ney","snakebite.com","snakemail.com","sndt.net","sneakemail.com","sneakmail.de","snet.net","sniper.hu","snkmail.com","snoopymail.com","snowboarding.com","snowdonia.net","so-simple.org","socamail.com","socceraccess.com","socceramerica.net","soccermail.com","soccermomz.com","social-mailer.tk","socialworker.net","sociologist.com","sofimail.com","sofort-mail.de","sofortmail.de","softhome.net","sogetthis.com","sogou.com","sohu.com","sokolniki.net","sol.dk","solar-impact.pro","solcon.nl","soldier.hu","solution4u.com","solvemail.info","songwriter.net","sonnenkinder.org","soodomail.com","soodonims.com","soon.com","soulfoodcookbook.com","soundofmusicfans.com","southparkmail.com","sovsem.net","sp.nl","space-bank.com","space-man.com","space-ship.com","space-travel.com","space.com","spaceart.com","spacebank.com","spacemart.com","spacetowns.com","spacewar.com","spainmail.com","spam.2012-2016.ru","spam4.me","spamail.de","spamarrest.com","spamavert.com","spambob.com","spambob.net","spambob.org","spambog.com","spambog.de","spambog.net","spambog.ru","spambooger.com","spambox.info","spambox.us","spamcannon.com","spamcannon.net","spamcero.com","spamcon.org","spamcorptastic.com","spamcowboy.com","spamcowboy.net","spamcowboy.org","spamday.com","spamdecoy.net","spameater.com","spameater.org","spamex.com","spamfree.eu","spamfree24.com","spamfree24.de","spamfree24.info","spamfree24.net","spamfree24.org","spamgoes.in","spamgourmet.com","spamgourmet.net","spamgourmet.org","spamherelots.com","spamhereplease.com","spamhole.com","spamify.com","spaminator.de","spamkill.info","spaml.com","spaml.de","spammotel.com","spamobox.com","spamoff.de","spamslicer.com","spamspot.com","spamstack.net","spamthis.co.uk","spamtroll.net","spankthedonkey.com","spartapiet.com","spazmail.com","speed.1s.fr","speedemail.net","speedpost.net","speedrules.com","speedrulz.com","speedy.com.ar","speedymail.org","sperke.net","spils.com","spinfinder.com","spiritseekers.com","spl.at","spoko.pl","spoofmail.de","sportemail.com","sportmail.ru","sportsmail.com","sporttruckdriver.com","spray.no","spray.se","spybox.de","spymac.com","sraka.xyz","srilankan.net","ssl-mail.com","st-davids.net","stade.fr","stalag13.com","standalone.net","starbuzz.com","stargateradio.com","starmail.com","starmail.org","starmedia.com","starplace.com","starspath.com","start.com.au","starting-point.com","startkeys.com","startrekmail.com","starwars-fans.com","stealthmail.com","stillchronic.com","stinkefinger.net","stipte.nl","stockracer.com","stockstorm.com","stoned.com","stones.com","stop-my-spam.pp.ua","stopdropandroll.com","storksite.com","streber24.de","streetwisemail.com","stribmail.com","strompost.com","strongguy.com","student.su","studentcenter.org","stuffmail.de","subnetwork.com","subram.com","sudanmail.net","sudolife.me","sudolife.net","sudomail.biz","sudomail.com","sudomail.net","sudoverse.com","sudoverse.net","sudoweb.net","sudoworld.com","sudoworld.net","sueddeutsche.de","suhabi.com","suisse.org","sukhumvit.net","sul.com.br","sunmail1.com","sunpoint.net","sunrise-sunset.com","sunsgame.com","sunumail.sn","suomi24.fi","super-auswahl.de","superdada.com","supereva.it","supergreatmail.com","supermail.ru","supermailer.jp","superman.ru","superposta.com","superrito.com","superstachel.de","surat.com","suremail.info","surf3.net","surfree.com","surfsupnet.net","surfy.net","surgical.net","surimail.com","survivormail.com","susi.ml","sviblovo.net","svk.jp","swbell.net","sweb.cz","swedenmail.com","sweetville.net","sweetxxx.de","swift-mail.com","swiftdesk.com","swingeasyhithard.com","swingfan.com","swipermail.zzn.com","swirve.com","swissinfo.org","swissmail.com","swissmail.net","switchboardmail.com","switzerland.org","sx172.com","sympatico.ca","syom.com","syriamail.com","t-online.de","t.psh.me","t2mail.com","tafmail.com","takoe.com","takoe.net","takuyakimura.com","talk21.com","talkcity.com","talkinator.com","talktalk.co.uk","tamb.ru","tamil.com","tampabay.rr.com","tangmonkey.com","tankpolice.com","taotaotano.com","tatanova.com","tattooedallover.com","tattoofanatic.com","tbwt.com","tcc.on.ca","tds.net","teacher.com","teachermail.net","teachers.org","teamdiscovery.com","teamtulsa.net","tech-center.com","tech4peace.org","techemail.com","techie.com","technisamail.co.za","technologist.com","technologyandstocks.com","techpointer.com","techscout.com","techseek.com","techsniper.com","techspot.com","teenagedirtbag.com","teewars.org","tele2.nl","telebot.com","telebot.net","telefonica.net","teleline.es","telenet.be","telepac.pt","telerymd.com","teleserve.dynip.com","teletu.it","teleworm.com","teleworm.us","telfort.nl","telfortglasvezel.nl","telinco.net","telkom.net","telpage.net","telstra.com","telstra.com.au","temp-mail.com","temp-mail.de","temp-mail.org","temp-mail.ru","temp.headstrong.de","tempail.com","tempe-mail.com","tempemail.biz","tempemail.co.za","tempemail.com","tempemail.net","tempinbox.co.uk","tempinbox.com","tempmail.eu","tempmail.it","tempmail.us","tempmail2.com","tempmaildemo.com","tempmailer.com","tempmailer.de","tempomail.fr","temporarioemail.com.br","temporaryemail.net","temporaryemail.us","temporaryforwarding.com","temporaryinbox.com","temporarymailaddress.com","tempthe.net","tempymail.com","temtulsa.net","tenchiclub.com","tenderkiss.com","tennismail.com","terminverpennt.de","terra.cl","terra.com","terra.com.ar","terra.com.br","terra.com.pe","terra.es","test.com","test.de","tfanus.com.er","tfbnw.net","tfz.net","tgasa.ru","tgma.ru","tgngu.ru","tgu.ru","thai.com","thaimail.com","thaimail.net","thanksnospam.info","thankyou2010.com","thc.st","the-african.com","the-airforce.com","the-aliens.com","the-american.com","the-animal.com","the-army.com","the-astronaut.com","the-beauty.com","the-big-apple.com","the-biker.com","the-boss.com","the-brazilian.com","the-canadian.com","the-canuck.com","the-captain.com","the-chinese.com","the-country.com","the-cowboy.com","the-davis-home.com","the-dutchman.com","the-eagles.com","the-englishman.com","the-fastest.net","the-fool.com","the-frenchman.com","the-galaxy.net","the-genius.com","the-gentleman.com","the-german.com","the-gremlin.com","the-hooligan.com","the-italian.com","the-japanese.com","the-lair.com","the-madman.com","the-mailinglist.com","the-marine.com","the-master.com","the-mexican.com","the-ministry.com","the-monkey.com","the-newsletter.net","the-pentagon.com","the-police.com","the-prayer.com","the-professional.com","the-quickest.com","the-russian.com","the-seasiders.com","the-snake.com","the-spaceman.com","the-stock-market.com","the-student.net","the-whitehouse.net","the-wild-west.com","the18th.com","thecoolguy.com","thecriminals.com","thedoghousemail.com","thedorm.com","theend.hu","theglobe.com","thegolfcourse.com","thegooner.com","theheadoffice.com","theinternetemail.com","thelanddownunder.com","thelimestones.com","themail.com","themillionare.net","theoffice.net","theplate.com","thepokerface.com","thepostmaster.net","theraces.com","theracetrack.com","therapist.net","thereisnogod.com","thesimpsonsfans.com","thestreetfighter.com","theteebox.com","thewatercooler.com","thewebpros.co.uk","thewizzard.com","thewizzkid.com","thexyz.ca","thexyz.cn","thexyz.com","thexyz.es","thexyz.fr","thexyz.in","thexyz.mobi","thexyz.net","thexyz.org","thezhangs.net","thirdage.com","thisgirl.com","thisisnotmyrealemail.com","thismail.net","thoic.com","thraml.com","thrott.com","throwam.com","throwawayemailaddress.com","thundermail.com","tibetemail.com","tidni.com","tilien.com","timein.net","timormail.com","tin.it","tipsandadvice.com","tiran.ru","tiscali.at","tiscali.be","tiscali.co.uk","tiscali.it","tiscali.lu","tiscali.se","tittbit.in","tizi.com","tkcity.com","tlcfan.com","tmail.ws","tmailinator.com","tmicha.net","toast.com","toke.com","tokyo.com","tom.com","toolsource.com","toomail.biz","toothfairy.com","topchat.com","topgamers.co.uk","topletter.com","topmail-files.de","topmail.com.ar","topranklist.de","topsurf.com","topteam.bg","toquedequeda.com","torba.com","torchmail.com","torontomail.com","tortenboxer.de","totalmail.com","totalmail.de","totalmusic.net","totalsurf.com","toughguy.net","townisp.com","tpg.com.au","tradermail.info","trainspottingfan.com","trash-amil.com","trash-mail.at","trash-mail.com","trash-mail.de","trash-mail.ga","trash-mail.ml","trash2009.com","trash2010.com","trash2011.com","trashdevil.com","trashdevil.de","trashemail.de","trashmail.at","trashmail.com","trashmail.de","trashmail.me","trashmail.net","trashmail.org","trashmailer.com","trashymail.com","trashymail.net","travel.li","trayna.com","trbvm.com","trbvn.com","trevas.net","trialbytrivia.com","trialmail.de","trickmail.net","trillianpro.com","trimix.cn","tritium.net","trjam.net","trmailbox.com","tropicalstorm.com","truckeremail.net","truckers.com","truckerz.com","truckracer.com","truckracers.com","trust-me.com","truth247.com","truthmail.com","tsamail.co.za","ttml.co.in","tulipsmail.net","tunisiamail.com","turboprinz.de","turboprinzessin.de","turkey.com","turual.com","tushino.net","tut.by","tvcablenet.be","tverskie.net","tverskoe.net","tvnet.lv","tvstar.com","twc.com","twcny.com","twentylove.com","twinmail.de","twinstarsmail.com","tx.rr.com","tycoonmail.com","tyldd.com","typemail.com","tyt.by","u14269.ml","u2club.com","ua.fm","uae.ac","uaemail.com","ubbi.com","ubbi.com.br","uboot.com","uggsrock.com","uk2.net","uk2k.com","uk2net.com","uk7.net","uk8.net","ukbuilder.com","ukcool.com","ukdreamcast.com","ukmail.org","ukmax.com","ukr.net","ukrpost.net","ukrtop.com","uku.co.uk","ultapulta.com","ultimatelimos.com","ultrapostman.com","umail.net","ummah.org","umpire.com","unbounded.com","underwriters.com","unforgettable.com","uni.de","uni.de.de","uni.demailto.de","unican.es","unihome.com","universal.pt","uno.ee","uno.it","unofree.it","unomail.com","unterderbruecke.de","uogtritons.com","uol.com.ar","uol.com.br","uol.com.co","uol.com.mx","uol.com.ve","uole.com","uole.com.ve","uolmail.com","uomail.com","upc.nl","upcmail.nl","upf.org","upliftnow.com","uplipht.com","uraniomail.com","ureach.com","urgentmail.biz","uroid.com","us.af","usa.com","usa.net","usaaccess.net","usanetmail.com","used-product.fr","userbeam.com","usermail.com","username.e4ward.com","userzap.com","usma.net","usmc.net","uswestmail.net","uymail.com","uyuyuy.com","uzhe.net","v-sexi.com","v8email.com","vaasfc4.tk","vahoo.com","valemail.net","valudeal.net","vampirehunter.com","varbizmail.com","vcmail.com","velnet.co.uk","velnet.com","velocall.com","veloxmail.com.br","venompen.com","verizon.net","verizonmail.com","verlass-mich-nicht.de","versatel.nl","verticalheaven.com","veryfast.biz","veryrealemail.com","veryspeedy.net","vfemail.net","vickaentb.tk","videotron.ca","viditag.com","viewcastmedia.com","viewcastmedia.net","vinbazar.com","violinmakers.co.uk","vip.126.com","vip.21cn.com","vip.citiz.net","vip.gr","vip.onet.pl","vip.qq.com","vip.sina.com","vipmail.ru","viralplays.com","virgilio.it","virgin.net","virginbroadband.com.au","virginmedia.com","virtual-mail.com","virtualactive.com","virtualguam.com","virtualmail.com","visitmail.com","visitweb.com","visto.com","visualcities.com","vivavelocity.com","vivianhsu.net","viwanet.ru","vjmail.com","vjtimail.com","vkcode.ru","vlcity.ru","vlmail.com","vnet.citiz.net","vnn.vn","vnukovo.net","vodafone.nl","vodafonethuis.nl","voila.fr","volcanomail.com","vollbio.de","volloeko.de","vomoto.com","voo.be","vorsicht-bissig.de","vorsicht-scharf.de","vote-democrats.com","vote-hillary.com","vote-republicans.com","vote4gop.org","votenet.com","vovan.ru","vp.pl","vpn.st","vr9.com","vsimcard.com","vubby.com","vyhino.net","w3.to","wahoye.com","walala.org","wales2000.net","walkmail.net","walkmail.ru","walla.co.il","wam.co.za","wanaboo.com","wanadoo.co.uk","wanadoo.es","wanadoo.fr","wapda.com","war-im-urlaub.de","warmmail.com","warpmail.net","warrior.hu","wasteland.rfc822.org","watchmail.com","waumail.com","wazabi.club","wbdet.com","wearab.net","web-contact.info","web-emailbox.eu","web-ideal.fr","web-mail.com.ar","web-mail.pp.ua","web-police.com","web.de","webaddressbook.com","webadicta.org","webave.com","webbworks.com","webcammail.com","webcity.ca","webcontact-france.eu","webdream.com","webemail.me","webemaillist.com","webinbox.com","webindia123.com","webjump.com","webm4il.info","webmail.bellsouth.net","webmail.blue","webmail.co.yu","webmail.co.za","webmail.fish","webmail.hu","webmail.lawyer","webmail.ru","webmail.wiki","webmails.com","webmailv.com","webname.com","webprogramming.com","webskulker.com","webstation.com","websurfer.co.za","webtopmail.com","webtribe.net","webuser.in","wee.my","weedmail.com","weekmail.com","weekonline.com","wefjo.grn.cc","weg-werf-email.de","wegas.ru","wegwerf-emails.de","wegwerfadresse.de","wegwerfemail.com","wegwerfemail.de","wegwerfmail.de","wegwerfmail.info","wegwerfmail.net","wegwerfmail.org","wegwerpmailadres.nl","wehshee.com","weibsvolk.de","weibsvolk.org","weinenvorglueck.de","welsh-lady.com","wesleymail.com","westnet.com","westnet.com.au","wetrainbayarea.com","wfgdfhj.tk","wh4f.org","whale-mail.com","whartontx.com","whatiaas.com","whatpaas.com","wheelweb.com","whipmail.com","whoever.com","wholefitness.com","whoopymail.com","whtjddn.33mail.com","whyspam.me","wickedmail.com","wickmail.net","wideopenwest.com","wildmail.com","wilemail.com","will-hier-weg.de","willhackforfood.biz","willselfdestruct.com","windowslive.com","windrivers.net","windstream.com","windstream.net","winemaven.info","wingnutz.com","winmail.com.au","winning.com","winrz.com","wir-haben-nachwuchs.de","wir-sind-cool.org","wirsindcool.de","witty.com","wiz.cc","wkbwmail.com","wmail.cf","wo.com.cn","woh.rr.com","wolf-web.com","wolke7.net","wollan.info","wombles.com","women-at-work.org","women-only.net","wonder-net.com","wongfaye.com","wooow.it","work4teens.com","worker.com","workmail.co.za","workmail.com","worldbreak.com","worldemail.com","worldmailer.com","worldnet.att.net","wormseo.cn","wosaddict.com","wouldilie.com","wovz.cu.cc","wow.com","wowgirl.com","wowmail.com","wowway.com","wp.pl","wptamail.com","wrestlingpages.com","wrexham.net","writeme.com","writemeback.com","writeremail.com","wronghead.com","wrongmail.com","wtvhmail.com","wwdg.com","www.com","www.e4ward.com","www.mailinator.com","www2000.net","wwwnew.eu","wx88.net","wxs.net","wyrm.supernews.com","x-mail.net","x-networks.net","x.ip6.li","x5g.com","xagloo.com","xaker.ru","xd.ae","xemaps.com","xents.com","xing886.uu.gl","xmail.com","xmaily.com","xmastime.com","xmenfans.com","xms.nl","xmsg.com","xoom.com","xoommail.com","xoxox.cc","xoxy.net","xpectmore.com","xpressmail.zzn.com","xs4all.nl","xsecurity.org","xsmail.com","xtra.co.nz","xtram.com","xuno.com","xww.ro","xy9ce.tk","xyz.am","xyzfree.net","xzapmail.com","y7mail.com","ya.ru","yada-yada.com","yaho.com","yahoo.ae","yahoo.at","yahoo.be","yahoo.ca","yahoo.ch","yahoo.cn","yahoo.co","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.jp","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.cn","yahoo.com.co","yahoo.com.hk","yahoo.com.is","yahoo.com.mx","yahoo.com.my","yahoo.com.ph","yahoo.com.ru","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.jp","yahoo.net","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.ru","yahoo.se","yahoofs.com","yahoomail.com","yalla.com","yalla.com.lb","yalook.com","yam.com","yandex.com","yandex.mail","yandex.pl","yandex.ru","yandex.ua","yapost.com","yapped.net","yawmail.com","yclub.com","yeah.net","yebox.com","yeehaa.com","yehaa.com","yehey.com","yemenmail.com","yep.it","yepmail.net","yert.ye.vc","yesbox.net","yesey.net","yeswebmaster.com","ygm.com","yifan.net","ymail.com","ynnmail.com","yogamaven.com","yogotemail.com","yomail.info","yopmail.com","yopmail.fr","yopmail.net","yopmail.org","yopmail.pp.ua","yopolis.com","yopweb.com","youareadork.com","youmailr.com","youpy.com","your-house.com","your-mail.com","yourdomain.com","yourinbox.com","yourlifesucks.cu.cc","yourlover.net","yournightmare.com","yours.com","yourssincerely.com","yourteacher.net","yourwap.com","youthfire.com","youthpost.com","youvegotmail.net","yuuhuu.net","yuurok.com","yyhmail.com","z1p.biz","z6.com","z9mail.com","za.com","zahadum.com","zaktouni.fr","zcities.com","zdnetmail.com","zdorovja.net","zeeks.com","zeepost.nl","zehnminuten.de","zehnminutenmail.de","zensearch.com","zensearch.net","zerocrime.org","zetmail.com","zhaowei.net","zhouemail.510520.org","ziggo.nl","zing.vn","zionweb.org","zip.net","zipido.com","ziplip.com","zipmail.com","zipmail.com.br","zipmax.com","zippymail.info","zmail.pt","zmail.ru","zoemail.com","zoemail.net","zoemail.org","zoho.com","zomg.info","zonai.com","zoneview.net","zonnet.nl","zooglemail.com","zoominternet.net","zubee.com","zuvio.com","zuzzurello.com","zvmail.com","zwallet.com","zweb.in","zxcv.com","zxcvbnm.com","zybermail.com","zydecofan.com","zzn.com","zzom.co.uk","zzz.com"];var _i=a(1476),Ri=a.n(_i);const Ii="(?:[_\\p{L}0-9][-_\\p{L}0-9]*\\.)*(?:[\\p{L}0-9][-\\p{L}0-9]{0,62})\\.(?:(?:[a-z]{2}\\.)?[a-z]{2,})",Ai=class{static extractDomainFromEmail(e){const t=Ct()(`(?<=@)${Ii}`);return Ct().match(e,t)||""}static isProfessional(e){return!Ni.includes(e)}static checkDomainValidity(e){if(!Ct()(`^${Ii}$`).test(e))throw new Error("Cannot parse domain. The domain does not match the pattern.");try{if(!new URL(`https://${e}`).host)throw new Error("Cannot parse domain. The domain does not match the pattern.")}catch(e){throw new Error("Cannot parse domain. The domain is not valid.")}}static isValidHostname(e){return Ct()(`^${Ii}$`).test(e)||Ri()({exact:!0}).test(e)}};function Pi(){return Pi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findSmtpSettings:()=>{},changeProvider:()=>{},setData:()=>{},isSettingsModified:()=>{},isSettingsValid:()=>{},getErrors:()=>{},validateData:()=>{},getFieldToFocus:()=>{},saveSmtpSettings:()=>{},isProcessing:()=>{},hasProviderChanged:()=>{},sendTestMailTo:()=>{},isDataReady:()=>{},clearContext:()=>{}});class Li extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.smtpSettingsModel=new class{constructor(e){this.smtpSettingsService=new class{constructor(e){e.setResourceName("smtp/settings"),this.apiClient=new at(e)}async find(){const e=await this.apiClient.findAll(),t=e?.body;return t.client=t.client??"",t.tls=Boolean(t?.tls),t}async save(e){const t=(await this.apiClient.create(e)).body;return t.tls=Boolean(t.tls),t}}(e)}findSmtpSettings(){return this.smtpSettingsService.find()}saveSmtpSettings(e){return this.smtpSettingsService.save(e)}}(t),this.smtpTestSettingsModel=new class{constructor(e){this.smtpTestSettingsService=new class{constructor(e){e.setResourceName("smtp/email"),this.apiClient=new at(e)}async sendTestEmail(e){return(await this.apiClient.create(e)).body}}(e)}sendTestEmail(e,t){const{sender_name:a,sender_email:n,host:i,port:s,client:o,username:r,password:l,tls:c}=e,m={sender_name:a,sender_email:n,host:i,port:s,client:o,username:r,password:l,tls:c,email_test_to:t};return m.client=m.client||null,this.smtpTestSettingsService.sendTestEmail(m)}}(t),this.fieldToFocus=null,this.providerHasChanged=!1}get defaultState(){return{settingsModified:!1,currentSmtpSettings:{provider:null,username:"",password:"",host:"",tls:!0,port:"",client:"",sender_email:"",sender_name:"Passbolt"},errors:{},isLoaded:!1,processing:!1,hasSumittedForm:!1,getCurrentSmtpSettings:this.getCurrentSmtpSettings.bind(this),findSmtpSettings:this.findSmtpSettings.bind(this),changeProvider:this.changeProvider.bind(this),setData:this.setData.bind(this),isSettingsModified:this.isSettingsModified.bind(this),getErrors:this.getErrors.bind(this),validateData:this.validateData.bind(this),getFieldToFocus:this.getFieldToFocus.bind(this),saveSmtpSettings:this.saveSmtpSettings.bind(this),isProcessing:this.isProcessing.bind(this),hasProviderChanged:this.hasProviderChanged.bind(this),sendTestMailTo:this.sendTestMailTo.bind(this),isDataReady:this.isDataReady.bind(this),clearContext:this.clearContext.bind(this)}}async findSmtpSettings(){if(!this.props.context.siteSettings.canIUse("smtpSettings"))return;let e=this.state.currentSmtpSettings;try{e=await this.smtpSettingsModel.findSmtpSettings(),this.setState({currentSmtpSettings:e,isLoaded:!0})}catch(e){this.handleError(e)}e.sender_email||(e.sender_email=this.props.context.loggedInUser.username),e.host&&e.port&&(e.provider=this.detectProvider(e)),this.setState({currentSmtpSettings:e,isLoaded:!0})}clearContext(){const{settingsModified:e,currentSmtpSettings:t,errors:a,isLoaded:n,processing:i,hasSumittedForm:s}=this.defaultState;this.setState({settingsModified:e,currentSmtpSettings:t,errors:a,isLoaded:n,processing:i,hasSumittedForm:s})}async saveSmtpSettings(){this._doProcess((async()=>{try{const e={...this.state.currentSmtpSettings};delete e.provider,e.client=e.client||null,await this.smtpSettingsModel.saveSmtpSettings(e),this.props.actionFeedbackContext.displaySuccess(this.props.t("The SMTP settings have been saved successfully"));const t=Object.assign({},this.state.currentSmtpSettings,{source:"db"});this.setState({currentSmtpSettings:t})}catch(e){this.handleError(e)}}))}async sendTestMailTo(e){return await this.smtpTestSettingsModel.sendTestEmail(this.getCurrentSmtpSettings(),e)}_doProcess(e){this.setState({processing:!0},(async()=>{await e(),this.setState({processing:!1})}))}hasProviderChanged(){const e=this.providerHasChanged;return this.providerHasChanged=!1,e}changeProvider(e){e.id!==this.state.currentSmtpSettings.provider?.id&&(this.providerHasChanged=!0,this.setState({settingsModified:!0,currentSmtpSettings:{...this.state.currentSmtpSettings,...e.defaultConfiguration,provider:e}}))}setData(e){const t=Object.assign({},this.state.currentSmtpSettings,e),a={currentSmtpSettings:{...t,provider:this.detectProvider(t)},settingsModified:!0};this.setState(a),this.state.hasSumittedForm&&this.validateData(t)}detectProvider(e){for(let t=0;tt.host===e.host&&t.port===parseInt(e.port,10)&&t.tls===e.tls)))return a}return xi.find((e=>"other"===e.id))}isDataReady(){return this.state.isLoaded}isProcessing(){return this.state.processing}isSettingsModified(){return this.state.settingsModified}getErrors(){return this.state.errors}validateData(e){e=e||this.state.currentSmtpSettings;const t={};let a=!0;return a=this.validate_host(e.host,t)&&a,a=this.validate_sender_email(e.sender_email,t)&&a,a=this.validate_sender_name(e.sender_name,t)&&a,a=this.validate_username(e.username,t)&&a,a=this.validate_password(e.password,t)&&a,a=this.validate_port(e.port,t)&&a,a=this.validate_tls(e.tls,t)&&a,a=this.validate_client(e.client,t)&&a,a||(this.fieldToFocus=this.getFirstFieldInError(t,["username","password","host","tls","port","client","sender_name","sender_email"])),this.setState({errors:t,hasSumittedForm:!0}),a}validate_host(e,t){return"string"!=typeof e?(t.host=this.props.t("SMTP Host must be a valid string"),!1):0!==e.length||(t.host=this.props.t("SMTP Host is required"),!1)}validate_client(e,t){return!!(0===e.length||Ai.isValidHostname(e)&&e.length<=2048)||(t.client=this.props.t("SMTP client should be a valid domain or IP address"),!1)}validate_sender_email(e,t){return"string"!=typeof e?(t.sender_email=this.props.t("Sender email must be a valid email"),!1):0===e.length?(t.sender_email=this.props.t("Sender email is required"),!1):!!Zn.validate(e,this.props.context.siteSettings)||(t.sender_email=this.props.t("Sender email must be a valid email"),!1)}validate_sender_name(e,t){return"string"!=typeof e?(t.sender_name=this.props.t("Sender name must be a valid string"),!1):0!==e.length||(t.sender_name=this.props.t("Sender name is required"),!1)}validate_username(e,t){return null===e||"string"==typeof e||(t.username=this.props.t("Username must be a valid string"),!1)}validate_password(e,t){return null===e||"string"==typeof e||(t.password=this.props.t("Password must be a valid string"),!1)}validate_tls(e,t){return"boolean"==typeof e||(t.tls=this.props.t("TLS must be set to 'Yes' or 'No'"),!1)}validate_port(e,t){const a=parseInt(e,10);return isNaN(a)?(t.port=this.props.t("Port must be a valid number"),!1):!(a<1||a>65535)||(t.port=this.props.t("Port must be a number between 1 and 65535"),!1)}getFirstFieldInError(e,t){for(let a=0;an.createElement(e,Pi({adminSmtpSettingsContext:t},this.props))))}}}const ji="form",zi="error",Mi="success";class Oi extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{uiState:ji,recipient:this.props.context.loggedInUser.username,processing:!1,displayLogs:!0}}bindCallbacks(){this.handleRetryClick=this.handleRetryClick.bind(this),this.handleError=this.handleError.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleDisplayLogsClick=this.handleDisplayLogsClick.bind(this)}async handleFormSubmit(e){if(e.preventDefault(),this.validateForm()){try{this.setState({processing:!0});const e=await this.props.adminSmtpSettingsContext.sendTestMailTo(this.state.recipient);this.setState({uiState:Mi,debugDetails:this.formatDebug(e.debug),displayLogs:!1})}catch(e){this.handleError(e)}this.setState({processing:!1})}}async handleInputChange(e){this.setState({recipient:e.target.value})}validateForm(){const e=Zn.validate(this.state.recipient,this.props.context.siteSettings);return this.setState({recipientError:e?"":this.translate("Recipient must be a valid email")}),e}formatDebug(e){return JSON.stringify(e,null,4)}handleError(e){const t=e.data?.body?.debug,a=t?.length>0?t:e?.message;this.setState({uiState:zi,debugDetails:this.formatDebug(a),displayLogs:!0})}handleDisplayLogsClick(){this.setState({displayLogs:!this.state.displayLogs})}handleRetryClick(){this.setState({uiState:ji})}hasAllInputDisabled(){return this.state.processing}get title(){return{form:this.translate("Send test email"),error:this.translate("Something went wrong!"),success:this.translate("Email sent")}[this.state.uiState]||""}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"send-test-email-dialog",title:this.title,onClose:this.props.handleClose,disabled:this.hasAllInputDisabled()},this.state.uiState===ji&&n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("div",{className:`input text required ${this.state.recipientError?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Recipient")),n.createElement("input",{id:"recipient",type:"text",name:"recipient",required:"required",className:"required fluid form-element ready",placeholder:"name@email.com",onChange:this.handleInputChange,value:this.state.recipient,disabled:this.hasAllInputDisabled()}),this.state.recipientError&&n.createElement("div",{className:"recipient error-message"},this.state.recipientError))),n.createElement("div",{className:"message notice"},n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"after clicking on send, a test email will be sent to the recipient email in order to check that your configuration is correct.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.handleClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Send")}))),this.state.uiState===zi&&n.createElement(n.Fragment,null,n.createElement("div",{className:"dialog-body"},n.createElement("p",null,n.createElement(v.c,null,"The test email could not be sent. Kindly check the logs below for more information."),n.createElement("br",null),n.createElement("a",{className:"faq-link",href:"https://help.passbolt.com/faq/hosting/why-email-not-sent",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"FAQ: Why are my emails not sent?"))),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDisplayLogsClick},n.createElement(Re,{name:this.state.displayLogs?"caret-down":"caret-right"})," ",n.createElement(v.c,null,"Logs"))),this.state.displayLogs&&n.createElement("div",{className:"accordion-content"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.state.debugDetails}))),n.createElement("div",{className:"dialog-footer clearfix"},n.createElement("button",{type:"button",className:"cancel",disabled:this.hasAllInputDisabled(),onClick:this.handleRetryClick},n.createElement(v.c,null,"Retry")),n.createElement("button",{className:"button primary",type:"button",onClick:this.props.handleClose,disabled:this.isProcessing},n.createElement("span",null,n.createElement(v.c,null,"Close"))))),this.state.uiState===Mi&&n.createElement(n.Fragment,null,n.createElement("div",{className:"dialog-body"},n.createElement("p",null,n.createElement(v.c,null,"The test email has been sent. Check your email box, you should receive it in a minute.")),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDisplayLogsClick},n.createElement(Re,{name:this.state.displayLogs?"caret-down":"caret-right"})," ",n.createElement(v.c,null,"Logs"))),this.state.displayLogs&&n.createElement("div",{className:"accordion-content"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.state.debugDetails}))),n.createElement("div",{className:"message notice"},n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"Check your spam folder if you do not hear from us after a while.")),n.createElement("div",{className:"dialog-footer clearfix"},n.createElement("button",{type:"button",className:"cancel",disabled:this.hasAllInputDisabled(),onClick:this.handleRetryClick},n.createElement(v.c,null,"Retry")),n.createElement("button",{className:"button primary",type:"button",onClick:this.props.handleClose,disabled:this.isProcessing},n.createElement("span",null,n.createElement(v.c,null,"Close"))))))}}Oi.propTypes={context:o().object,adminSmtpSettingsContext:o().object,handleClose:o().func,t:o().func};const Fi=I(Ui((0,k.Z)("common")(Oi)));class qi extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.dialogId=null}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleTestClick=this.handleTestClick.bind(this),this.handleCloseDialog=this.handleCloseDialog.bind(this)}async handleSaveClick(){this.smtpSettings.isProcessing()||this.smtpSettings.validateData()&&await this.smtpSettings.saveSmtpSettings()}async handleTestClick(){this.smtpSettings.isProcessing()||this.smtpSettings.validateData()&&(null!==this.dialogId&&this.handleCloseDialog(),this.dialogId=await this.props.dialogContext.open(Fi,{handleClose:this.handleCloseDialog}))}handleCloseDialog(){this.props.dialogContext.close(this.dialogId),this.dialogId=null}isSaveEnabled(){return this.smtpSettings.isSettingsModified()&&!this.smtpSettings.isProcessing()}isTestEnabled(){return this.smtpSettings.isSettingsModified()&&!this.smtpSettings.isProcessing()}get smtpSettings(){return this.props.adminSmtpSettingsContext}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isTestEnabled(),onClick:this.handleTestClick},n.createElement(Re,{name:"plug"}),n.createElement("span",null,n.createElement(v.c,null,"Send test email")))))))}}qi.propTypes={adminSmtpSettingsContext:o().object,workflowContext:o().any,dialogContext:o().object};const Wi=Ui(g((0,k.Z)("common")(qi))),Vi="None",Bi="Username only",Gi="Username & password";class Ki extends n.Component{static get AUTHENTICATION_METHOD_NONE(){return Vi}static get AUTHENTICATION_METHOD_USERNAME(){return Bi}static get AUTHENTICATION_METHOD_USERNAME_PASSWORD(){return Gi}constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createRefs()}get defaultState(){return{showAdvancedSettings:!1,source:"db"}}createRefs(){this.usernameFieldRef=n.createRef(),this.passwordFieldRef=n.createRef(),this.hostFieldRef=n.createRef(),this.portFieldRef=n.createRef(),this.clientFieldRef=n.createRef(),this.senderEmailFieldRef=n.createRef(),this.senderNameFieldRef=n.createRef()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Wi),await this.props.adminSmtpSettingsContext.findSmtpSettings();const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings();this.setState({showAdvancedSettings:"other"===e.provider?.id})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSmtpSettingsContext.clearContext()}componentDidUpdate(){const e=this.props.adminSmtpSettingsContext,t=e.getFieldToFocus();t&&this[`${t}FieldRef`]?.current?.focus(),e.hasProviderChanged()&&this.setState({showAdvancedSettings:"other"===e.getCurrentSmtpSettings().provider?.id})}bindCallbacks(){this.handleAdvancedSettingsToggle=this.handleAdvancedSettingsToggle.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleProviderChange=this.handleProviderChange.bind(this),this.handleAuthenticationMethodChange=this.handleAuthenticationMethodChange.bind(this)}handleProviderChange(e){const t=e.target.value,a=xi.find((e=>e.id===t));this.props.adminSmtpSettingsContext.changeProvider(a)}handleAuthenticationMethodChange(e){let t=null,a=null;e.target.value===Bi?t="":e.target.value===Gi&&(t="",a=""),this.props.adminSmtpSettingsContext.setData({username:t,password:a})}handleInputChange(e){const t=e.target;this.props.adminSmtpSettingsContext.setData({[t.name]:t.value})}handleAdvancedSettingsToggle(){this.setState({showAdvancedSettings:!this.state.showAdvancedSettings})}isProcessing(){return this.props.adminSmtpSettingsContext.isProcessing()}get providerList(){return xi.map((e=>({value:e.id,label:e.name})))}get authenticationMethodList(){return[{value:Vi,label:this.translate("None")},{value:Bi,label:this.translate("Username only")},{value:Gi,label:this.translate("Username & password")}]}get tlsSelectList(){return[{value:!0,label:this.translate("Yes")},{value:!1,label:this.translate("No")}]}get authenticationMethod(){const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings();return null===e?.username?Vi:null===e?.password?Bi:Gi}shouldDisplayUsername(){return this.authenticationMethod===Bi||this.authenticationMethod===Gi}shouldDisplayPassword(){return this.authenticationMethod===Gi}shouldShowSourceWarningMessage(){const e=this.props.adminSmtpSettingsContext;return"db"!==e.getCurrentSmtpSettings().source&&e.isSettingsModified()}isReady(){return this.props.adminSmtpSettingsContext.isDataReady()}get settingsSource(){return this.props.adminSmtpSettingsContext?.getCurrentSmtpSettings()?.source}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}get translate(){return this.props.t}render(){const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings(),t=this.props.adminSmtpSettingsContext.getErrors();return n.createElement("div",{className:"grid grid-responsive-12"},n.createElement("div",{className:"row"},n.createElement("div",{className:"third-party-provider-settings smtp-settings col8 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Email server")),this.isReady()&&!e?.provider&&n.createElement(n.Fragment,null,n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Select a provider")),n.createElement("div",{className:"provider-list"},xi.map((e=>n.createElement("div",{key:e.id,className:"provider button",id:e.id,onClick:()=>this.props.adminSmtpSettingsContext.changeProvider(e)},n.createElement("div",{className:"provider-logo"},"other"===e.id&&n.createElement(Re,{name:"envelope"}),"other"!==e.id&&n.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.icon}`})),n.createElement("p",{className:"provider-name"},e.name)))))),this.isReady()&&e?.provider&&n.createElement(n.Fragment,null,this.shouldShowSourceWarningMessage()&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning:")," These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.")),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"SMTP server configuration")),n.createElement("div",{className:"select-wrapper input required "+(this.isProcessing()?"disabled":"")},n.createElement("label",{htmlFor:"smtp-settings-form-provider"},n.createElement(v.c,null,"Email provider")),n.createElement(Ft,{id:"smtp-settings-form-provider",name:"provider",items:this.providerList,value:e.provider.id,onChange:this.handleProviderChange,disabled:this.isProcessing()})),n.createElement("div",{className:"select-wrapper input required "+(this.isProcessing()?"disabled":"")},n.createElement("label",{htmlFor:"smtp-settings-form-authentication-method"},n.createElement(v.c,null,"Authentication method")),n.createElement(Ft,{id:"smtp-settings-form-authentication-method",name:"authentication-method",items:this.authenticationMethodList,value:this.authenticationMethod,onChange:this.handleAuthenticationMethodChange,disabled:this.isProcessing()})),this.shouldDisplayUsername()&&n.createElement("div",{className:`input text ${t.username?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-username"},n.createElement(v.c,null,"Username")),n.createElement("input",{id:"smtp-settings-form-username",ref:this.usernameFieldRef,name:"username",className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.username,onChange:this.handleInputChange,placeholder:this.translate("Username"),disabled:this.isProcessing()}),t.username&&n.createElement("div",{className:"error-message"},t.username)),this.shouldDisplayPassword()&&n.createElement("div",{className:`input-password-wrapper input ${t.password?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-password"},n.createElement(v.c,null,"Password")),n.createElement(It,{id:"smtp-settings-form-password",name:"password",autoComplete:"new-password",placeholder:this.translate("Password"),preview:!0,value:e.password,onChange:this.handleInputChange,disabled:this.isProcessing(),inputRef:this.passwordFieldRef}),t.password&&n.createElement("div",{className:"password error-message"},t.password)),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleAdvancedSettingsToggle},n.createElement(Re,{name:this.state.showAdvancedSettings?"caret-down":"caret-right"}),n.createElement(v.c,null,"Advanced settings"))),this.state.showAdvancedSettings&&n.createElement("div",{className:"advanced-settings"},n.createElement("div",{className:`input text required ${t.host?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-host"},n.createElement(v.c,null,"SMTP host")),n.createElement("input",{id:"smtp-settings-form-host",ref:this.hostFieldRef,name:"host","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.host,onChange:this.handleInputChange,placeholder:this.translate("SMTP server address"),disabled:this.isProcessing()}),t.host&&n.createElement("div",{className:"error-message"},t.host)),n.createElement("div",{className:`input text required ${t.tls?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-tls"},n.createElement(v.c,null,"Use TLS")),n.createElement(Ft,{id:"smtp-settings-form-tls",name:"tls",items:this.tlsSelectList,value:e.tls,onChange:this.handleInputChange,disabled:this.isProcessing()})),n.createElement("div",{className:`input text required ${t.port?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-port"},n.createElement(v.c,null,"Port")),n.createElement("input",{id:"smtp-settings-form-port","aria-required":!0,ref:this.portFieldRef,name:"port",className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.port,onChange:this.handleInputChange,placeholder:this.translate("Port number"),disabled:this.isProcessing()}),t.port&&n.createElement("div",{className:"error-message"},t.port)),n.createElement("div",{className:`input text ${t.client?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-client"},n.createElement(v.c,null,"SMTP client")),n.createElement("input",{id:"smtp-settings-form-client",ref:this.clientFieldRef,name:"client",maxLength:"2048",type:"text",autoComplete:"off",value:e.client,onChange:this.handleInputChange,placeholder:this.translate("SMTP client address"),disabled:this.isProcessing()}),t.client&&n.createElement("div",{className:"error-message"},t.client))),n.createElement("h4",null,n.createElement(v.c,null,"Sender configuration")),n.createElement("div",{className:`input text required ${t.sender_name?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-sender-name"},n.createElement(v.c,null,"Sender name")),n.createElement("input",{id:"smtp-settings-form-sender-name",ref:this.senderNameFieldRef,name:"sender_name","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.sender_name,onChange:this.handleInputChange,placeholder:this.translate("Sender name"),disabled:this.isProcessing()}),t.sender_name&&n.createElement("div",{className:"error-message"},t.sender_name),n.createElement("p",null,n.createElement(v.c,null,"This is the name users will see in their mailbox when passbolt sends a notification."))),n.createElement("div",{className:`input text required ${t.sender_email?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-sender-name"},n.createElement(v.c,null,"Sender email")),n.createElement("input",{id:"smtp-settings-form-sender-email",ref:this.senderEmailFieldRef,name:"sender_email","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.sender_email,onChange:this.handleInputChange,placeholder:this.translate("Sender email"),disabled:this.isProcessing()}),t.sender_email&&n.createElement("div",{className:"error-message"},t.sender_email),n.createElement("p",null,n.createElement(v.c,null,"This is the email address users will see in their mail box when passbolt sends a notification.",n.createElement("br",null),"It's a good practice to provide a working email address that users can reply to.")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"smtp-settings-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Why do I need an SMTP server?")),n.createElement("p",null,n.createElement(v.c,null,"Passbolt needs an smtp server in order to send invitation emails after an account creation and to send email notifications.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/email/setup",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),e?.provider&&"other"!==e?.provider.id&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a ",e.provider.name," SMTP server?")),n.createElement("a",{className:"button",href:e.provider.help_page,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"link"}),n.createElement("span",null,n.createElement(v.c,null,"See the ",e.provider.name," documentation")))),e?.provider&&("google-mail"===e.provider.id||"google-workspace"===e.provider.id)&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Why shouldn't I use my login password ?")),n.createElement("p",null,n.createElement(v.c,null,'In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.')),n.createElement("a",{className:"button",href:"https://support.google.com/mail/answer/185833",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"More informations")))))))}}Ki.propTypes={context:o().object,dialogContext:o().any,administrationWorkspaceContext:o().object,adminSmtpSettingsContext:o().object,t:o().func};const Hi=I(Ui(g(O((0,k.Z)("common")(Ki))))),$i=class{static clone(e){return new Map(JSON.parse(JSON.stringify(Array.from(e))))}static iterators(e){return[...e.keys()]}static listValues(e){return[...e.values()]}},Zi=class{constructor(e={}){this.allowedDomains=this.mapAllowedDomains(e.data?.allowed_domains||[])}mapAllowedDomains(e){return new Map(e.map((e=>[(0,r.Z)(),e])))}getSettings(){return this.allowedDomains}setSettings(e){this.allowedDomains=this.mapAllowedDomains(e)}};class Yi extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async handleSubmit(e){e.preventDefault(),await this.props.onSubmit(),this.props.onClose()}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}render(){const e=this.props.adminSelfRegistrationContext.isProcessing();return n.createElement(Te,{title:this.props.t("Save self registration settings"),onClose:this.handleClose,disabled:e,className:"save-self-registration-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"Allowed domains")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("ul",{id:"domains-list"},this.allowedDomains&&$i.iterators(this.allowedDomains).map((e=>n.createElement("li",{key:e},this.allowedDomains.get(e))))))))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,"Please review carefully this configuration.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{onClick:this.handleClose,disabled:e}),n.createElement(La,{value:this.props.t("Save"),disabled:e,processing:e,warning:!0}))))}}Yi.propTypes={context:o().any,onSubmit:o().func,adminSelfRegistrationContext:o().object,onClose:o().func,t:o().func};const Ji=I(is((0,k.Z)("common")(Yi)));class Qi extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async handleSubmit(e){e.preventDefault(),await this.props.onSubmit(),this.props.onClose()}render(){const e=this.props.adminSelfRegistrationContext.isProcessing();return n.createElement(Te,{title:this.props.t("Disable self registration"),onClose:this.handleClose,disabled:e,className:"delete-self-registration-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Are you sure to disable the self registration for the organization ?")),n.createElement("p",null,n.createElement(v.c,null,"Users will not be able to self register anymore.")," ",n.createElement(v.c,null,"Only administrators would be able to invite users to register. "))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{onClick:this.handleClose,disabled:e}),n.createElement(La,{value:this.props.t("Save"),disabled:e,processing:e,warning:!0}))))}}Qi.propTypes={adminSelfRegistrationContext:o().object,onClose:o().func,onSubmit:o().func,t:o().func};const Xi=is((0,k.Z)("common")(Qi));function es(){return es=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getAllowedDomains:()=>{},setAllowedDomains:()=>{},hasSettingsChanges:()=>{},setDomains:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},getErrors:()=>{},setError:()=>{},save:()=>{},delete:()=>{},shouldFocus:()=>{},setFocus:()=>{},isSaved:()=>{},setSaved:()=>{},validateForm:()=>{}});class as extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.selfRegistrationService=new class{constructor(e){this.apiClientOptions=e}async find(){this.initClient();const e=await this.apiClient.findAll(),t=e?.body;return t}async save(e){this.initClient(),await this.apiClient.create(e)}async delete(e){this.initClient(),await this.apiClient.delete(e)}async checkDomainAllowed(e){this.initClient("dry-run"),await this.apiClient.create(e)}initClient(e="settings"){this.apiClientOptions.setResourceName(`self-registration/${e}`),this.apiClient=new at(this.apiClientOptions)}}(t),this.selfRegistrationFormService=new class{constructor(e){this.translate=e,this.fields=new Map}validate(e){return this.fields=e,this.validateInputs()}validateInputs(){const e=new Map;return this.fields.forEach(((t,a)=>{this.validateInput(a,t,e)})),e}validateInput(e,t,a){if(t.length)try{Ai.checkDomainValidity(t)}catch{a.set(e,this.translate("This should be a valid domain"))}else a.set(e,this.translate("A domain is required."));this.checkDuplicateValue(a)}checkDuplicateValue(e){this.fields.forEach(((t,a)=>{$i.listValues(this.fields).filter((e=>e===t&&""!==e)).length>1&&e.set(a,this.translate("This domain already exist"))}))}}(this.props.t)}get defaultState(){return{errors:new Map,submitted:!1,currentSettings:null,focus:!1,saved:!1,domains:new Zi,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getAllowedDomains:this.getAllowedDomains.bind(this),setAllowedDomains:this.setAllowedDomains.bind(this),setDomains:this.setDomains.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),save:this.save.bind(this),shouldFocus:this.shouldFocus.bind(this),setFocus:this.setFocus.bind(this),isSaved:this.isSaved.bind(this),setSaved:this.setSaved.bind(this),deleteSettings:this.deleteSettings.bind(this),validateForm:this.validateForm.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.selfRegistrationService.find();this.setState({currentSettings:t});const a=new Zi(t);this.setDomains(a,e),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getAllowedDomains(){return this.state.domains.allowedDomains}setAllowedDomains(e,t,a=(()=>{})){this.setState((a=>{const n=$i.clone(a.domains.allowedDomains);return n.set(e,t),{domains:{allowedDomains:n}}}),a)}setDomains(e,t=(()=>{})){this.setState({domains:e},t)}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e}),this.setFocus(e)}getErrors(){return this.state.errors}shouldFocus(){return this.state.focus}setFocus(e){this.setState({focus:e})}setError(e,t){this.setState((a=>{const n=$i.clone(a.errors);return n.set(e,t),{errors:n}}))}setErrors(e){this.setState({errors:e})}hasSettingsChanges(){const e=this.state.currentSettings?.data?.allowed_domains||[],t=$i.listValues(this.state.domains.allowedDomains);return JSON.stringify(e)!==JSON.stringify(t)}clearContext(){const{currentSettings:e,domains:t,processing:a}=this.defaultState;this.setState({currentSettings:e,domains:t,processing:a})}save(){this.setSubmitted(!0),this.validateForm()&&(this.hasSettingsChanges()&&0===this.getAllowedDomains().size?this.displayConfirmDeletionDialog():this.displayConfirmSummaryDialog())}validateForm(){const e=this.selfRegistrationFormService.validate(this.state.getAllowedDomains());return this.state.setErrors(e),0===e.size}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async saveSettings(){try{this.setProcessing(!0);const e=new class{constructor(e,t={}){this.id=t.id,this.provider=t.provider||"email_domains",this.data=this.mapData(e?.allowedDomains)}mapData(e=new Map){return{allowed_domains:Array.from(e.values())}}}(this.state.domains,this.state.currentSettings);await this.selfRegistrationService.save(e),await this.findSettings((()=>this.setSaved(!0))),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The self registration settings for the organization were updated."))}catch(e){this.handleSubmitError(e)}finally{this.setProcessing(!1),this.setSubmitted(!1)}}async handleError(e){this.handleCloseDialog();const t={error:e};this.props.dialogContext.open(je,t)}handleCloseDialog(){this.props.dialogContext.close()}displayConfirmSummaryDialog(){this.props.dialogContext.open(Ji,{domains:this.getAllowedDomains(),onSubmit:()=>this.saveSettings(),onClose:()=>this.handleCloseDialog()})}displayConfirmDeletionDialog(){this.props.dialogContext.open(Xi,{onSubmit:()=>this.deleteSettings(),onClose:()=>this.handleCloseDialog()})}async deleteSettings(){try{this.setProcessing(!0),await this.selfRegistrationService.delete(this.state.currentSettings.id),await this.findSettings(),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The self registration settings for the organization were updated."))}catch(e){this.handleSubmitError(e)}finally{this.setProcessing(!1),this.setSubmitted(!1)}}isSaved(){return this.state.saved}setSaved(e){return this.setState({saved:e})}render(){return n.createElement(ts.Provider,{value:this.state},this.props.children)}}as.propTypes={context:o().any,children:o().any,t:o().any,dialogContext:o().any,actionFeedbackContext:o().object};const ns=I(g(d((0,k.Z)("common")(as))));function is(e){return class extends n.Component{render(){return n.createElement(ts.Consumer,null,(t=>n.createElement(e,es({adminSelfRegistrationContext:t},this.props))))}}}class ss extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}isSaveEnabled(){let e=!1;return this.props.adminSelfRegistrationContext.getCurrentSettings()?.provider||(e=!this.props.adminSelfRegistrationContext.hasSettingsChanges()),!this.props.adminSelfRegistrationContext.isProcessing()&&!e}async handleSave(){this.isSaveEnabled()&&this.props.adminSelfRegistrationContext.save()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}ss.propTypes={adminSelfRegistrationContext:o().object,t:o().func};const os=(0,k.Z)("common")(is(ss)),rs=new Map;function ls(e){if("string"!=typeof e)return console.warn("useDynamicRefs: Cannot set ref without key");const t=n.createRef();return rs.set(e,t),t}function cs(e){return e?rs.get(e):console.warn("useDynamicRefs: Cannot get ref without key")}class ms extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.dynamicRefs={getRef:cs,setRef:ls},this.checkForPublicDomainDebounce=Nn()(this.checkForWarnings,300),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(os),await this.findSettings()}componentDidUpdate(){this.shouldFocusOnError(),this.shouldCheckWarnings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSelfRegistrationContext.clearContext()}get defaultState(){return{isEnabled:!1,warnings:new Map}}bindCallbacks(){this.handleToggleClicked=this.handleToggleClicked.bind(this),this.handleAddRowClick=this.handleAddRowClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleDeleteRow=this.handleDeleteRow.bind(this)}get currentUser(){return this.props.context.loggedInUser}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}async findSettings(){await this.props.adminSelfRegistrationContext.findSettings(),this.setState({isEnabled:this.allowedDomains.size>0}),this.checkForWarnings(),this.validateForm()}checkForWarnings(){this.setState({warnings:new Map},(()=>{this.allowedDomains.forEach(((e,t)=>this.checkDomainIsProfessional(t,e)))}))}setupSettings(){if(this.props.adminSelfRegistrationContext.setDomains(new Zi(this.props.adminSelfRegistrationContext.getCurrentSettings())),this.checkForWarnings(),0===this.allowedDomains.size){const e=Ai.extractDomainFromEmail(this.currentUser?.username);Ai.checkDomainValidity(e),this.populateUserDomain(e)}}shouldFocusOnError(){const e=this.props.adminSelfRegistrationContext.shouldFocus(),[t]=this.props.adminSelfRegistrationContext.getErrors().keys();t&&e&&(this.dynamicRefs.getRef(t).current.focus(),this.props.adminSelfRegistrationContext.setFocus(!1))}shouldCheckWarnings(){this.props.adminSelfRegistrationContext.isSaved()&&(this.props.adminSelfRegistrationContext.setSaved(!1),this.checkForWarnings())}populateUserDomain(e){const t=Ai.isProfessional(e)?e:"";this.addRow(t)}addRow(e=""){const t=(0,r.Z)();this.props.adminSelfRegistrationContext.setAllowedDomains(t,e,(()=>{const e=this.dynamicRefs.getRef(t);e?.current.focus()}))}handleDeleteRow(e){if(this.canDelete()){const t=this.allowedDomains;t.delete(e),this.props.adminSelfRegistrationContext.setDomains({allowedDomains:t}),this.validateForm(),this.checkForWarnings()}}hasWarnings(){return this.state.warnings.size>0}hasAllInputDisabled(){return this.props.adminSelfRegistrationContext.isProcessing()}handleToggleClicked(){this.setState({isEnabled:!this.state.isEnabled},(()=>{this.state.isEnabled?this.setupSettings():(this.props.adminSelfRegistrationContext.setDomains({allowedDomains:new Map}),this.props.adminSelfRegistrationContext.setErrors(new Map))}))}handleAddRowClick(){this.addRow()}checkDomainIsProfessional(e,t){this.setState((a=>{const n=$i.clone(a.warnings);return Ai.isProfessional(t)?n.delete(e):n.set(e,"This is not a safe professional domain"),{warnings:n}}))}handleInputChange(e){const t=e.target.value,a=e.target.name;this.props.adminSelfRegistrationContext.setAllowedDomains(a,t,(()=>this.validateForm())),this.checkForPublicDomainDebounce()}validateForm(){this.props.adminSelfRegistrationContext.validateForm()}canDelete(){return this.allowedDomains.size>1}render(){const e=this.props.adminSelfRegistrationContext.isSubmitted(),t=this.props.adminSelfRegistrationContext.getErrors();return n.createElement("div",{className:"row"},n.createElement("div",{className:"self-registration col7 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"settings-toggle",onChange:this.handleToggleClicked,checked:this.state.isEnabled,disabled:this.hasAllInputDisabled(),id:"settings-toggle"}),n.createElement("label",{htmlFor:"settings-toggle"},n.createElement(v.c,null,"Self Registration")))),this.props.adminSelfRegistrationContext.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"self-registration-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!this.state.isEnabled&&n.createElement("p",{className:"description",id:"disabled-description"},n.createElement(v.c,null,"User self registration is disabled.")," ",n.createElement(v.c,null,"Only administrators can invite users to register.")),this.state.isEnabled&&n.createElement(n.Fragment,null,n.createElement("div",{id:"self-registration-subtitle",className:`input ${this.hasWarnings()&&"warning"} ${e&&t.size>0&&"error"}`},n.createElement("label",{id:"enabled-label"},n.createElement(v.c,null,"Email domain safe list"))),n.createElement("p",{className:"description",id:"enabled-description"},n.createElement(v.c,null,"All the users with an email address ending with the domain in the safe list are allowed to register on passbolt.")),$i.iterators(this.allowedDomains).map((a=>n.createElement("div",{key:a,className:"input"},n.createElement("div",{className:"domain-row"},n.createElement("input",{type:"text",className:"full-width",onChange:this.handleInputChange,id:`input-${a}`,name:a,value:this.allowedDomains.get(a),disabled:!this.hasAllInputDisabled,ref:this.dynamicRefs.setRef(a),placeholder:this.props.t("domain")}),n.createElement("button",{type:"button",disabled:!this.canDelete(),className:"button-icon",id:`delete-${a}`,onClick:()=>this.handleDeleteRow(a)},n.createElement(Re,{name:"trash"}))),this.hasWarnings()&&this.state.warnings.get(a)&&n.createElement("div",{id:"domain-name-input-feedback",className:"warning-message"},n.createElement(v.c,null,this.state.warnings.get(a))),t.get(a)&&e&&n.createElement("div",{className:"error-message"},n.createElement(v.c,null,t.get(a)))))),n.createElement("div",{className:"domain-add"},n.createElement("button",{type:"button",onClick:this.handleAddRowClick},n.createElement(Re,{name:"add"}),n.createElement("span",null,n.createElement(v.c,null,"Add")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is user self registration?")),n.createElement("p",null,n.createElement(v.c,null,"User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/self-registration",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}ms.propTypes={dialogContext:o().any,context:o().any,adminSelfRegistrationContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const ds=I(g(is(O((0,k.Z)("common")(ms))))),hs=[{id:"azure",name:"Microsoft",icon:n.createElement("svg",{width:"65",height:"64",viewBox:"0 0 65 64",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M31.3512 3.04762H3.92261V30.4762H31.3512V3.04762Z",fill:"#F25022"}),n.createElement("path",{d:"M31.3512 33.5238H3.92261V60.9524H31.3512V33.5238Z",fill:"#00A4EF"}),n.createElement("path",{d:"M61.8274 3.04762H34.3988V30.4762H61.8274V3.04762Z",fill:"#7FBA00"}),n.createElement("path",{d:"M61.8274 33.5238H34.3988V60.9524H61.8274V33.5238Z",fill:"#FFB900"})),defaultConfig:{url:"https://login.microsoftonline.com",client_id:"",client_secret:"",tenant_id:"",client_secret_expiry:"",prompt:"login",email_claim:"email"}},{id:"google",name:"Google",icon:n.createElement("svg",{width:"65",height:"64",viewBox:"0 0 65 64",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M63.9451 32.72C63.9451 30.6133 63.7584 28.6133 63.4384 26.6667H33.3051V38.6933H50.5584C49.7851 42.64 47.5184 45.9733 44.1584 48.24V56.24H54.4517C60.4784 50.6667 63.9451 42.4533 63.9451 32.72Z",fill:"#4285F4"}),n.createElement("path",{d:"M33.305 64C41.945 64 49.1717 61.12 54.4517 56.24L44.1583 48.24C41.2783 50.16 37.625 51.3333 33.305 51.3333C24.9583 51.3333 17.8917 45.7067 15.3583 38.1067H4.745V46.3467C9.99833 56.8 20.7983 64 33.305 64Z",fill:"#34A853"}),n.createElement("path",{d:"M15.3584 38.1067C14.6917 36.1867 14.3451 34.1333 14.3451 32C14.3451 29.8667 14.7184 27.8133 15.3584 25.8933V17.6533H4.74505C2.55838 21.9733 1.30505 26.8267 1.30505 32C1.30505 37.1733 2.55838 42.0267 4.74505 46.3467L15.3584 38.1067Z",fill:"#FBBC05"}),n.createElement("path",{d:"M33.305 12.6667C38.025 12.6667 42.2383 14.2933 45.5717 17.4667L54.6917 8.34667C49.1717 3.17334 41.945 0 33.305 0C20.7983 0 9.99833 7.20001 4.745 17.6533L15.3583 25.8933C17.8917 18.2933 24.9583 12.6667 33.305 12.6667Z",fill:"#EA4335"})),defaultConfig:{client_id:"",client_secret:""}},{id:"oauth2",name:"OpenID",hiddenIfDisabled:!0,disabledForRecover:!0,icon:n.createElement("svg",{width:"65",height:"60",viewBox:"0 0 65 60",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M64.2468 34.9929L62.9089 21.0968L57.9256 23.9083C53.2914 21.0968 47.3581 19.1061 40.7332 18.3046V24.4577C44.5336 25.117 47.9462 26.3321 50.7513 27.9544L45.5031 30.9146L64.2533 34.9929H64.2468Z",fill:"#B3B3B3"}),n.createElement("path",{d:"M9.94184 38.8774C9.94184 32.0069 17.4264 26.2222 27.632 24.4577V18.2981C12.023 20.1854 0.246826 28.6783 0.246826 38.8774C0.246826 49.0766 12.8891 58.1769 29.3319 59.6312V53.5557C18.2666 52.166 9.94184 46.1228 9.94184 38.8774Z",fill:"#B3B3B3"}),n.createElement("path",{d:"M29.332 5.09999V59.6377L39.027 55.0746V0.362366L29.332 5.09999Z",fill:"#F8931E"})),defaultConfig:{url:"",openid_configuration_path:"",scope:"openid email profile",client_id:"",client_secret:""}}],ps="form",us="success";class gs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{uiState:ps,hasSuccessfullySignedInWithSso:!1,processing:!1,ssoToken:null}}bindCallbacks(){this.handleSignInTestClick=this.handleSignInTestClick.bind(this),this.handleActivateSsoSettings=this.handleActivateSsoSettings.bind(this),this.handleCloseDialog=this.handleCloseDialog.bind(this)}async handleSignInTestClick(e){e.preventDefault();try{this.setState({processing:!0});const e=await this.props.context.port.request("passbolt.sso.dry-run",this.props.configurationId);this.setState({uiState:us,hasSuccessfullySignedInWithSso:!0,ssoToken:e})}catch(e){"UserAbortsOperationError"!==e?.name&&this.props.adminSsoContext.handleError(e)}this.setState({processing:!1})}async handleActivateSsoSettings(e){e.preventDefault();try{this.setState({processing:!0}),await this.props.context.port.request("passbolt.sso.activate-settings",this.props.configurationId,this.state.ssoToken),await this.props.context.port.request("passbolt.sso.generate-sso-kit",this.props.provider.id),this.props.onSuccessfulSettingsActivation(),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The SSO settings have been saved successfully"))}catch(e){this.props.adminSsoContext.handleError(e)}this.setState({processing:!1}),this.handleCloseDialog()}handleCloseDialog(){this.props.onClose(),this.props.handleClose()}hasAllInputDisabled(){return this.state.processing}canSaveSettings(){return!this.hasAllInputDisabled()&&this.state.hasSuccessfullySignedInWithSso}get title(){return{form:this.translate("Test Single Sign-On configuration"),success:this.translate("Save Single Sign-On configuration")}[this.state.uiState]||""}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"test-sso-settings-dialog sso-login-form",title:this.title,onClose:this.handleCloseDialog,disabled:this.hasAllInputDisabled()},n.createElement("form",{onSubmit:this.handleActivateSsoSettings},n.createElement("div",{className:"form-content"},this.state.uiState===ps&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"Before saving the settings, we need to test if the configuration is working.")),n.createElement("button",{type:"button",className:`sso-login-button ${this.props.provider.id}`,onClick:this.handleSignInTestClick,disabled:this.hasAllInputDisabled()},n.createElement("span",{className:"provider-logo"},this.props.provider.icon),this.translate("Sign in with {{providerName}}",{providerName:this.props.provider.name}))),this.state.uiState===us&&n.createElement("p",null,this.translate("You susccessfully signed in with your {{providerName}} account. You can safely save your configuration.",{providerName:this.props.provider.name}))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseDialog}),n.createElement(La,{disabled:!this.canSaveSettings(),processing:this.state.processing,value:this.translate("Save settings")}))))}}gs.propTypes={context:o().object,adminSsoContext:o().object,onClose:o().func,t:o().func,provider:o().object,configurationId:o().string,actionFeedbackContext:o().any,handleClose:o().func,onSuccessfulSettingsActivation:o().func};const bs=I(Ms(d((0,k.Z)("common")(gs))));class fs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{processing:!1}}bindCallbacks(){this.handleConfirmDelete=this.handleConfirmDelete.bind(this)}async handleConfirmDelete(e){e.preventDefault(),this.setState({processing:!0}),await this.props.adminSsoContext.deleteSettings(),this.setState({processing:!1}),this.props.onClose()}hasAllInputDisabled(){return this.state.processing}render(){const e=this.hasAllInputDisabled();return n.createElement(Te,{className:"delete-sso-settings-dialog",title:this.props.t("Disable Single Sign-On settings?"),onClose:this.props.onClose,disabled:e},n.createElement("form",{onSubmit:this.handleConfirmDelete,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Are you sure you want to disable the current Single Sign-On settings?")),n.createElement("p",null,n.createElement(v.c,null,"This action cannot be undone. All the data associated with SSO will be permanently deleted."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:e,onClick:this.props.onClose}),n.createElement(La,{warning:!0,disabled:e,processing:this.state.processing,value:this.props.t("Disable")}))))}}fs.propTypes={adminSsoContext:o().object,onClose:o().func,t:o().func};const ys=Ms((0,k.Z)("common")(fs)),vs=["https://login.microsoftonline.com","https://login.microsoftonline.us","https://login.partner.microsoftonline.cn"],ks=/^https:\/\/login\.(microsoftonline\.(com|us)|partner\.microsoftonline\.cn)$/;class Es extends he{constructor(e){const t=Es.sanitizeDto(e);super(ye.validate(Es.ENTITY_NAME,t,Es.getSchema()))}static getSchema(){return{type:"object",required:["url","client_id","tenant_id","client_secret","client_secret_expiry"],properties:{url:{type:"string",pattern:ks},client_id:{type:"string",format:"uuid"},tenant_id:{type:"string",format:"uuid"},client_secret:{type:"string",minLength:1},client_secret_expiry:{type:"string",format:"date-time"},email_claim:{type:"string",enum:["email","preferred_username","upn"]},prompt:{type:"string",enum:["login","none"]}}}}static sanitizeDto(e){return e=Object.assign({},e),e?.email_claim||(e.email_claim="email"),e?.prompt||(e.prompt="login"),e}static get ENTITY_NAME(){return"AzureSsoSettings"}static get PROVIDER_ID(){return"azure"}static get SUPPORTED_URLS(){return vs}}const ws=Es;class Cs{constructor(e={}){this.url=e?.url,this.client_id=e?.client_id,this.tenant_id=e?.tenant_id,this.client_secret=e?.client_secret,this.email_claim=e?.email_claim,this.prompt=e?.prompt,e?.client_secret_expiry&&(this.client_secret_expiry=e.client_secret_expiry.toString().substring(0,10)),e?.id&&(this.id=e.id)}get provider(){return ws.PROVIDER_ID}static getSchema(){const e=ws.getSchema();return{type:"object",required:["url","client_id","tenant_id","client_secret","client_secret_expiry","email_claim","prompt"],properties:{id:{type:"string",format:"uuid"},url:e.properties.url,client_id:e.properties.client_id,tenant_id:e.properties.tenant_id,client_secret:e.properties.client_secret,client_secret_expiry:e.properties.client_secret_expiry,email_claim:e.properties.email_claim,prompt:e.properties.prompt}}}static isDataDifferent(e,t){return["url","client_id","tenant_id","client_secret","client_secret_expiry","email_claim","prompt"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Cs)||Cs.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,url:this.url,client_id:this.client_id,tenant_id:this.tenant_id,client_secret:this.client_secret,client_secret_expiry:this.client_secret_expiry,email_claim:this.email_claim,prompt:this.prompt}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Cs(a)}validate(){const e=Cs.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,url:t.url,client_id:t.client_id,tenant_id:t.tenant_id,client_secret:t.client_secret,client_secret_expiry:t.client_secret_expiry,email_claim:t.email_claim,prompt:t.prompt};return new Cs(a)}toEntityDto(){let e=this.client_secret_expiry;return this.client_secret_expiry&&(e+=" 00:00:00"),{provider:this.provider,data:{url:this.url,client_id:this.client_id,tenant_id:this.tenant_id,client_secret:this.client_secret,client_secret_expiry:e,email_claim:this.email_claim,prompt:this.prompt}}}}const Ss=Cs,xs=/^https:\/\/.+[^\/]$/;class Ns extends he{constructor(e){super(ye.validate(Ns.ENTITY_NAME,e,Ns.getSchema()))}static getSchema(){return{type:"object",required:["url","openid_configuration_path","scope","client_id","client_secret"],properties:{url:{type:"string",pattern:xs},openid_configuration_path:{type:"string",minLength:1},scope:{type:"string",minLength:1},client_id:{type:"string",minLength:1},client_secret:{type:"string",minLength:1}}}}static get ENTITY_NAME(){return"OAuth2SsoSettings"}static get PROVIDER_ID(){return"oauth2"}}const _s=Ns;class Rs{constructor(e={}){this.url=e?.url,this.openid_configuration_path=e?.openid_configuration_path,this.scope=e?.scope,this.client_id=e?.client_id,this.client_secret=e?.client_secret,e?.id&&(this.id=e.id)}get provider(){return _s.PROVIDER_ID}static getSchema(){const e=_s.getSchema();return{type:"object",required:["url","openid_configuration_path","scope","client_id","client_secret"],properties:{id:{type:"string",format:"uuid"},url:e.properties.url,openid_configuration_path:e.properties.openid_configuration_path,scope:e.properties.scope,client_id:e.properties.client_id,client_secret:e.properties.client_secret}}}static isDataDifferent(e,t){return["url","openid_configuration_path","scope","client_id","client_secret"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Rs)||Rs.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,url:this.url,openid_configuration_path:this.openid_configuration_path,scope:this.scope,client_id:this.client_id,client_secret:this.client_secret}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Rs(a)}validate(){const e=Rs.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,url:t.url,openid_configuration_path:t.openid_configuration_path,scope:t.scope,client_id:t.client_id,client_secret:t.client_secret};return new Rs(a)}toEntityDto(){return{provider:this.provider,data:{url:this.url,openid_configuration_path:this.openid_configuration_path,scope:this.scope,client_id:this.client_id,client_secret:this.client_secret}}}}const Is=Rs,As=["https://accounts.google.com"];class Ps extends he{constructor(e){super(ye.validate(Ps.ENTITY_NAME,e,Ps.getSchema()))}static getSchema(){return{type:"object",required:["client_id","client_secret"],properties:{client_id:{type:"string",minLength:1},client_secret:{type:"string",minLength:1}}}}static get ENTITY_NAME(){return"GoogleSsoSettings"}static get PROVIDER_ID(){return"google"}static get SUPPORTED_URLS(){return As}}const Ds=Ps;class Ls{constructor(e={}){this.client_id=e?.client_id,this.client_secret=e?.client_secret,e?.id&&(this.id=e.id)}get provider(){return Ds.PROVIDER_ID}static getSchema(){const e=Ds.getSchema();return{type:"object",required:["client_id","client_secret"],properties:{id:{type:"string",format:"uuid"},client_id:e.properties.client_id,client_secret:e.properties.client_secret}}}static isDataDifferent(e,t){return["client_id","client_secret"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Ls)||Ls.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,client_id:this.client_id,client_secret:this.client_secret}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Ls(a)}validate(){const e=Ls.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,client_id:t.client_id,client_secret:t.client_secret};return new Ls(a)}toEntityDto(){return{provider:this.provider,data:{client_id:this.client_id,client_secret:this.client_secret}}}}const Ts=Ls;function Us(){return Us=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},isProcessing:()=>{},loadSsoConfiguration:()=>{},getSsoConfiguration:()=>{},getProviderList:()=>{},isSsoConfigActivated:()=>{},isDataReady:()=>{},save:()=>{},disableSso:()=>{},hasFormChanged:()=>{},validateData:()=>{},saveAndTestConfiguration:()=>{},openTestDialog:()=>{},handleError:()=>{},getErrors:()=>{},deleteSettings:()=>{},showDeleteConfirmationDialog:()=>{}});class zs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.isSsoConfigExisting=!1,this.shouldFocusOnError=!1}get defaultState(){return{ssoConfig:null,providers:[],errors:null,originalConfig:null,cachedSsoConfig:{},isLoaded:!1,processing:!1,hasBeenValidated:!1,hasFormChanged:this.hasFormChanged.bind(this),isProcessing:this.isProcessing.bind(this),isDataReady:this.isDataReady.bind(this),loadSsoConfiguration:this.loadSsoConfiguration.bind(this),getSsoConfiguration:this.getSsoConfiguration.bind(this),getProviderList:this.getProviderList.bind(this),isSsoConfigActivated:this.isSsoConfigActivated.bind(this),changeProvider:this.changeProvider.bind(this),disableSso:this.disableSso.bind(this),setValue:this.setValue.bind(this),validateData:this.validateData.bind(this),saveAndTestConfiguration:this.saveAndTestConfiguration.bind(this),handleError:this.handleError.bind(this),getErrors:this.getErrors.bind(this),deleteSettings:this.deleteSettings.bind(this),canDeleteSettings:this.canDeleteSettings.bind(this),showDeleteConfirmationDialog:this.showDeleteConfirmationDialog.bind(this),consumeFocusOnError:this.consumeFocusOnError.bind(this)}}bindCallbacks(){this.handleTestConfigCloseDialog=this.handleTestConfigCloseDialog.bind(this),this.handleSettingsActivation=this.handleSettingsActivation.bind(this)}async loadSsoConfiguration(){let e=null;try{e=await this.props.context.port.request("passbolt.sso.get-current")}catch(e){return void this.props.dialogContext.open(je,{error:e})}this.isSsoConfigExisting=Boolean(e.provider);const t=this.getSsoProviderViewModel(e);this.setState({ssoConfig:t,originalConfig:t,providers:e.providers,isLoaded:!0})}getSsoProviderViewModel(e){if(!e?.provider)return null;switch(e.provider){case ws.PROVIDER_ID:return Ss.fromEntityDto(e);case Ds.PROVIDER_ID:return Ts.fromEntityDto(e);case _s.PROVIDER_ID:return Is.fromEntityDto(e)}return null}getSsoConfiguration(){return this.state.ssoConfig}getProviderList(){return this.state.providers}getSsoConfigurationDto(){return this.state.ssoConfig.toEntityDto()}isSsoConfigActivated(){return Boolean(this.state.ssoConfig)}hasFormChanged(){return this.state.isDataModified}setValue(e,t){const a=this.state.ssoConfig.cloneWithMutation(e,t),n=!!this.state.originalConfig&&this.state.originalConfig.isDataDifferent(a);this.setState({ssoConfig:a,isDataModified:n},(()=>{this.state.hasBeenValidated&&this.validateData()}))}disableSso(){const e=this.state.cachedSsoConfig;e[this.state.ssoConfig.provider]=this.state.ssoConfig,this.setState({ssoConfig:null,cachedSsoConfig:e})}isDataReady(){return this.state.isLoaded}isProcessing(){return this.state.processing}changeProvider(e){if(e.disabled)return;const t=this.state.cachedSsoConfig,a=this.state.ssoConfig?.provider;a&&(t[a]=this.state.ssoConfig),this.setState({ssoConfig:this.getCachedSsoConfigOrDefault(e.id),cachedSsoConfig:t},(()=>{this.state.hasBeenValidated&&this.validateData()}))}getCachedSsoConfigOrDefault(e){if(this.state.cachedSsoConfig[e])return this.state.cachedSsoConfig[e];const t=hs.find((t=>t.id===e)),a={id:this.state.ssoConfig?.id,provider:e,data:t.defaultConfig};return this.getSsoProviderViewModel(a)}validateData(e=!1){const t=this.state.ssoConfig.validate(),a=t.hasErrors(),n=a?t:null;return this.setState({errors:n,hasBeenValidated:!0}),this.shouldFocusOnError=e&&a,!a}consumeFocusOnError(){const e=this.shouldFocusOnError;return this.shouldFocusOnError=!1,e}getErrors(){return this.state.errors}async saveAndTestConfiguration(){this.setState({processing:!0});const e=this.getSsoConfigurationDto();let t;try{t=await this.props.context.port.request("passbolt.sso.save-draft",e)}catch(e){return this.handleError(e),void this.setState({processing:!1})}await this.runTestConfig(t);const a=this.getSsoProviderViewModel(t);this.setState({ssoConfig:a})}canDeleteSettings(){return this.isSsoConfigExisting&&null===this.state.ssoConfig}showDeleteConfirmationDialog(){this.props.dialogContext.open(ys)}async deleteSettings(){this.setState({processing:!0});try{const e=this.state.originalConfig.id;await this.props.context.port.request("passbolt.sso.delete-settings",e),this.props.actionFeedbackContext.displaySuccess(this.props.t("The SSO settings have been deleted successfully")),this.isSsoConfigExisting=!1,this.setState({ssoConfig:null,originalConfig:null,processing:!1})}catch(e){this.handleError(e),this.setState({processing:!1})}}async runTestConfig(e){const t=hs.find((t=>t.id===e.provider));this.props.dialogContext.open(bs,{provider:t,configurationId:e.id,handleClose:this.handleTestConfigCloseDialog,onSuccessfulSettingsActivation:this.handleSettingsActivation})}handleTestConfigCloseDialog(){this.setState({processing:!1})}handleSettingsActivation(){this.isSsoConfigExisting=!0,this.setState({originalConfig:this.state.ssoConfig})}handleError(e){console.error(e),this.props.dialogContext.open(je,{error:e})}render(){return n.createElement(js.Provider,{value:this.state},this.props.children)}}function Ms(e){return class extends n.Component{render(){return n.createElement(js.Consumer,null,(t=>n.createElement(e,Us({adminSsoContext:t},this.props))))}}}zs.propTypes={context:o().any,children:o().any,accountRecoveryContext:o().object,dialogContext:o().object,actionFeedbackContext:o().object,t:o().func},I(d(g((0,k.Z)("common")(zs))));class Os extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveClick(){const e=this.props.adminSsoContext;e.canDeleteSettings()?e.showDeleteConfirmationDialog():e.validateData(!0)&&await e.saveAndTestConfiguration()}isSaveEnabled(){return Boolean(this.props.adminSsoContext.ssoConfig?.provider)||this.props.adminSsoContext.canDeleteSettings()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Os.propTypes={adminSsoContext:o().object};const Fs=Ms((0,k.Z)("common")(Os));class qs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createRefs()}get defaultState(){return{advancedSettingsOpened:!1}}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handleCopyRedirectUrl=this.handleCopyRedirectUrl.bind(this),this.handleAdvancedSettingsCLick=this.handleAdvancedSettingsCLick.bind(this)}createRefs(){this.clientIdInputRef=n.createRef(),this.tenantIdInputRef=n.createRef(),this.clientSecretInputRef=n.createRef(),this.clientSecretExpiryInputRef=n.createRef()}componentDidUpdate(){if(!this.props.adminSsoContext.consumeFocusOnError())return;const e=this.props.adminSsoContext.getErrors();switch(this.getFirstFieldInError(e,["client_id","tenant_id","client_secret","client_secret_expiry"])){case"client_id":this.clientIdInputRef.current.focus();break;case"tenant_id":this.tenantIdInputRef.current.focus();break;case"client_secret":this.clientSecretInputRef.current.focus();break;case"client_secret_expiry":this.clientSecretExpiryInputRef.current.focus()}}getFirstFieldInError(e,t){for(let a=0;a({value:e,label:e})))}get emailClaimList(){return[{value:"email",label:this.translate("Email")},{value:"preferred_username",label:this.translate("Preferred username")},{value:"upn",label:this.translate("UPN")}]}get promptOptionList(){return[{value:"login",label:this.translate("Login")},{value:"none",label:this.translate("None")}]}get fullRedirectUrl(){return`${this.props.context.userSettings.getTrustedDomain()}/sso/azure/redirect`}get translate(){return this.props.t}render(){const e=this.props.adminSsoContext,t=e.getSsoConfiguration(),a=e.getErrors();return n.createElement(n.Fragment,null,n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"sso-azure-url-input"},n.createElement(v.c,null,"Login URL")),n.createElement(Ft,{id:"sso-azure-url-input",name:"url",items:this.availableUrlList,value:t.url,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"The Azure AD authentication endpoint. See ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/active-directory/develop/authentication-national-cloud#azure-ad-authentication-endpoints",rel:"noopener noreferrer",target:"_blank"},"alternatives"),"."))),n.createElement("div",{className:"input text input-wrapper "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Redirect URL")),n.createElement("div",{className:"button-inline"},n.createElement("input",{id:"sso-redirect-url-input",type:"text",className:"fluid form-element disabled",name:"redirect_url",value:this.fullRedirectUrl,placeholder:this.translate("Redirect URL"),readOnly:!0,disabled:!0}),n.createElement("button",{type:"button",onClick:this.handleCopyRedirectUrl,className:"copy-to-clipboard button-icon"},n.createElement(Re,{name:"copy-to-clipboard"}))),n.createElement("p",null,n.createElement(v.c,null,"The URL to provide to Azure when registering the application."))),n.createElement("hr",null),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Application (client) ID")),n.createElement("input",{id:"sso-azure-client-id-input",type:"text",className:"fluid form-element",name:"client_id",ref:this.clientIdInputRef,value:t.client_id,onChange:this.handleInputChange,placeholder:this.translate("Application (client) ID"),disabled:this.hasAllInputDisabled()}),a?.hasError("client_id")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_id"))),n.createElement("p",null,n.createElement(v.c,null,"The public identifier for the app in Azure in UUID format.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/healthcare-apis/register-application#application-id-client-id",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Directory (tenant) ID")),n.createElement("input",{id:"sso-azure-tenant-id-input",type:"text",className:"fluid form-element",name:"tenant_id",ref:this.tenantIdInputRef,value:t.tenant_id,onChange:this.handleInputChange,placeholder:this.translate("Directory ID"),disabled:this.hasAllInputDisabled()}),a?.hasError("tenant_id")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("tenant_id"))),n.createElement("p",null,n.createElement(v.c,null,"The Azure Active Directory tenant ID, in UUID format.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-gb/azure/active-directory/fundamentals/active-directory-how-to-find-tenant",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Secret")),n.createElement(It,{id:"sso-azure-secret-input",className:"fluid form-element",onChange:this.handleInputChange,autoComplete:"off",name:"client_secret",placeholder:this.translate("Secret"),disabled:this.hasAllInputDisabled(),value:t.client_secret,preview:!0,inputRef:this.clientSecretInputRef}),a?.hasError("client_secret")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_secret"))),n.createElement("p",null,n.createElement(v.c,null,"Allows Azure and Passbolt API to securely share information.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/marketplace/create-or-update-client-ids-and-secrets#add-a-client-id-and-client-secret",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text date-wrapper required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Secret expiry")),n.createElement("div",{className:"button-inline"},n.createElement("input",{id:"sso-azure-secret-expiry-input",type:"date",className:"fluid form-element "+(t.client_secret_expiry?"":"empty"),name:"client_secret_expiry",ref:this.clientSecretExpiryInputRef,value:t.client_secret_expiry||"",onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),n.createElement(Re,{name:"calendar"})),a?.hasError("client_secret_expiry")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_secret_expiry")))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning"),": This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.")),n.createElement("div",null,n.createElement("div",{className:"accordion operation-details "+(this.state.advancedSettingsOpened?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleAdvancedSettingsCLick},n.createElement("button",{type:"button",className:"link no-border",id:"advanced-settings-panel-button"},n.createElement(v.c,null,"Advanced settings")," ",n.createElement(Re,{name:this.state.advancedSettingsOpened?"caret-down":"caret-right"}))))),this.state.advancedSettingsOpened&&n.createElement(n.Fragment,null,n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"email-claim-input"},n.createElement(v.c,null,"Email claim")),n.createElement(Ft,{id:"email-claim-input",name:"email_claim",items:this.emailClaimList,value:t.email_claim,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"Defines which Azure field needs to be used as Passbolt username."))),"upn"===t.email_claim&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning"),": UPN is not active by default on Azure and requires a specific option set on Azure to be working.")),n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"prompt-input"},n.createElement(v.c,null,"Prompt")),n.createElement(Ft,{id:"prompt-input",name:"prompt",items:this.promptOptionList,value:t.prompt,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"Defines the Azure login behaviour by prompting the user to fully login each time or not.")))))}}qs.propTypes={adminSsoContext:o().object,actionFeedbackContext:o().any,context:o().any,t:o().func};const Ws=I(d(Ms((0,k.Z)("common")(qs))));class Vs extends n.PureComponent{constructor(e){super(e),this.bindCallbacks(),this.createRefs()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handleCopyRedirectUrl=this.handleCopyRedirectUrl.bind(this)}createRefs(){this.clientIdInputRef=n.createRef(),this.clientSecretInputRef=n.createRef()}componentDidUpdate(){if(!this.props.adminSsoContext.consumeFocusOnError())return;const e=this.props.adminSsoContext.getErrors();switch(this.getFirstFieldInError(e,["client_id","client_secret"])){case"client_id":this.clientIdInputRef.current.focus();break;case"client_secret":this.clientSecretInputRef.current.focus()}}getFirstFieldInError(e,t){for(let a=0;a{const a={...t};return a.disabled=Boolean(a.disabled)||!e.includes(a.id),a})).filter((e=>!e.disabled||e.disabled&&!e?.hiddenIfDisabled))}get supportedSsoProviders(){const e=this.state.providers,t=[];return e.forEach((e=>{const a=hs.find((t=>t.id===e));a&&!a.disabled&&t.push({value:a.id,label:a.name})})),t}isReady(){return this.props.adminSsoContext.isDataReady()}render(){const e=this.props.adminSsoContext,t=e.getSsoConfiguration(),a=e.isSsoConfigActivated();return n.createElement("div",{className:"row"},n.createElement("div",{className:"third-party-provider-settings sso-settings col8 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"ssoToggle",onChange:this.handleSsoSettingToggle,checked:a,disabled:this.hasAllInputDisabled(),id:"ssoToggle"}),n.createElement("label",{htmlFor:"ssoToggle"},n.createElement(v.c,null,"Single Sign-On")))),this.props.adminSsoContext.hasFormChanged()&&n.createElement("div",{className:"warning message",id:"sso-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, Don't forget to save your settings to apply your modification."))),this.isReady()&&!a&&n.createElement(n.Fragment,null,n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Select a provider")),n.createElement("div",{className:"provider-list"},this.allSsoProviders.map((e=>n.createElement("div",{key:e.id,className:"provider button "+(e.disabled?"disabled":""),id:e.id,onClick:()=>this.props.adminSsoContext.changeProvider(e)},n.createElement("div",{className:"provider-logo"},e.icon),n.createElement("p",{className:"provider-name"},e.name,n.createElement("br",null),e.disabled&&n.createElement(v.c,null,"(not yet available)"))))))),this.isReady()&&a&&n.createElement("form",{className:"form"},n.createElement("div",{className:"select-wrapper input"},n.createElement("label",{htmlFor:"sso-provider-input"},n.createElement(v.c,null,"Single Sign-On provider")),n.createElement(Ft,{id:"sso-provider-input",name:"provider",items:this.supportedSsoProviders,value:t?.provider,onChange:this.handleProviderInputChange})),n.createElement("hr",null),t.provider===ws.PROVIDER_ID&&n.createElement(Ws,null),t.provider===Ds.PROVIDER_ID&&n.createElement(Bs,null),t.provider===_s.PROVIDER_ID&&n.createElement(Ks,null))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help warning message",id:"sso-setting-security-warning-banner"},n.createElement("h3",null,n.createElement(v.c,null,"Important notice:")),n.createElement("p",null,n.createElement(v.c,null,"Enabling SSO changes the security risks.")," ",n.createElement(v.c,null,"For example an attacker with a local machine access maybe be able to access secrets, if the user is still logged in with the Identity provider.")," ",n.createElement(v.c,null,"Make sure users follow screen lock best practices."),n.createElement("a",{href:"https://help.passbolt.com/configure/sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Learn more")))),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about SSO, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),"azure"===t?.provider&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a AzureAD SSO?")),n.createElement("a",{className:"button",href:"https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/add-application-portal-setup-sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"external-link"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),"google"===t?.provider&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a Google SSO?")),n.createElement("a",{className:"button",href:"https://developers.google.com/identity/openid-connect/openid-connect",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"external-link"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}Hs.propTypes={administrationWorkspaceContext:o().object,adminSsoContext:o().object,actionFeedbackContext:o().any,context:o().any,t:o().func};const $s=I(d(O(Ms((0,k.Z)("common")(Hs))))),Zs=class{constructor(e={remember_me_for_a_month:!1}){this.policy=e.policy,this.rememberMeForAMonth=e.remember_me_for_a_month}};function Ys(){return Ys=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},save:()=>{}});class Qs extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.mfaPolicyService=new it(t)}get defaultState(){return{settings:new Zs,currentSettings:new Zs,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),save:this.save.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.mfaPolicyService.find(),a=new Zs(t);this.setState({currentSettings:a}),this.setState({settings:a},e),this.setProcessing(!1)}async save(){this.setProcessing(!0);const e=new class{constructor(e={rememberMeForAMonth:!1}){this.policy=e.policy||"opt-in",this.remember_me_for_a_month=e.rememberMeForAMonth}}(this.state.settings);await this.mfaPolicyService.save(e),await this.findSettings()}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}setSettings(e,t,a=(()=>{})){const n=Object.assign({},this.state.settings,{[e]:t});this.setState({settings:n},a)}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}render(){return n.createElement(Js.Provider,{value:this.state},this.props.children)}}Qs.propTypes={context:o().any,children:o().any,t:o().any,actionFeedbackContext:o().object};const Xs=I(Qs);function eo(e){return class extends n.Component{render(){return n.createElement(Js.Consumer,null,(t=>n.createElement(e,Ys({adminMfaPolicyContext:t},this.props))))}}}class to extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}isSaveEnabled(){return!this.props.adminMfaPolicyContext.isProcessing()}async handleSave(){if(this.isSaveEnabled())try{await this.props.adminMfaPolicyContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminMfaPolicyContext.setProcessing(!1)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The MFA policy settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.props.actionFeedbackContext.displayError(e.message))}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}to.propTypes={adminMfaPolicyContext:o().object,actionFeedbackContext:o().object,t:o().func};const ao=eo(d((0,k.Z)("common")(to)));class no extends n.Component{constructor(e){super(e),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(ao),await this.findSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminMfaPolicyContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}async findSettings(){await this.props.adminMfaPolicyContext.findSettings()}async handleInputChange(e){const t=e.target.name;let a=e.target.value;"rememberMeForAMonth"===t&&(a=e.target.checked),this.props.adminMfaPolicyContext.setSettings(t,a)}hasAllInputDisabled(){return this.props.adminMfaPolicyContext.isProcessing()}render(){const e=this.props.adminMfaPolicyContext.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"mfa-policy-settings col8 main-column"},n.createElement("h3",{id:"mfa-policy-settings-title"},n.createElement(v.c,null,"MFA Policy")),this.props.adminMfaPolicyContext.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"mfa-policy-setting-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border",id:"mfa-policy-subtitle"},n.createElement(v.c,null,"Default users multi factor authentication policy")),n.createElement("p",{id:"mfa-policy-description"},n.createElement(v.c,null,"You can choose the default behaviour of multi factor authentication for all users.")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio "+("mandatory"===e?.policy?"checked":""),id:"mfa-policy-mandatory"},n.createElement("input",{type:"radio",value:"mandatory",onChange:this.handleInputChange,name:"policy",checked:"mandatory"===e?.policy,id:"mfa-policy-mandatory-radio",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"mfa-policy-mandatory-radio"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Prompt")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Users have to enable multi factor authentication. If they don't, they will be reminded every time they log in.")))),n.createElement("div",{className:"input radio "+("opt-in"===e?.policy?"checked":""),id:"mfa-policy-opt-in"},n.createElement("input",{type:"radio",value:"opt-in",onChange:this.handleInputChange,name:"policy",checked:"opt-in"===e?.policy,id:"mfa-policy-opt-in-radio",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"mfa-policy-opt-in-radio"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Opt-in (default)")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Users have the choice to enable multi factor authentication in their profile workspace."))))),n.createElement("h4",{id:"mfa-policy-remember-subtitle"},"Remember a device for a month"),n.createElement("span",{className:"input toggle-switch form-element "},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"rememberMeForAMonth",onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),checked:e?.rememberMeForAMonth,id:"remember-toggle-button"}),n.createElement("label",{htmlFor:"remember-toggle-button"},n.createElement(v.c,null,"Allow “Remember this device for a month.“ option during MFA."))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about MFA policy settings, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/mfa-policy",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}no.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminMfaPolicyContext:o().object,t:o().func};const io=I(O(eo((0,k.Z)("common")(no))));class so extends he{constructor(e){super(ye.validate(so.ENTITY_NAME,e,so.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",maxLength:255}}}}get id(){return this._props.id}get name(){return this._props.name}static get ENTITY_NAME(){return"Action"}}const oo=so;class ro extends he{constructor(e){super(ye.validate(ro.ENTITY_NAME,e,ro.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",maxLength:255}}}}get id(){return this._props.id}get name(){return this._props.name}static get ENTITY_NAME(){return"UiAction"}}const lo=ro;class co extends he{constructor(e){super(ye.validate(co.ENTITY_NAME,e,co.getSchema())),this._props.action&&(this._action=new oo(this._props.action)),delete this._props.action,this._props.ui_action&&(this._ui_action=new lo(this._props.ui_action)),delete this._props.ui_action}static getSchema(){return{type:"object",required:["id","role_id","foreign_model","foreign_id","control_function"],properties:{id:{type:"string",format:"uuid"},role_id:{type:"string",format:"uuid"},foreign_model:{type:"string",enum:[co.FOREIGN_MODEL_ACTION,co.FOREIGN_MODEL_UI_ACTION]},foreign_id:{type:"string",format:"uuid"},control_function:{type:"string",enum:[se,oe]},action:oo.getSchema(),ui_action:lo.getSchema()}}}toDto(e){const t=Object.assign({},this._props);return e?(this._action&&e.action&&(t.action=this._action.toDto()),this._ui_action&&e.ui_action&&(t.ui_action=this._ui_action.toDto()),t):t}toUpdateDto(){return{id:this.id,control_function:this.controlFunction}}toJSON(){return this.toDto(co.ALL_CONTAIN_OPTIONS)}get id(){return this._props.id}get roleId(){return this._props.role_id}get foreignModel(){return this._props.foreign_model}get foreignId(){return this._props.foreign_id}get controlFunction(){return this._props.control_function}set controlFunction(e){ye.validateProp("control_function",e,co.getSchema().properties.control_function),this._props.control_function=e}get action(){return this._action||null}get uiAction(){return this._ui_action||null}static get ENTITY_NAME(){return"Rbac"}static get ALL_CONTAIN_OPTIONS(){return{action:!0,ui_action:!0}}static get FOREIGN_MODEL_ACTION(){return"Action"}static get FOREIGN_MODEL_UI_ACTION(){return"UiAction"}}const mo=co;class ho extends he{constructor(e,t){super(e),t?(this._props=null,this._items=t):this._items=[]}toDto(){return JSON.parse(JSON.stringify(this._items))}toJSON(){return this.toDto()}get items(){return this._items}get length(){return this._items.length}[Symbol.iterator](){let e=0;return{next:()=>eObject.prototype.hasOwnProperty.call(a._props,e)&&a._props[e]===t))}getFirst(e,t){if("string"!=typeof e||"string"!=typeof t)throw new TypeError("EntityCollection getFirst by expect propName and search to be strings");const a=this.getAll(e,t);if(a&&a.length)return a[0]}push(e){return this._items.push(e),this._items.length}unshift(e){return this._items.unshift(e),this._items.length}}const po=ho;class uo extends po{constructor(e,t=!1){super(ye.validate(uo.ENTITY_NAME,e,uo.getSchema())),this._props.forEach((e=>{try{this._items.push(new mo(e))}catch(e){if(!t)throw e}})),this._props=null}static getSchema(){return{type:"array",items:mo.getSchema()}}get rbacs(){return this._items}toBulkUpdateDto(){return this.items.map((e=>e.toUpdateDto()))}findRbacByRoleAndUiActionName(e,t){if(!(e instanceof ke))throw new Error("The role parameter should be a role entity.");if("string"!=typeof t&&!(t instanceof String))throw new Error("The name parameter should be a valid string.");return this.rbacs.find((a=>a.roleId===e.id&&a.uiAction?.name===t))}findRbacByActionName(e){if("string"!=typeof e&&!(e instanceof String))throw new Error("The name parameter should be a valid string.");return this.rbacs.find((t=>t.uiAction?.name===e))}push(e){if(!e||"object"!=typeof e)throw new TypeError("The function expect an object as parameter");e instanceof mo&&(e=e.toDto(mo.ALL_CONTAIN_OPTIONS));const t=new mo(e);super.push(t)}addOrReplace(e){const t=this.items.findIndex((t=>t.id===e.id));t>-1?this._items[t]=e:this.push(e)}remove(e){const t=this.items.length;let a=0;for(;a{},setRbacsUpdated:()=>{},save:()=>{},isProcessing:()=>{},hasSettingsChanges:()=>{},clearContext:()=>{}});class Co extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.rbacService=new yo(t),this.roleService=new ko(t)}get defaultState(){return{processing:!1,rbacs:null,rbacsUpdated:new go([]),setRbacs:this.setRbacs.bind(this),setRbacsUpdated:this.setRbacsUpdated.bind(this),isProcessing:this.isProcessing.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}async setRbacs(e){this.setState({rbacs:e})}async setRbacsUpdated(e){this.setState({rbacsUpdated:e})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return this.state.rbacsUpdated.rbacs.length>0}clearContext(){const{rbacs:e,rbacsUpdated:t,processing:a}=this.defaultState;this.setState({rbacs:e,rbacsUpdated:t,processing:a})}async save(){this.setProcessing(!0);try{const e=this.state.rbacsUpdated.toBulkUpdateDto(),t=await this.rbacService.updateAll(e,{ui_action:!0,action:!0}),a=this.state.rbacs;t.forEach((e=>a.addOrReplace(new mo(e))));const n=new go([]);this.setState({rbacs:a,rbacsUpdated:n})}finally{this.setProcessing(!1)}}render(){return n.createElement(wo.Provider,{value:this.state},this.props.children)}}Co.propTypes={context:o().any,children:o().any};const So=I(Co);function xo(e){return class extends n.Component{render(){return n.createElement(wo.Consumer,null,(t=>n.createElement(e,Eo({adminRbacContext:t},this.props))))}}}class No extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveClick(){try{await this.props.adminRbacContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}}isSaveEnabled(){return!this.props.adminRbacContext.isProcessing()&&this.props.adminRbacContext.hasSettingsChanges()}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The role-based access control settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}No.propTypes={context:o().object,adminRbacContext:o().object,actionFeedbackContext:o().object,t:o().func};const _o=xo(d((0,k.Z)("common")(No)));class Ro extends n.Component{render(){return n.createElement(n.Fragment,null,n.createElement("div",{className:`flex-container inner level-${this.props.level}`},n.createElement("div",{className:"flex-item first border-right"},n.createElement("span",null,n.createElement(Re,{name:"caret-down",baseline:!0}),"  ",this.props.label)),n.createElement("div",{className:"flex-item border-right"}," "),n.createElement("div",{className:"flex-item"}," ")),this.props.children)}}Ro.propTypes={label:o().string,level:o().number,t:o().func,children:o().any};const Io=(0,k.Z)("common")(Ro);class Ao extends n.Component{constructor(e){super(e),this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e,t){this.props.onChange(t,this.props.actionName,e.target.value)}get allowedCtlFunctions(){return[{value:se,label:this.props.t("Allow")},{value:oe,label:this.props.t("Deny")}]}get rowClassName(){return this.props.actionName.toLowerCase().replaceAll(/[^\w]/gi,"-")}getCtlFunctionForRole(e){const t=this.props.rbacsUpdated?.findRbacByRoleAndUiActionName(e,this.props.actionName)||this.props.rbacs?.findRbacByRoleAndUiActionName(e,this.props.actionName);return t?.controlFunction||null}hasChanged(){return!!this.props.rbacsUpdated.findRbacByActionName(this.props.actionName)}render(){let e=[];return this.props.roles&&(e=this.props.roles.items.filter((e=>"user"===e.name))),n.createElement(n.Fragment,null,n.createElement("div",{className:`rbac-row ${this.rowClassName} flex-container inner level-${this.props.level} ${this.hasChanged()?"highlighted":""}`},n.createElement("div",{className:"flex-item first border-right"},n.createElement("span",null,this.props.label)),n.createElement("div",{className:"flex-item border-right"},n.createElement(Ft,{className:"medium admin",items:this.allowedCtlFunctions,value:se,disabled:!0})),e.map((e=>n.createElement("div",{key:`${this.props.actionName}-${e.id}`,className:"flex-item input"},n.createElement(Ft,{className:`medium ${e.name}`,items:this.allowedCtlFunctions,value:this.getCtlFunctionForRole(e),disabled:!(this.props.rbacs?.length>0&&this.getCtlFunctionForRole(e)),onChange:t=>this.handleInputChange(t,e)}),!this.getCtlFunctionForRole(e)&&n.createElement("div",{className:"warning-message"},"There is no valid setting found for this action."))))))}}Ao.propTypes={label:o().string.isRequired,level:o().number.isRequired,actionName:o().string.isRequired,rbacs:o().object,rbacsUpdated:o().object,roles:o().object.isRequired,onChange:o().func.isRequired,t:o().func};const Po=(0,k.Z)("common")(Ao);class Do extends Error{constructor(e,t,a){if(super(a=a||"Entity collection error."),"number"!=typeof e)throw new TypeError("EntityCollectionError requires a valid position");if(!t||"string"!=typeof t)throw new TypeError("EntityCollectionError requires a valid rule");if(!a||"string"!=typeof a)throw new TypeError("EntityCollectionError requires a valid rule");this.position=e,this.rule=t}}const Lo=Do;class To extends po{constructor(e){super(ye.validate(To.ENTITY_NAME,e,To.getSchema())),this._props.forEach((e=>{this.push(new ke(e))})),this._props=null}static getSchema(){return{type:"array",items:ke.getSchema()}}get roles(){return this._items}get ids(){return this._items.map((e=>e.id))}assertUniqueId(e){if(!e.id)return;const t=this.roles.length;let a=0;for(;a{},getSettingsErrors:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},isDataValid:()=>{},clearContext:()=>{},save:()=>{},validateData:()=>{},getPasswordGeneratorMasks:()=>{},getEntropyForPassphraseConfiguration:()=>{},getEntropyForPasswordConfiguration:()=>{},getMinimalRequiredEntropy:()=>{},getMinimalAdvisedEntropy:()=>{},isSourceChanging:()=>{}});class Wo extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.hasDataBeenValidated=!1}get defaultState(){return{settings:new Oo,errors:{},currentSettings:new Oo,processing:!0,getSettings:this.getSettings.bind(this),getSettingsErrors:this.getSettingsErrors.bind(this),setSettings:this.setSettings.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),save:this.save.bind(this),validateData:this.validateData.bind(this),getPasswordGeneratorMasks:this.getPasswordGeneratorMasks.bind(this),getEntropyForPassphraseConfiguration:this.getEntropyForPassphraseConfiguration.bind(this),getEntropyForPasswordConfiguration:this.getEntropyForPasswordConfiguration.bind(this),getMinimalRequiredEntropy:this.getMinimalRequiredEntropy.bind(this),getMinimalAdvisedEntropy:this.getMinimalAdvisedEntropy.bind(this),isSourceChanging:this.isSourceChanging.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.props.context.port.request("passbolt.password-policies.get-admin-settings"),a=new Oo(t);this.setState({currentSettings:a,settings:a},e),this.setProcessing(!1)}validateData(){this.hasDataBeenValidated=!0;let e=!0;const t={},a=this.state.settings;a.mask_upper||a.mask_lower||a.mask_digit||a.mask_parenthesis||a.mask_char1||a.mask_char2||a.mask_char3||a.mask_char4||a.mask_char5||a.mask_emoji||(e=!1,t.masks=this.props.t("At least 1 set of characters must be selected")),a.passwordLength<8&&(e=!1,t.passwordLength=this.props.t("The password length must be set to 8 at least")),a.wordsCount<4&&(e=!1,t.wordsCount=this.props.t("The passphrase word count must be set to 4 at least")),a.wordsSeparator.length>10&&(e=!1,t.wordsSeparator=this.props.t("The words separator should be at a maximum of 10 characters long"));const n=this.getMinimalRequiredEntropy();return this.getEntropyForPassphraseConfiguration(){this.hasDataBeenValidated&&this.validateData()}))}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSourceChanging(){return"db"!==this.state.currentSettings?.source&&"default"!==this.state.currentSettings?.source}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}render(){return n.createElement(qo.Provider,{value:this.state},this.props.children)}}function Vo(e){return class extends n.Component{render(){return n.createElement(qo.Consumer,null,(t=>n.createElement(e,Fo({adminPasswordPoliciesContext:t},this.props))))}}}Wo.propTypes={context:o().any,children:o().any,t:o().any,actionFeedbackContext:o().object},I((0,k.Z)("common")(Wo));class Bo extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminPasswordPoliciesContext.isProcessing()}async handleSave(){if(this.isActionEnabled&&this.props.adminPasswordPoliciesContext.validateData())try{await this.props.adminPasswordPoliciesContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password policy settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message)}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Bo.propTypes={adminPasswordPoliciesContext:o().object,actionFeedbackContext:o().object,t:o().func};const Go=Vo(d((0,k.Z)("common")(Bo)));class Ko extends n.Component{colorGradient(e,t,a,n){let i,s,o=e/100*2;return o>=1?(o-=1,i=this.hexToRgb(a),s=this.hexToRgb(n)):(i=this.hexToRgb(t),s=this.hexToRgb(a)),`rgb(${Math.floor(i.red+(s.red-i.red)*o)},${Math.floor(i.green+(s.green-i.green)*o)},${Math.floor(i.blue+(s.blue-i.blue)*o)})`}hexToRgb(e){const t=new RegExp("^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$","i").exec(e.trim());return t?{red:parseInt(t[1],16),green:parseInt(t[2],16),blue:parseInt(t[3],16)}:null}get complexityBarStyle(){const e=100-99/(1+Math.pow(this.props.entropy/90,10));return{background:`linear-gradient(to right, ${this.colorGradient(e,"#A40000","#FFA724","#0EAA00")} ${e}%, var(--complexity-bar-background-default) ${e}%`}}get entropy(){return(this.props.entropy||0).toFixed(1)}hasEntropy(){return null!==this.props.entropy&&void 0!==this.props.entropy}hasError(){return this.props.error}render(){const e=jn(this.props.entropy);return n.createElement("div",{className:"password-complexity"},n.createElement("span",{className:"complexity-text"},(this.hasEntropy()||this.hasError())&&n.createElement(n.Fragment,null,e.label," (",n.createElement(v.c,null,"entropy:")," ",this.entropy," bits)"),!this.hasEntropy()&&!this.hasError()&&n.createElement(v.c,null,"Quality")),n.createElement("span",{className:"progress"},n.createElement("span",{className:"progress-bar "+(this.hasError()?"error":""),style:this.hasEntropy()?this.complexityBarStyle:void 0})))}}Ko.defaultProps={entropy:null},Ko.propTypes={entropy:o().number,error:o().bool};const Ho=(0,k.Z)("common")(Ko);class $o extends n.Component{constructor(e){super(e),this.state={showPasswordSection:!1,showPassphraseSection:!1},this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Go),await this.props.adminPasswordPoliciesContext.findSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminPasswordPoliciesContext.clearContext()}bindCallbacks(){this.handleCheckboxInputChange=this.handleCheckboxInputChange.bind(this),this.handleMaskToggled=this.handleMaskToggled.bind(this),this.handlePasswordSectionToggle=this.handlePasswordSectionToggle.bind(this),this.handlePassphraseSectionToggle=this.handlePassphraseSectionToggle.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleSliderInputChange=this.handleSliderInputChange.bind(this),this.handleLengthChange=this.handleLengthChange.bind(this)}handlePasswordSectionToggle(){this.setState({showPasswordSection:!this.state.showPasswordSection})}handlePassphraseSectionToggle(){this.setState({showPassphraseSection:!this.state.showPassphraseSection})}get wordCaseList(){return[{value:"lowercase",label:this.props.t("Lower case")},{value:"uppercase",label:this.props.t("Upper case")},{value:"camelcase",label:this.props.t("Camel case")}]}get providerList(){return[{value:"password",label:this.props.t("Password")},{value:"passphrase",label:this.props.t("Passphrase")}]}handleCheckboxInputChange(e){const t=e.target.name;this.props.adminPasswordPoliciesContext.setSettings(t,e.target.checked)}handleSliderInputChange(e){const t=parseInt(e.target.value,10),a=e.target.name;this.props.adminPasswordPoliciesContext.setSettings(a,t)}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminPasswordPoliciesContext.setSettings(n,a)}handleLengthChange(e){const t=e.target,a=parseInt(t.value,10),n=t.name;this.props.adminPasswordPoliciesContext.setSettings(n,a)}handleMaskToggled(e){const t=!this.props.adminPasswordPoliciesContext.getSettings()[e];this.props.adminPasswordPoliciesContext.setSettings(e,t)}hasAllInputDisabled(){return this.props.adminPasswordPoliciesContext.isProcessing()}get settingsSource(){return this.props.adminPasswordPoliciesContext?.getSettings()?.source}get configurationSource(){return{legacyEnv:this.props.t("environment variables (legacy)"),env:this.props.t("environment variables"),legacyFile:this.props.t("file (legacy)"),file:this.props.t("file"),db:this.props.t("database"),default:this.props.t("default configuration")}[this.settingsSource]||this.props.t("unknown")}render(){const e=this.props.adminPasswordPoliciesContext,t=e.getSettings(),a=e.getSettingsErrors(),i=e.getMinimalAdvisedEntropy(),s=e.getEntropyForPasswordConfiguration(),o=e.getEntropyForPassphraseConfiguration(),r=e.getPasswordGeneratorMasks(),l=sn.createElement("button",{key:e,className:"button button-toggle "+(t[e]?"selected":""),onClick:()=>this.handleMaskToggled(e),disabled:this.hasAllInputDisabled()},a.label)))),a.masks&&n.createElement("div",{id:"password-mask-error",className:"error-message"},a.masks),n.createElement("div",{className:"input checkbox"},n.createElement("input",{id:"configure-password-generator-form-exclude-look-alike",type:"checkbox",name:"excludeLookAlikeCharacters",checked:t.excludeLookAlikeCharacters,onChange:this.handleCheckboxInputChange,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"configure-password-generator-form-exclude-look-alike"},n.createElement(v.c,null,"Exclude look-alike characters"))),n.createElement("p",null,n.createElement(v.c,null,"You can select the set of characters used for the passwords that are generated randomly by passbolt in the password generator.")))),n.createElement("div",{className:"accordion-header"},n.createElement("button",{id:"accordion-toggle-passphrase",className:"link no-border",type:"button",onClick:this.handlePassphraseSectionToggle},n.createElement(Re,{name:this.state.showPassphraseSection?"caret-down":"caret-right"}),n.createElement(v.c,null,"Passphrase settings"))),this.state.showPassphraseSection&&n.createElement("div",{className:"passphrase-settings"},n.createElement("div",{className:"estimated-entropy input"},n.createElement("label",null,n.createElement(v.c,null,"Estimated entropy")),n.createElement(Ho,{entropy:o}),a.passphraseMinimalRequiredEntropy&&n.createElement("div",{className:"error-message"},a.passphraseMinimalRequiredEntropy)),n.createElement("div",{className:"input text "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-word-count"},n.createElement(v.c,null,"Number of words")),n.createElement("div",{className:"slider"},n.createElement("input",{name:"wordsCount",min:"4",max:"40",value:t.wordsCount,type:"range",onChange:this.handleSliderInputChange,disabled:this.hasAllInputDisabled()}),n.createElement("input",{type:"number",id:"configure-passphrase-generator-form-word-count",name:"wordsCount",min:"4",max:"40",value:t.wordsCount,onChange:this.handleLengthChange,disabled:this.hasAllInputDisabled()})),a.wordsCount&&n.createElement("div",{id:"wordsCount-error",className:"error-message"},a.wordsCount)),n.createElement("p",null,n.createElement(v.c,null,"You can set the default length for the passphrases that are generated randomly by passbolt in the password generator.")),n.createElement("div",{className:"input text "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-words-separator"},n.createElement(v.c,null,"Words separator")),n.createElement("input",{type:"text",id:"configure-passphrase-generator-form-words-separator",name:"wordsSeparator",value:t.wordsSeparator,onChange:this.handleInputChange,placeholder:this.props.t("Type one or more characters"),disabled:this.hasAllInputDisabled()}),a.wordsSeparator&&n.createElement("div",{className:"error-message"},a.wordsSeparator)),n.createElement("div",{className:"select-wrapper input "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-words-case"},n.createElement(v.c,null,"Words case")),n.createElement(Ft,{id:"configure-passphrase-generator-form-words-case",name:"wordCase",items:this.wordCaseList,value:t.wordCase,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}))),n.createElement("h4",{id:"password-policies-external-services-subtitle"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"passphrase-policy-external-services-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"policyPassphraseExternalServices",onChange:this.handleCheckboxInputChange,checked:t?.policyPassphraseExternalServices,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"passphrase-policy-external-services-toggle-button"},n.createElement(v.c,null,"External services")))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement(v.c,null,"Allow passbolt to access external services to check if a password has been compromised."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"password-policies-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is password policy?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the password policy settings, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/password-policies",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}$o.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminPasswordPoliciesContext:o().object,t:o().func};const Zo=I(O(Vo((0,k.Z)("common")($o))));class Yo extends he{constructor(e){super(ye.validate(Yo.ENTITY_NAME,e,Yo.getSchema()))}static getSchema(){return{type:"object",required:["entropy_minimum","external_dictionary_check"],properties:{id:{type:"string",format:"uuid"},entropy_minimum:{type:"integer",gte:50,lte:224},external_dictionary_check:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"UserPassphrasePolicies"}static createFromDefault(e={}){const t=Object.assign({entropy_minimum:50,external_dictionary_check:!0},e);return new Yo(t)}}const Jo=Yo;class Qo{constructor(e={}){this.external_dictionary_check=e?.external_dictionary_check,this.entropy_minimum=e?.entropy_minimum}static getSchema(){const e=Jo.getSchema();return{type:"object",required:["entropy_minimum","external_dictionary_check"],properties:{entropy_minimum:e.properties.entropy_minimum,external_dictionary_check:e.properties.external_dictionary_check}}}static fromEntityDto(e){const t={entropy_minimum:parseInt(e?.entropy_minimum,10)||50,external_dictionary_check:Boolean(e?.external_dictionary_check)};return new Qo(t)}static isDataDifferent(e,t){return["entropy_minimum","external_dictionary_check"].some((a=>e[a]!==t[a]))}toEntityDto(){return{entropy_minimum:this.entropy_minimum,external_dictionary_check:this.external_dictionary_check}}cloneWithMutation(e,t){const a={...this,[e]:t};return new Qo(a)}validate(){const e=Qo.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){return e}return new ue}}const Xo=Qo;function er(){return er=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},setSettings:()=>{},findSettings:()=>{},isProcessing:()=>{},validateData:()=>{},save:()=>{},getErrors:()=>{},hasSettingsChanges:()=>{}});class ar extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{processing:!1,errors:null,hasBeenValidated:!1,isDataModified:!1,settings:new Xo,findSettings:this.findSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),isProcessing:this.isProcessing.bind(this),validateData:this.validateData.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this)}}async findSettings(){this.setState({processing:!0});const e=await this.props.context.port.request("passbolt.user-passphrase-policies.find"),t=Xo.fromEntityDto(e);this.setState({settings:t,currentSettings:t,processing:!1})}getSettings(){return this.state.settings}setSettings(e,t){const a=this.state.settings.cloneWithMutation(e,t),n=Xo.isDataDifferent(a,this.state.currentSettings);if(!this.state.hasBeenValidated)return void this.setState({settings:a,isDataModified:n});const i=a.validate();this.setState({errors:i,settings:a,isDataModified:n})}isProcessing(){return this.state.processing}validateData(){const e=this.state.settings.validate(),t=e.hasErrors(),a=t?e:null;return this.setState({errors:a,hasBeenValidated:!0}),!t}async save(){this.setState({processing:!0});try{const e=this.state.settings.toEntityDto(),t=await this.props.context.port.request("passbolt.user-passphrase-policies.save",e),a=Xo.fromEntityDto(t);this.setState({settings:a,currentSettings:a,processing:!1,isDataModified:!1})}finally{this.setState({processing:!1})}}getErrors(){return this.state.errors}hasSettingsChanges(){return this.state.isDataModified}render(){return n.createElement(tr.Provider,{value:this.state},this.props.children)}}function nr(e){return class extends n.Component{render(){return n.createElement(tr.Consumer,null,(t=>n.createElement(e,er({adminUserPassphrasePoliciesContext:t},this.props))))}}}ar.propTypes={context:o().any,children:o().any,t:o().any},I((0,k.Z)("common")(ar));class ir extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminUserPassphrasePoliciesContext.isProcessing()}async handleSave(){if(this.isActionEnabled&&this.props.adminUserPassphrasePoliciesContext.validateData())try{await this.props.adminUserPassphrasePoliciesContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The user passphrase policies were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}ir.propTypes={adminUserPassphrasePoliciesContext:o().object,actionFeedbackContext:o().object,dialogContext:o().any,t:o().func};const sr=nr(d(g((0,k.Z)("common")(ir))));class or extends n.PureComponent{constructor(e){super(e),this.bindHandlers()}bindHandlers(){this.handleRangeOptionClick=this.handleRangeOptionClick.bind(this),this.handleRangeChange=this.handleRangeChange.bind(this)}handleRangeOptionClick(e){this.props.disabled||this.props.onChange(this.props.id,e)}handleRangeChange(e){const t=e.target;this.props.onChange(t.name,this.values[t.value].value)}getComputedStyleForEntropyStep(e,t){return{left:e*(100/(t-1))+"%"}}getValueIndex(e){return this.values.findIndex((t=>t.value===e))}get values(){return[{label:"50 bits",value:50},{label:"64 bits",value:64},{label:"80 bits",value:80},{label:"96 bits",value:96},{label:"128 bits",value:128},{label:"160 bits",value:160},{label:"192 bits",value:192},{label:"224 bits",value:224}]}render(){const e=this.values,t=e.length,{id:a,value:i}=this.props;return n.createElement("div",{className:"range-wrapper"},n.createElement("div",{className:"range-labels"},n.createElement("label",{key:"min"},n.createElement(v.c,null,"Weak")),n.createElement("label",{key:"max"},n.createElement(v.c,null,"Secure"))),n.createElement("div",{className:"range-input-wrapper"},n.createElement("input",{type:"range",className:"range-input",id:a,name:a,min:0,max:e.length-1,value:this.getValueIndex(i),list:`${this.props.id}-values`,onChange:this.handleRangeChange,required:!0,disabled:this.props.disabled}),n.createElement("ul",{className:"range-options"},e.map(((e,a)=>n.createElement("li",{key:`li-${a}`,onClick:()=>this.handleRangeOptionClick(e.value),style:this.getComputedStyleForEntropyStep(a,t),className:"range-option "+(i===e.value?"range-option--active":""),disabled:this.props.disabled},e.label))))))}}or.propTypes={value:o().number.isRequired,id:o().string.isRequired,onChange:o().func,disabled:o().bool};const rr=(0,k.Z)("common")(or);class lr extends n.PureComponent{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{isReady:!1}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(sr),await this.props.adminUserPassphrasePoliciesContext.findSettings(),this.setState({isReady:!0})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction()}bindCallbacks(){this.handleMinimumEntropyChange=this.handleMinimumEntropyChange.bind(this),this.handleCheckboxInputChange=this.handleCheckboxInputChange.bind(this)}hasAllInputDisabled(){return this.props.adminUserPassphrasePoliciesContext.isProcessing()}handleMinimumEntropyChange(e,t){const a=parseInt(t,10)||0;this.props.adminUserPassphrasePoliciesContext.setSettings(e,a)}handleCheckboxInputChange(e){const t=e.target,a=t.name,n=Boolean(t.checked);this.props.adminUserPassphrasePoliciesContext.setSettings(a,n)}isWeakSettings(e){return e.entropy_minimum<80}render(){if(!this.state.isReady)return null;const e=this.hasAllInputDisabled(),t=this.props.adminUserPassphrasePoliciesContext,a=t.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"password-policies-settings col8 main-column"},n.createElement("h3",{id:"user-passphrase-policies-title"},n.createElement(v.c,null,"User Passphrase Policies")),t.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"user-passphrase-policies-save-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),this.isWeakSettings(a)&&n.createElement("div",{className:"warning message",id:"user-passphrase-policies-weak-settings-banner"},n.createElement("p",null,n.createElement(v.c,null,"Passbolt recommends passphrase strength to be at minimum of ",{MINIMAL_ADVISED_ENTROPY:80}," bits to be safe."))),n.createElement("h4",{id:"user-passphrase-policies-entropy-minimum",className:"title title--required no-border"},n.createElement(v.c,null,"User passphrase minimal entropy")),n.createElement("div",{className:"input range"},n.createElement(rr,{id:"entropy_minimum",onChange:this.handleMinimumEntropyChange,value:a.entropy_minimum,disabled:e})),n.createElement("div",null,n.createElement(v.c,null,"You can set the minimal entropy for the users' private key passphrase.")," ",n.createElement(v.c,null,"This is the passphrase that is asked during sign in or recover.")),n.createElement("h4",{id:"user-passphrase-policies-external-services-subtitle"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"user-passphrase-policies-external-services-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"external_dictionary_check",onChange:this.handleCheckboxInputChange,checked:a?.external_dictionary_check,disabled:e}),n.createElement("label",{htmlFor:"user-passphrase-policies-external-services-toggle-button"},n.createElement(v.c,null,"External password dictionary check")))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement(v.c,null,"Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is user passphrase policies?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the user passphrase policies, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/user-passphrase-policies",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}lr.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminUserPassphrasePoliciesContext:o().object,t:o().func};const cr=I(O(nr((0,k.Z)("common")(lr))));class mr extends he{constructor(e){super(ye.validate(mr.ENTITY_NAME,e,mr.getSchema()))}static getSchema(){return{type:"object",required:["automatic_expiry","automatic_update"],properties:{id:{type:"string",format:"uuid"},default_expiry_period:{type:"null"},policy_override:{type:"boolean"},automatic_expiry:{type:"boolean"},automatic_update:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"PasswordExpirySettings"}static createFromDefault(e={}){const t={default_expiry_period:null,policy_override:!1,automatic_expiry:!1,automatic_update:!1,...e};return new mr(t)}}const dr=mr;class hr extends he{constructor(e){super(ye.validate(hr.ENTITY_NAME,e,hr.getSchema()))}static getSchema(){return{type:"object",required:["automatic_expiry","automatic_update","policy_override"],properties:{id:{type:"string",format:"uuid"},default_expiry_period:{anyOf:[{type:"integer",gte:1,lte:999},{type:"null"}]},policy_override:{type:"boolean"},automatic_expiry:{type:"boolean"},automatic_update:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"passwordExpiryProSettingsEntity"}static createFromDefault(e={}){const t={default_expiry_period:null,policy_override:!1,automatic_expiry:!0,automatic_update:!0,...e};return new hr(t)}}const pr=hr;class ur{constructor(e={}){this.automatic_update=Boolean(e?.automatic_update),this.policy_override=Boolean(e?.policy_override),this.automatic_expiry=Boolean(e?.automatic_expiry);const t=parseInt(e?.default_expiry_period,10);this.default_expiry_period=isNaN(t)?null:t,this.default_expiry_period_toggle=void 0!==e?.default_expiry_period_toggle?Boolean(e.default_expiry_period_toggle):Boolean(this.default_expiry_period),e?.id&&(this.id=e?.id)}static getSchema(e=!1){const t=e?pr.getSchema():dr.getSchema();return this.getDefaultSchema(t,e)}static getDefaultSchema(e,t=!1){const a={type:"object",required:["automatic_expiry","automatic_update"],properties:{id:e.properties.id,automatic_expiry:e.properties.automatic_expiry,automatic_update:e.properties.automatic_update,policy_override:e.properties.policy_override,default_expiry_period:e.properties.default_expiry_period}};return t&&a.required.push("policy_override"),a}static fromEntityDto(e){const t={automatic_expiry:Boolean(e?.automatic_expiry),automatic_update:Boolean(e?.automatic_update),policy_override:Boolean(e?.policy_override),default_expiry_period:null!==e?.default_expiry_period?parseInt(e?.default_expiry_period,10):null};return e?.id&&(t.id=e.id),new ur(t)}static isDataDifferent(e,t){return["automatic_expiry","automatic_update","policy_override","default_expiry_period"].some((a=>e[a]!==t[a]))}toEntityDto(){const e=this.default_expiry_period_toggle?this.default_expiry_period:null;return{automatic_expiry:this.automatic_expiry,automatic_update:this.automatic_update,policy_override:this.policy_override,default_expiry_period:e}}cloneWithMutation(e,t){const a={...this,[e]:t};return new ur(a)}validate(e=!1){const t=new ue,a=ur.getSchema(e);try{ye.validate(this.constructor.name,this,a),this.validateFormInput(t,e)}catch(t){if(!(t instanceof ue))throw t;return this.validateFormInput(t,e),t}return t}validateFormInput(e,t){t&&this.default_expiry_period_toggle&&null===this.default_expiry_period&&e.addError("default_expiry_period","required","The default_expiry_period is required.")}get isSettingsDisabled(){return!this.id}}const gr=ur;function br(){return br=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},get:()=>{},setSettingsBulk:()=>{},findSettings:()=>{},isProcessing:()=>{},validateData:()=>{},save:()=>{},getErrors:()=>{},isFeatureToggleEnabled:()=>{},setFeatureToggle:()=>{},hasSettingsChanges:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setDefaultExpiryToggle:()=>{}});class yr extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{processing:!1,errors:null,hasBeenValidated:!1,isDataModified:!1,submitted:!1,currentSettings:new gr,featureToggleEnabled:!1,settings:new gr,findSettings:this.findSettings.bind(this),getSettings:this.getSettings.bind(this),setSettingsBulk:this.setSettingsBulk.bind(this),isProcessing:this.isProcessing.bind(this),validateData:this.validateData.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isFeatureToggleEnabled:this.isFeatureToggleEnabled.bind(this),setFeatureToggle:this.setFeatureToggle.bind(this),setDefaultExpiryToggle:this.setDefaultExpiryToggle.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this)}}async findSettings(){this.setState({processing:!0}),this.setState({submitted:!1});const e=await this.props.context.port.request("passbolt.password-expiry.find"),t=gr.fromEntityDto(e);this.setState({toggleEnabled:t?.id,settings:t,currentSettings:t,processing:!1})}setDefaultExpiryToggle(e){let t=this.state.settings.default_expiry_period;e&&null===this.state.settings.default_expiry_period&&(t=90),this.setSettingsBulk({default_expiry_period_toggle:e,default_expiry_period:t})}getSettings(){return this.state.settings}setSubmitted(e){this.setState({submitted:e})}isSubmitted(){return this.state.submitted}setSettingsBulk(e){let t=this.state.settings;const a=Object.keys(e);for(let n=0;nn.createElement(e,br({adminPasswordExpiryContext:t},this.props))))}}}yr.propTypes={context:o().any,children:o().any,t:o().any},I((0,k.Z)("common")(yr));class kr extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminPasswordExpiryContext.isProcessing()}async handleSave(){if(this.props.adminPasswordExpiryContext.setSubmitted(!0),this.isActionEnabled&&this.props.adminPasswordExpiryContext.validateData())try{await this.props.adminPasswordExpiryContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password expiry settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}kr.propTypes={adminPasswordExpiryContext:o().object,actionFeedbackContext:o().object,dialogContext:o().any,t:o().func};const Er=d(vr(g((0,k.Z)("common")(kr))));class wr extends n.PureComponent{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleExpiryPeriodToggleClick=this.handleExpiryPeriodToggleClick.bind(this)}handleInputChange(e){e.preventDefault();const{type:t,checked:a,value:n,name:i}=e.target,s="checkbox"===t?a:parseInt(n,10);this.props.adminPasswordExpiryContext.setSettingsBulk({[i]:s})}handleExpiryPeriodToggleClick(e){const t=e.target.checked;this.props.adminPasswordExpiryContext.setDefaultExpiryToggle(t)}async handleFormSubmit(e){if(e.preventDefault(),this.props.adminPasswordExpiryContext.setSubmitted(!0),!this.props.adminPasswordExpiryContext.isProcessing()&&this.props.adminPasswordExpiryContext.validateData())try{await this.props.adminPasswordExpiryContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password expiry settings were updated."))}async handleSaveError(e){await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}hasAllInputDisabled(){return this.props.adminPasswordExpiryContext.isProcessing()}get settings(){return this.props.adminPasswordExpiryContext.getSettings()}get errors(){const e=this.props.adminPasswordExpiryContext.getErrors();return e?.details}render(){const e=this.props.adminPasswordExpiryContext.isSubmitted(),t=this.settings.default_expiry_period||"",a=Boolean(this.settings?.default_expiry_period_toggle);return n.createElement("div",{id:"password-expiry-form-advanced"},n.createElement("form",{className:"form",onSubmit:this.handleFormSubmit},n.createElement("h4",{className:"no-border",id:"expiry-policies-subtitle"},n.createElement(v.c,null,"Expiry Policies")),n.createElement("p",{id:"expiry-policies-description"},n.createElement(v.c,null,"In this section you can choose the default behaviour of password expiry policy for all users.")),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{id:"default-expiry-period",className:"input toggle-switch form-element "+(this.errors?.default_expiry_period&&e?"has-error":"")},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"defaultExpiryPeriodToggle",onChange:this.handleExpiryPeriodToggleClick,checked:a,disabled:this.hasAllInputDisabled(),id:"default-expiry-period-toggle"}),n.createElement("label",{htmlFor:"defaultExpiryPeriodToggle"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Default password expiry period")),n.createElement("span",{className:"info-input"},n.createElement(v.c,null,n.createElement("span",null,"When a user creates a resource, a default expiry date is set to "),n.createElement("input",{type:"text",className:"toggle-input",id:"default-expiry-period-input",name:"default_expiry_period",onChange:this.handleInputChange,maxLength:3,value:t,disabled:this.hasAllInputDisabled()||!a,placeholder:"90"}),n.createElement("span",null,"days"))))),this.errors?.default_expiry_period&&e&&n.createElement("div",{className:"input"},!this.errors.default_expiry_period.required&&n.createElement("div",{className:"default-expiry-period-gte error-message"},n.createElement(v.c,null,"The default password expiry period should be a number between 1 and 999 days.")),this.errors?.default_expiry_period.required&&n.createElement("div",{className:"default-expiry-period-required error-message"},n.createElement(v.c,null,"The default password expiry period should be a valid number.")))),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"policy-override"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"policy_override",onChange:this.handleInputChange,checked:this.settings.policy_override,disabled:this.hasAllInputDisabled(),id:"policy-override-toggle"}),n.createElement("label",{htmlFor:"policy_override"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Policy Override")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Allow users to override the default policy."))))),n.createElement("h4",{className:"no-border",id:"automatic-workflow-subtitle"},n.createElement(v.c,null,"Automatic workflows")),n.createElement("p",{id:"automatic-workflow-description"},n.createElement(v.c,null,"In this section you can choose automatic behaviours.")),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"automatic-expiry"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"automatic_expiry",onChange:this.handleInputChange,checked:this.settings.automatic_expiry,disabled:this.hasAllInputDisabled(),id:"automatic-expiry-toggle"}),n.createElement("label",{htmlFor:"automatic_expiry"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic Expiry")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list."))))),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"automatic-update"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"automatic_update",onChange:this.handleInputChange,checked:this.settings.automatic_update,disabled:this.hasAllInputDisabled(),id:"automatic-update-toggle"}),n.createElement("label",{htmlFor:"automatic_update"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic Update")),n.createElement("span",{className:"info"},a?n.createElement(v.c,null,"Password expiry date is renewed based on the default password expiry period whenever a password is updated."):n.createElement(v.c,null,"Password is no longer marked as expired whenever the password is updated.")))))))}}wr.propTypes={context:o().object,adminPasswordExpiryContext:o().object,actionFeedbackContext:o().object,dialogContext:o().object,t:o().func};const Cr=I(vr(d(g((0,k.Z)("common")(wr)))));class Sr extends n.PureComponent{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{isReady:!1}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Er),await this.props.adminPasswordExpiryContext.findSettings(),this.setState({isReady:!0})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction()}hasAllInputDisabled(){return this.props.adminPasswordExpiryContext.isProcessing()}get canUseAdvancedSettings(){return this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}render(){if(!this.state.isReady)return null;const e=this.props.adminPasswordExpiryContext,t=e.isFeatureToggleEnabled();return n.createElement("div",{className:"row"},n.createElement("div",{className:"password-expiry-settings col8 main-column"},n.createElement("h3",{id:"password-expiry-settings-title"},n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordExpirySettingsToggle",onChange:()=>e.setFeatureToggle(!t),checked:t,disabled:this.hasAllInputDisabled(),id:"passwordExpirySettingsToggle"}),n.createElement("label",{htmlFor:"passwordExpirySettingsToggle"},n.createElement(v.c,null,"Password Expiry")))),e.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"password-expiry-settings-save-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!t&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"No Password Expiry is configured. Enable it to activate automatic password expiration and automatic password expiration reset workflows.")),t&&n.createElement(n.Fragment,null,this.canUseAdvancedSettings?n.createElement(Cr,null):n.createElement("div",{id:"password-expiry-settings-form"},n.createElement("h4",{id:"password-expiry-settings-automatic-workflows",className:"title title--required no-border"},n.createElement(v.c,null,"Automatic workflows")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"passwordExpiryAutomaticExpiry"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic expiry")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.")))),n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"passwordExpiryAutomatiUpdate"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic update")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password is no longer marked as expired whenever the password is updated.")))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"About password expiry")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the password expiry, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/password-expiry",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}Sr.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminPasswordExpiryContext:o().object,t:o().func};const xr=I(O(vr((0,k.Z)("common")(Sr))));class Nr extends n.Component{isMfaSelected(){return F.MFA===this.props.administrationWorkspaceContext.selectedAdministration}isMfaPolicySelected(){return F.MFA_POLICY===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordPoliciesSelected(){return F.PASSWORD_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isUserDirectorySelected(){return F.USER_DIRECTORY===this.props.administrationWorkspaceContext.selectedAdministration}isEmailNotificationsSelected(){return F.EMAIL_NOTIFICATION===this.props.administrationWorkspaceContext.selectedAdministration}isSubscriptionSelected(){return F.SUBSCRIPTION===this.props.administrationWorkspaceContext.selectedAdministration}isInternationalizationSelected(){return F.INTERNATIONALIZATION===this.props.administrationWorkspaceContext.selectedAdministration}isAccountRecoverySelected(){return F.ACCOUNT_RECOVERY===this.props.administrationWorkspaceContext.selectedAdministration}isSmtpSettingsSelected(){return F.SMTP_SETTINGS===this.props.administrationWorkspaceContext.selectedAdministration}isSelfRegistrationSelected(){return F.SELF_REGISTRATION===this.props.administrationWorkspaceContext.selectedAdministration}isSsoSelected(){return F.SSO===this.props.administrationWorkspaceContext.selectedAdministration}isRbacSelected(){return F.RBAC===this.props.administrationWorkspaceContext.selectedAdministration}isUserPassphrasePoliciesSelected(){return F.USER_PASSPHRASE_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordExpirySelected(){return F.PASSWORD_EXPIRY===this.props.administrationWorkspaceContext.selectedAdministration}render(){const e=this.props.administrationWorkspaceContext.administrationWorkspaceAction;return n.createElement("div",{id:"container",className:"page administration"},n.createElement("div",{id:"app",tabIndex:"1000"},n.createElement("div",{className:"header first"},n.createElement(Me,null)),n.createElement("div",{className:"header second"},n.createElement(Fe,null),n.createElement(Ra,{disabled:!0}),n.createElement(ht,{baseUrl:this.props.context.trustedDomain||this.props.context.userSettings.getTrustedDomain(),user:this.props.context.loggedInUser})),n.createElement("div",{className:"header third"},n.createElement("div",{className:"col1 main-action-wrapper"}),n.createElement(e,null)),n.createElement("div",{className:"panel main"},n.createElement("div",null,n.createElement("div",{className:"panel left"},n.createElement(ut,null)),n.createElement("div",{className:"panel middle"},n.createElement(zt,null),n.createElement("div",{className:"grid grid-responsive-12"},this.isMfaSelected()&&n.createElement(Pt,null),this.isMfaPolicySelected()&&n.createElement(io,null),this.isPasswordPoliciesSelected()&&n.createElement(Zo,null),this.isUserDirectorySelected()&&n.createElement(ba,null),this.isEmailNotificationsSelected()&&n.createElement(Na,null),this.isSubscriptionSelected()&&n.createElement(Ha,null),this.isInternationalizationSelected()&&n.createElement(an,null),this.isAccountRecoverySelected()&&n.createElement(ci,null),this.isSmtpSettingsSelected()&&n.createElement(Hi,null),this.isSelfRegistrationSelected()&&n.createElement(ds,null),this.isSsoSelected()&&n.createElement($s,null),this.isRbacSelected()&&n.createElement(zo,null),this.isUserPassphrasePoliciesSelected()&&n.createElement(cr,null),this.isPasswordExpirySelected()&&n.createElement(xr,null)))))))}}Nr.propTypes={context:o().any,administrationWorkspaceContext:o().object};const _r=I(O(Nr));class Rr extends n.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://help.passbolt.com/faq/hosting/why-unsafe"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return n.createElement("footer",null,n.createElement("div",{className:"footer"},n.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&n.createElement("li",{className:"error-message"},n.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Unsafe mode"))),this.termsUrl&&n.createElement("li",null,n.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Terms"))),this.privacyUrl&&n.createElement("li",null,n.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Privacy"))),n.createElement("li",null,n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Credits"))),n.createElement("li",null,this.versions&&n.createElement(De,{message:this.versions,direction:"left"},n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}))),!this.versions&&n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}))))))}}Rr.propTypes={context:o().any,t:o().func};const Ir=I((0,k.Z)("common")(Rr));class Ar extends n.Component{get isMfaEnabled(){return this.props.context.siteSettings.canIUse("multiFactorAuthentication")}get canIUseThemeCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountSettings")}get canIUseMobileCapability(){return this.props.rbacContext.canIUseUiAction(ne)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("mobile")}get canIUseDesktopCapability(){return this.props.rbacContext.canIUseUiAction(ie)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("desktop")}get canIUseAccountRecoveryCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountRecovery")}render(){const e=e=>this.props.location.pathname.endsWith(e);return n.createElement("div",{className:"navigation-secondary navigation-shortcuts"},n.createElement("ul",null,n.createElement("li",null,n.createElement("div",{className:"row "+(e("profile")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsProfileRequested},n.createElement("span",null,n.createElement(v.c,null,"Profile"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("keys")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsKeysRequested},n.createElement("span",null,n.createElement(v.c,null,"Keys inspector"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("passphrase")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsPassphraseRequested},n.createElement("span",null,n.createElement(v.c,null,"Passphrase"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("security-token")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsSecurityTokenRequested},n.createElement("span",null,n.createElement(v.c,null,"Security token"))))))),this.canIUseThemeCapability&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("theme")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsThemeRequested},n.createElement("span",null,n.createElement(v.c,null,"Theme"))))))),this.isMfaEnabled&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("mfa")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsMfaRequested},n.createElement("span",null,n.createElement(v.c,null,"Multi Factor Authentication")),this.props.hasPendingMfaChoice&&n.createElement(Re,{name:"exclamation",baseline:!0})))))),this.canIUseAccountRecoveryCapability&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("account-recovery")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsAccountRecoveryRequested},n.createElement("span",null,n.createElement(v.c,null,"Account Recovery")),this.props.hasPendingAccountRecoveryChoice&&n.createElement(Re,{name:"exclamation",baseline:!0})))))),this.canIUseMobileCapability&&n.createElement("li",{id:"navigation-item-mobile-setup"},n.createElement("div",{className:"row "+(e("mobile")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsMobileRequested},n.createElement("span",null,n.createElement(v.c,null,"Mobile setup"))))))),this.canIUseDesktopCapability&&n.createElement("li",{id:"navigation-item-desktop-setup"},n.createElement("div",{className:"row "+(e("desktop")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsDesktopRequested},n.createElement("span",null,n.createElement(v.c,null,"Desktop app setup")),n.createElement("span",{className:"chips beta"},"beta"))))))))}}Ar.propTypes={context:o().any,navigationContext:o().any,history:o().object,location:o().object,hasPendingAccountRecoveryChoice:o().bool,hasPendingMfaChoice:o().bool,rbacContext:o().any};const Pr=I(Ne((0,N.EN)(J((0,k.Z)("common")(Ar)))));class Dr extends n.Component{get items(){return[n.createElement(Ut,{key:"bread-1",name:this.translate("All users"),onClick:this.props.navigationContext.onGoToUsersRequested}),n.createElement(Ut,{key:"bread-2",name:this.loggedInUserName,onClick:this.props.navigationContext.onGoToUserSettingsProfileRequested}),n.createElement(Ut,{key:"bread-3",name:this.getLastBreadcrumbItemName,onClick:this.onLastBreadcrumbClick.bind(this)})]}get loggedInUserName(){const e=this.props.context.loggedInUser;return e?`${e.profile.first_name} ${e.profile.last_name}`:""}get getLastBreadcrumbItemName(){const e={profile:this.translate("Profile"),passphrase:this.translate("Passphrase"),"security-token":this.translate("Security token"),theme:this.translate("Theme"),mfa:this.translate("Multi Factor Authentication"),duo:this.translate("Multi Factor Authentication"),keys:this.translate("Keys inspector"),mobile:this.translate("Mobile transfer"),"account-recovery":this.translate("Account Recovery"),"smtp-settings":this.translate("Email server")};return e[Object.keys(e).find((e=>this.props.location.pathname.endsWith(e)))]}async onLastBreadcrumbClick(){const e=this.props.location.pathname;this.props.history.push({pathname:e})}get translate(){return this.props.t}render(){return n.createElement(Lt,{items:this.items})}}Dr.propTypes={context:o().any,location:o().object,history:o().object,navigationContext:o().any,t:o().func};const Lr=I((0,N.EN)(J((0,k.Z)("common")(Dr))));class Tr extends n.Component{getProvider(){const e=this.props.match.params.provider;return Object.values(gt).includes(e)?e:(console.warn("The provider should be a valid provider ."),null)}render(){const e=this.getProvider();return n.createElement(n.Fragment,null,!e&&n.createElement(N.l_,{to:"/app/settings/mfa"}),e&&n.createElement("iframe",{id:"setup-mfa",src:`${this.props.context.trustedDomain}/mfa/setup/${e}`,width:"100%",height:"100%"}))}}Tr.propTypes={match:o().any,history:o().any,context:o().any};const Ur=I(Tr);class jr extends n.Component{get isRunningUnderHttps(){const e=this.props.context.trustedDomain;return"https:"===new URL(e).protocol}render(){return n.createElement(n.Fragment,null,this.isRunningUnderHttps&&n.createElement("iframe",{id:"setup-mfa",src:`${this.props.context.trustedDomain}/mfa/setup/select`,width:"100%",height:"100%"}),!this.isRunningUnderHttps&&n.createElement(n.Fragment,null,n.createElement("div",{className:"grid grid-responsive-12 profile-detailed-information"},n.createElement("div",{className:"row"},n.createElement("div",{className:"profile col6 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Multi Factor Authentication")),n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Sorry the multi factor authentication feature is only available in a secure context (HTTPS).")),n.createElement("p",null,n.createElement(v.c,null,"Please contact your administrator to enable multi-factor authentication."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"Contact your administrator with the error details.")),n.createElement("p",null,n.createElement(v.c,null,"Alternatively you can also get in touch with support on community forum or via the paid support channels.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Help site")))))))))}}jr.propTypes={context:o().any};const zr=I(jr);class Mr extends n.Component{get isMfaChoiceRequired(){return this.props.mfaContext.isMfaChoiceRequired()}render(){return n.createElement("div",null,n.createElement("div",{className:"header second"},n.createElement(Fe,null),n.createElement(Ra,{disabled:!0}),n.createElement(ht,{baseUrl:this.props.context.trustedDomain,user:this.props.context.loggedInUser})),n.createElement("div",{className:"header third"}),n.createElement("div",{className:"panel main"},n.createElement("div",{className:"panel left"},n.createElement(Pr,{hasPendingMfaChoice:this.isMfaChoiceRequired})),n.createElement("div",{className:"panel middle"},n.createElement(Lr,null),n.createElement(N.AW,{exact:!0,path:"/app/settings/mfa/:provider",component:Ur}),n.createElement(N.AW,{exact:!0,path:"/app/settings/mfa",component:zr}))))}}Mr.propTypes={context:o().any,mfaContext:o().object};const Or=(0,N.EN)(I(mt(Mr)));class Fr extends n.Component{constructor(e){super(e),this.initEventHandlers(),this.createReferences()}initEventHandlers(){this.handleCloseClick=this.handleCloseClick.bind(this)}createReferences(){this.loginLinkRef=n.createRef()}handleCloseClick(){this.goToLogin()}goToLogin(){this.loginLinkRef.current.click()}get loginUrl(){let e=this.props.context.userSettings&&this.props.context.userSettings.getTrustedDomain();return e=e||this.props.context.trustedDomain,`${e}/auth/login`}render(){return n.createElement(Te,{title:this.props.t("Session Expired"),onClose:this.handleCloseClick,className:"session-expired-dialog"},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Your session has expired, you need to sign in."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("a",{ref:this.loginLinkRef,href:this.loginUrl,className:"primary button",target:"_parent",role:"button",rel:"noopener noreferrer"},n.createElement(v.c,null,"Sign in"))))}}Fr.propTypes={context:o().any,t:o().func};const qr=I((0,N.EN)((0,k.Z)("common")(Fr)));class Wr extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSessionExpiredEvent=this.handleSessionExpiredEvent.bind(this)}componentDidMount(){this.props.context.onExpiredSession(this.handleSessionExpiredEvent)}handleSessionExpiredEvent(){this.props.dialogContext.open(qr)}render(){return n.createElement(n.Fragment,null)}}Wr.propTypes={context:o().any,dialogContext:o().any};const Vr=I(g(Wr));function Br(){return Br=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},close:()=>{}});class Kr extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{announcements:[],show:(e,t)=>{const a=(0,r.Z)();return this.setState({announcements:[...this.state.announcements,{key:a,Announcement:e,AnnouncementProps:t}]}),a},close:async e=>await this.setState({announcements:this.state.announcements.filter((t=>e!==t.key))})}}render(){return n.createElement(Gr.Provider,{value:this.state},this.props.children)}}function Hr(e){return class extends n.Component{render(){return n.createElement(Gr.Consumer,null,(t=>n.createElement(e,Br({announcementContext:t},this.props))))}}}Kr.displayName="AnnouncementContextProvider",Kr.propTypes={children:o().any};class $r extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}render(){return n.createElement("div",{className:`${this.props.className} announcement`},n.createElement("div",{className:"announcement-content"},this.props.canClose&&n.createElement("button",{type:"button",className:"announcement-close dialog-close button-transparent",onClick:this.handleClose},n.createElement(Re,{name:"close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"Close"))),this.props.children))}}$r.propTypes={children:o().node,className:o().string,canClose:o().bool,onClose:o().func};const Zr=(0,k.Z)("common")($r);class Yr extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!0},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription key will expire")," ",Ga(this.props.expiry,this.props.t,this.props.context.locale),".",n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}Yr.propTypes={context:o().any,expiry:o().string,navigationContext:o().any,onClose:o().func,t:o().func};const Jr=I(J(Hr((0,k.Z)("common")(Yr))));class Qr extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!1},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription requires your attention. The stability of the application is at risk."),n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}Qr.propTypes={navigationContext:o().any,onClose:o().func,i18n:o().any};const Xr=J(Hr((0,k.Z)("common")(Qr)));class el extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!1},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription key is not valid. The stability of the application is at risk."),n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}el.propTypes={navigationContext:o().any,onClose:o().func,i18n:o().any};const tl=J(Hr((0,k.Z)("common")(el)));class al extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleAnnouncementSubscriptionEvent=this.handleAnnouncementSubscriptionEvent.bind(this)}componentDidMount(){this.handleAnnouncementSubscriptionEvent()}componentDidUpdate(e){this.handleRefreshSubscriptionAnnouncement(e.context.refreshSubscriptionAnnouncement)}async handleRefreshSubscriptionAnnouncement(e){this.props.context.refreshSubscriptionAnnouncement!==e&&this.props.context.refreshSubscriptionAnnouncement&&(await this.handleAnnouncementSubscriptionEvent(),this.props.context.setContext({refreshSubscriptionAnnouncement:null}))}async handleAnnouncementSubscriptionEvent(){this.hideSubscriptionAnnouncement();try{const e=await this.props.context.onGetSubscriptionKeyRequested();this.isSubscriptionGoingToExpire(e.expiry)&&this.props.announcementContext.show(Jr,{expiry:e.expiry})}catch(e){"PassboltSubscriptionError"===e.name?this.props.announcementContext.show(Xr):this.props.announcementContext.show(tl)}}hideSubscriptionAnnouncement(){const e=[Jr,Xr,tl];this.props.announcementContext.announcements.forEach((t=>{e.some((e=>e===t.Announcement))&&this.props.announcementContext.close(t.key)}))}isSubscriptionGoingToExpire(e){return Ia.ou.fromISO(e)n.createElement(t,il({key:e,onClose:()=>this.close(e)},a)))),this.props.children)}}sl.propTypes={announcementContext:o().any,children:o().any};const ol=Hr(sl);class rl{constructor(e){this.setToken(e)}setToken(e){this.validate(e),this.token=e}validate(e){if(!e)throw new TypeError("CSRF token cannot be empty.");if("string"!=typeof e)throw new TypeError("CSRF token should be a string.")}toFetchHeaders(){return{"X-CSRF-Token":this.token}}static getToken(){const e=document.cookie;if(!e)return;const t=e.split("; ");if(!t)return;const a=t.find((e=>e.startsWith("csrfToken")));if(!a)return;const n=a.split("=");return n&&2===n.length?n[1]:void 0}}class ll{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.")}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setCsrfToken(e){if(!e)throw new TypeError("ApiClientOption csrfToken is required.");if("string"==typeof e)this.csrfToken=new rl(e);else{if(!(e instanceof rl))throw new TypeError("ApiClientOption csrfToken should be a string or a valid CsrfToken.");this.csrfToken=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}getHeaders(){if(this.csrfToken)return this.csrfToken.toFetchHeaders()}}class cl extends Error{constructor(e,t={}){super(e),this.name="PassboltSubscriptionError",this.subscription=t}}const ml=cl;class dl extends bo{constructor(e){super(e,dl.RESOURCE_NAME)}static get RESOURCE_NAME(){return"/rbacs/me"}static getSupportedContainOptions(){return["action","ui_action"]}async findMe(e){const t=e?this.formatContainOptions(e,dl.getSupportedContainOptions()):null;return(await this.apiClient.findAll(t)).body}}const hl=dl;class pl extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.authService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName("auth"),this.apiClient=new at(this.apiClientOptions)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new Ye("An unexpected error happened during the legacy logout process",{code:t.status})}async getServerKey(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/verify`,{}),t=await this.apiClient.fetchAndHandleResponse("GET",e);return this.mapGetServerKey(t.body)}mapGetServerKey(e){const{keydata:t,fingerprint:a}=e;return{armored_key:t,fingerprint:a}}async verify(e,t){const a=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/verify`,{}),n=new FormData;n.append("data[gpg_auth][keyid]",e),n.append("data[gpg_auth][server_verify_token]",t);const i=this.apiClient.buildFetchOptions();let s,o;i.method="POST",i.body=n,delete i.headers["content-type"];try{s=await fetch(a.toString(),i)}catch(e){throw new et(e.message)}try{o=await s.json()}catch(e){throw new Qe}if(!s.ok){const e=o.header.message;throw new Ye(e,{code:s.status,body:o.body})}return s}}(this.getApiClientOptions())}async componentDidMount(){await this.getLoggedInUser(),await this.getSiteSettings(),await this.getRbacs(),this.initLocale(),this.removeSplashScreen()}componentWillUnmount(){clearTimeout(this.state.onExpiredSession)}get defaultState(){return{name:"api",loggedInUser:null,rbacs:null,siteSettings:null,trustedDomain:this.baseUrl,basename:new URL(this.baseUrl).pathname,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,displayTestUserDirectoryDialogProps:{userDirectoryTestResult:null},setContext:e=>{this.setState(e)},onLogoutRequested:()=>this.onLogoutRequested(),onCheckIsAuthenticatedRequested:()=>this.onCheckIsAuthenticatedRequested(),onExpiredSession:this.onExpiredSession.bind(this),onGetSubscriptionKeyRequested:()=>this.onGetSubscriptionKeyRequested(),onRefreshLocaleRequested:this.onRefreshLocaleRequested.bind(this)}}get isReady(){return null!==this.state.loggedInUser&&null!==this.state.rbacs&&null!==this.state.siteSettings&&null!==this.state.locale}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ll).setBaseUrl(this.state.trustedDomain).setCsrfToken(rl.getToken())}async getLoggedInUser(){const e=this.getApiClientOptions().setResourceName("users"),t=new at(e),a=(await t.get("me")).body;this.setState({loggedInUser:a})}async getRbacs(){let e=[];if(this.state.siteSettings.canIUse("rbacs")){const t=this.getApiClientOptions(),a=new hl(t);e=await a.findMe({ui_action:!0})}const t=new go(e,!0);this.setState({rbacs:t})}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new at(e),a=await t.findAll();await this.setState({siteSettings:new Kn(a.body)})}async initLocale(){const e=await this.getUserLocale();if(e)return this.setState({locale:e.locale});const t=this.state.siteSettings.locale;return this.setState({locale:t})}async getUserLocale(){const e=(await this.getUserSettings()).find((e=>"locale"===e.property));if(e)return this.state.siteSettings.supportedLocales.find((t=>t.locale===e.value))}async getUserSettings(){const e=this.getApiClientOptions().setResourceName("account/settings"),t=new at(e);return(await t.findAll()).body}removeSplashScreen(){document.getElementsByTagName("html")[0].classList.remove("launching")}async onLogoutRequested(){await this.authService.logout(),window.location.href=this.state.trustedDomain}async onCheckIsAuthenticatedRequested(){try{const e=this.getApiClientOptions().setResourceName("auth"),t=new at(e);return await t.get("is-authenticated"),!0}catch(e){if(e instanceof Ye&&401===e.data.code)return!1;throw e}}onExpiredSession(e){this.scheduledCheckIsAuthenticatedTimeout=setTimeout((async()=>{await this.onCheckIsAuthenticatedRequested()?this.onExpiredSession(e):e()}),6e4)}async onGetSubscriptionKeyRequested(){try{const e=this.getApiClientOptions().setResourceName("ee/subscription"),t=new at(e);return(await t.get("key")).body}catch(e){if(e instanceof Ye&&e.data&&402===e.data.code){const t=e.data.body;throw new ml(e.message,t)}throw e}}onRefreshLocaleRequested(e){this.state.siteSettings.setLocale(e),this.initLocale()}render(){return n.createElement(A.Provider,{value:this.state},this.isReady&&this.props.children)}}pl.propTypes={children:o().any};const ul=pl;var gl=a(2092),bl=a(7031),fl=a(5538);class yl extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await gl.ZP.use(bl.Db).use(fl.Z).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json"},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}get supportedLocales(){return this.props.context.siteSettings?.supportedLocales?this.props.context.siteSettings?.supportedLocales.map((e=>e.locale)):[this.locale]}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await gl.ZP.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return n.createElement(n.Fragment,null,this.isReady&&this.props.children)}}yl.propTypes={context:o().any,loadingPath:o().any,children:o().any};const vl=I(yl);class kl{constructor(){this.baseUrl=this.getBaseUrl()}async getOrganizationAccountRecoverySettings(){const e=this.getApiClientOptions().setResourceName("account-recovery/organization-policies"),t=new at(e);return(await t.findAll()).body}getBaseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ll).setBaseUrl(this.baseUrl).setCsrfToken(this.getCsrfToken())}getCsrfToken(){const e=document.cookie;if(!e)return;const t=e.split("; ");if(!t)return;const a=t.find((e=>e.startsWith("csrfToken")));if(!a)return;const n=a.split("=");return n&&2===n.length?n[1]:void 0}}class El extends n.Component{render(){const e=new kl;return n.createElement(ul,null,n.createElement(A.Consumer,null,(t=>n.createElement(vl,{loadingPath:`${t.trustedDomain}/locales/{{lng}}/{{ns}}.json`},n.createElement(xe,null,n.createElement(Be,{accountRecoveryUserService:e},n.createElement(ct,null,n.createElement(m,null,n.createElement(u,null,n.createElement(Kr,null,n.createElement(y,null,n.createElement(S,null),n.createElement(Vr,null),t.loggedInUser&&"admin"===t.loggedInUser.role.name&&t.siteSettings.canIUse("ee")&&n.createElement(nl,null),n.createElement(x.VK,{basename:t.basename},n.createElement(Y,null,n.createElement(N.rs,null,n.createElement(N.AW,{exact:!0,path:["/app/administration/subscription","/app/administration/account-recovery","/app/administration/password-policies","/app/administration/user-passphrase-policies","/app/administration/password-expiry"]}),n.createElement(N.AW,{path:"/app/administration"},n.createElement(z,null,n.createElement(Ti,null,n.createElement(K,null),n.createElement(ol,null),n.createElement(ta,null,n.createElement(ns,null,n.createElement(V,null),n.createElement(kt,null,n.createElement(Xs,null,n.createElement(Ea,null,n.createElement(Ja,null,n.createElement(So,null,n.createElement(_r,null))))))))))),n.createElement(N.AW,{path:["/app/settings/mfa"]},n.createElement(V,null),n.createElement(K,null),n.createElement(ol,null),n.createElement("div",{id:"container",className:"page settings"},n.createElement("div",{id:"app",className:"app",tabIndex:"1000"},n.createElement("div",{className:"header first"},n.createElement(Me,null)),n.createElement(Or,null))))))),n.createElement(Ir,null))))))))))))}}const wl=El,Cl=document.createElement("div");document.body.appendChild(Cl),i.render(n.createElement(wl,null),Cl)}},i={};function s(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}};return n[e].call(a.exports,a,a.exports,s),a.exports}s.m=n,e=[],s.O=(t,a,n,i)=>{if(!a){var o=1/0;for(m=0;m=i)&&Object.keys(s.O).every((e=>s.O[e](a[l])))?a.splice(l--,1):(r=!1,i0&&e[m-1][2]>i;m--)e[m]=e[m-1];e[m]=[a,n,i]},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var i=Object.create(null);s.r(i);var o={};t=t||[null,a({}),a([]),a(a)];for(var r=2&n&&e;"object"==typeof r&&!~t.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,s.d(i,o),i},s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.j=978,(()=>{var e={978:0};s.O.j=t=>0===e[t];var t=(t,a)=>{var n,i,[o,r,l]=a,c=0;if(o.some((t=>0!==e[t]))){for(n in r)s.o(r,n)&&(s.m[n]=r[n]);if(l)var m=l(s)}for(t&&t(a);cs(9494)));o=s.O(o)})(); \ No newline at end of file +(()=>{"use strict";var e,t,a,n={9494:(e,t,a)=>{var n=a(7294),i=a(3935),s=a(5697),o=a.n(s),r=a(2045);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},displayError:()=>{},remove:()=>{}});class m extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{feedbacks:[],displaySuccess:this.displaySuccess.bind(this),displayError:this.displayError.bind(this),remove:this.remove.bind(this)}}async displaySuccess(e){await this.setState({feedbacks:[...this.state.feedbacks,{id:(0,r.Z)(),type:"success",message:e}]})}async displayError(e){await this.setState({feedbacks:[...this.state.feedbacks,{id:(0,r.Z)(),type:"error",message:e}]})}async remove(e){await this.setState({feedbacks:this.state.feedbacks.filter((t=>e.id!==t.id))})}render(){return n.createElement(c.Provider,{value:this.state},this.props.children)}}function d(e){return class extends n.Component{render(){return n.createElement(c.Consumer,null,(t=>n.createElement(e,l({actionFeedbackContext:t},this.props))))}}}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},close:()=>{}});class u extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{dialogs:[],open:(e,t)=>{const a=(0,r.Z)();return this.setState({dialogs:[...this.state.dialogs,{key:a,Dialog:e,DialogProps:t}]}),a},close:e=>this.setState({dialogs:this.state.dialogs.filter((t=>e!==t.key))})}}render(){return n.createElement(p.Provider,{value:this.state},this.props.children)}}function g(e){return class extends n.Component{render(){return n.createElement(p.Consumer,null,(t=>n.createElement(e,h({dialogContext:t},this.props))))}}}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},hide:()=>{}});class y extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{contextualMenus:[],show:(e,t)=>this.setState({contextualMenus:[...this.state.contextualMenus,{ContextualMenuComponent:e,componentProps:t}]}),hide:e=>this.setState({contextualMenus:this.state.contextualMenus.filter(((t,a)=>a!==e))})}}render(){return n.createElement(f.Provider,{value:this.state},this.props.children)}}y.displayName="ContextualMenuContextProvider",y.propTypes={children:o().any};var v=a(9116),k=a(570);class E extends n.Component{static get DEFAULT_WAIT_TO_CLOSE_TIME_IN_MS(){return 500}constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{shouldRender:!0,isPersisted:!1,timeoutId:null}}componentDidMount(){this.displayWithTimer(this.props.displayTimeInMs)}componentDidUpdate(e){const t=e&&e.feedback.id!==this.props.feedback.id,a=e&&this.props.displayTimeInMs&&e.displayTimeInMs!==this.props.displayTimeInMs;t?(this.setState({shouldRender:!0}),this.displayWithTimer(this.props.displayTimeInMs)):a&&this.updateTimer(this.props.displayTimeInMs)}componentWillUnmount(){this.state.timeoutId&&clearTimeout(this.state.timeoutId)}bindCallbacks(){this.persist=this.persist.bind(this),this.displayWithTimer=this.displayWithTimer.bind(this),this.close=this.close.bind(this)}displayWithTimer(e){this.state.timeoutId&&clearTimeout(this.state.timeoutId);const t=setTimeout(this.close,e),a=Date.now();this.setState({timeoutId:t,time:a})}updateTimer(e){const t=e-(Date.now()-this.state.time);t>0?this.displayWithTimer(t):(clearTimeout(this.state.timeoutId),this.close())}persist(){this.state.timeoutId&&!this.state.isPersisted&&(clearTimeout(this.state.timeoutId),this.setState({isPersisted:!0}))}close(){this.setState({shouldRender:!1}),setTimeout(this.props.onClose,E.DEFAULT_WAIT_TO_CLOSE_TIME_IN_MS)}render(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"notification",onMouseOver:this.persist,onMouseLeave:this.displayWithTimer,onClick:this.close},n.createElement("div",{className:`message animated ${this.state.shouldRender?"fadeInUp":"fadeOutUp"} ${this.props.feedback.type}`},n.createElement("span",{className:"content"},n.createElement("strong",null,"success"===this.props.feedback.type&&n.createElement(n.Fragment,null,n.createElement(v.c,null,"Success"),": "),"error"===this.props.feedback.type&&n.createElement(n.Fragment,null,n.createElement(v.c,null,"Error"),": ")),this.props.feedback.message))))}}E.propTypes={feedback:o().object,onClose:o().func,displayTimeInMs:o().number};const w=(0,k.Z)("common")(E);class C extends n.Component{constructor(e){super(e),this.bindCallbacks()}static get DEFAULT_DISPLAY_TIME_IN_MS(){return 5e3}static get DEFAULT_DISPLAY_MIN_TIME_IN_MS(){return 1200}bindCallbacks(){this.close=this.close.bind(this)}get feedbackToDisplay(){return this.props.actionFeedbackContext.feedbacks[0]}get length(){return this.props.actionFeedbackContext.feedbacks.length}get hasFeedbacks(){return this.length>0}async close(e){await this.props.actionFeedbackContext.remove(e)}render(){const e=this.length>1?C.DEFAULT_DISPLAY_MIN_TIME_IN_MS:C.DEFAULT_DISPLAY_TIME_IN_MS;return n.createElement(n.Fragment,null,this.hasFeedbacks&&n.createElement("div",{className:"notification-container"},n.createElement(w,{feedback:this.feedbackToDisplay,onClose:()=>this.close(this.feedbackToDisplay),displayTimeInMs:e})))}}C.propTypes={actionFeedbackContext:o().any};const S=d(C);var x=a(3727),N=a(6550);function _(){return _=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(e,_({context:t},this.props))))}}}const A=R;function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},remove:()=>{}});class L extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{counter:0,add:()=>{this.setState({counter:this.state.counter+1})},remove:()=>{this.setState({counter:Math.min(this.state.counter-1,0)})}}}render(){return n.createElement(D.Provider,{value:this.state},this.props.children)}}function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},resetDisplayAdministrationWorkspaceAction:()=>{},onUpdateSubscriptionKeyRequested:()=>{},onSaveEnabled:()=>{},onMustSaveSettings:()=>{},onMustEditSubscriptionKey:()=>{},onMustRefreshSubscriptionKey:()=>{},onResetActionsSettings:()=>{}});class j extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{selectedAdministration:F.NONE,can:{save:!1},must:{save:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1},administrationWorkspaceAction:()=>n.createElement(n.Fragment,null),setDisplayAdministrationWorkspaceAction:this.setDisplayAdministrationWorkspaceAction.bind(this),resetDisplayAdministrationWorkspaceAction:this.resetDisplayAdministrationWorkspaceAction.bind(this),onUpdateSubscriptionKeyRequested:this.onUpdateSubscriptionKeyRequested.bind(this),onSaveEnabled:this.handleSaveEnabled.bind(this),onMustSaveSettings:this.handleMustSaveSettings.bind(this),onMustEditSubscriptionKey:this.handleMustEditSubscriptionKey.bind(this),onMustRefreshSubscriptionKey:this.handleMustRefreshSubscriptionKey.bind(this),onResetActionsSettings:this.handleResetActionsSettings.bind(this)}}componentDidMount(){this.handleAdministrationMenuRouteChange()}componentDidUpdate(e){this.handleRouteChange(e.location)}handleSaveEnabled(){this.setState({can:{...this.state.can,save:!0}})}handleMustSaveSettings(){this.setState({must:{...this.state.must,save:!0}})}handleMustEditSubscriptionKey(){this.setState({must:{...this.state.must,editSubscriptionKey:!0}})}handleMustRefreshSubscriptionKey(){this.setState({must:{...this.state.must,refreshSubscriptionKey:!0}})}handleResetActionsSettings(){this.setState({must:{save:!1,test:!1,synchronize:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1}})}handleRouteChange(e){this.props.location.key!==e.key&&this.handleAdministrationMenuRouteChange()}handleAdministrationMenuRouteChange(){const e=this.props.location.pathname.includes("mfa"),t=this.props.location.pathname.includes("mfa-policy"),a=this.props.location.pathname.includes("password-policies"),n=this.props.location.pathname.includes("users-directory"),i=this.props.location.pathname.includes("email-notification"),s=this.props.location.pathname.includes("subscription"),o=this.props.location.pathname.includes("internationalization"),r=this.props.location.pathname.includes("account-recovery"),l=this.props.location.pathname.includes("smtp-settings"),c=this.props.location.pathname.includes("self-registration"),m=this.props.location.pathname.includes("sso"),d=this.props.location.pathname.includes("rbac"),h=this.props.location.pathname.includes("user-passphrase-policies"),p=this.props.location.pathname.includes("password-expiry");let u;t?u=F.MFA_POLICY:a?u=F.PASSWORD_POLICIES:e?u=F.MFA:n?u=F.USER_DIRECTORY:i?u=F.EMAIL_NOTIFICATION:s?u=F.SUBSCRIPTION:o?u=F.INTERNATIONALIZATION:r?u=F.ACCOUNT_RECOVERY:l?u=F.SMTP_SETTINGS:c?u=F.SELF_REGISTRATION:m?u=F.SSO:d?u=F.RBAC:h?u=F.USER_PASSPHRASE_POLICIES:p&&(u=F.PASSWORD_EXPIRY),this.setState({selectedAdministration:u,can:{save:!1,test:!1,synchronize:!1},must:{save:!1,test:!1,synchronize:!1,editSubscriptionKey:!1,refreshSubscriptionKey:!1}})}setDisplayAdministrationWorkspaceAction(e){this.setState({administrationWorkspaceAction:e})}resetDisplayAdministrationWorkspaceAction(){this.setState({administrationWorkspaceAction:()=>n.createElement(n.Fragment,null)})}onUpdateSubscriptionKeyRequested(e){return this.props.context.port.request("passbolt.subscription.update",e)}render(){return n.createElement(U.Provider,{value:this.state},this.props.children)}}j.displayName="AdministrationWorkspaceContextProvider",j.propTypes={context:o().object,children:o().any,location:o().object,match:o().object,history:o().object,loadingContext:o().object};const z=(0,N.EN)(I((M=j,class extends n.Component{render(){return n.createElement(D.Consumer,null,(e=>n.createElement(M,P({loadingContext:e},this.props))))}})));var M;function O(e){return class extends n.Component{render(){return n.createElement(U.Consumer,null,(t=>n.createElement(e,T({administrationWorkspaceContext:t},this.props))))}}}const F={NONE:"NONE",MFA:"MFA",MFA_POLICY:"MFA-POLICY",PASSWORD_POLICIES:"PASSWORD-POLICIES",USER_DIRECTORY:"USER-DIRECTORY",EMAIL_NOTIFICATION:"EMAIL-NOTIFICATION",SUBSCRIPTION:"SUBSCRIPTION",INTERNATIONALIZATION:"INTERNATIONALIZATION",ACCOUNT_RECOVERY:"ACCOUNT-RECOVERY",SMTP_SETTINGS:"SMTP-SETTINGS",SELF_REGISTRATION:"SELF-REGISTRATION",SSO:"SSO",RBAC:"RBAC",USER_PASSPHRASE_POLICIES:"USER-PASSPHRASE-POLICIES",PASSWORD_EXPIRY:"PASSWORD-EXPIRY"};function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;tt===e));t?.DialogProps?.onClose&&t.DialogProps.onClose(),this.props.dialogContext.close(e)}render(){return n.createElement(n.Fragment,null,this.props.dialogContext.dialogs.map((({key:e,Dialog:t,DialogProps:a})=>n.createElement(t,q({key:e},a,{onClose:()=>this.close(e)})))),this.props.children)}}W.propTypes={dialogContext:o().any,children:o().any};const V=g(W);function B(){return B=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(e.ContextualMenuComponent,B({key:t,hide:()=>this.handleHide(t)},e.componentProps)))))}}G.propTypes={contextualMenuContext:o().any};const K=function(e){return class extends n.Component{render(){return n.createElement(f.Consumer,null,(t=>n.createElement(e,b({contextualMenuContext:t},this.props))))}}}(G);function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},onGoToAdministrationSelfRegistrationRequested:()=>{},onGoToAdministrationMfaRequested:()=>{},onGoToAdministrationUsersDirectoryRequested:()=>{},onGoToAdministrationEmailNotificationsRequested:()=>{},onGoToAdministrationSubscriptionRequested:()=>{},onGoToAdministrationInternationalizationRequested:()=>{},onGoToAdministrationAccountRecoveryRequested:()=>{},onGoToAdministrationSmtpSettingsRequested:()=>{},onGoToAdministrationSsoRequested:()=>{},onGoToAdministrationPasswordPoliciesRequested:()=>{},onGoToAdministrationUserPassphrasePoliciesRequested:()=>{},onGoToAdministrationPasswordExpirySettingsRequested:()=>{},onGoToPasswordsRequested:()=>{},onGoToUsersRequested:()=>{},onGoToUserSettingsProfileRequested:()=>{},onGoToUserSettingsPassphraseRequested:()=>{},onGoToUserSettingsSecurityTokenRequested:()=>{},onGoToUserSettingsThemeRequested:()=>{},onGoToUserSettingsMfaRequested:()=>{},onGoToUserSettingsKeysRequested:()=>{},onGoToUserSettingsMobileRequested:()=>{},onGoToUserSettingsDesktopRequested:()=>{},onGoToUserSettingsAccountRecoveryRequested:()=>{},onGoToNewTab:()=>{},onGoToAdministrationRbacsRequested:()=>{}});class Z extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{onGoToNewTab:this.onGoToNewTab.bind(this),onGoToAdministrationRequested:this.onGoToAdministrationRequested.bind(this),onGoToAdministrationMfaRequested:this.onGoToAdministrationMfaRequested.bind(this),onGoToAdministrationUsersDirectoryRequested:this.onGoToAdministrationUsersDirectoryRequested.bind(this),onGoToAdministrationEmailNotificationsRequested:this.onGoToAdministrationEmailNotificationsRequested.bind(this),onGoToAdministrationSubscriptionRequested:this.onGoToAdministrationSubscriptionRequested.bind(this),onGoToAdministrationInternationalizationRequested:this.onGoToAdministrationInternationalizationRequested.bind(this),onGoToAdministrationAccountRecoveryRequested:this.onGoToAdministrationAccountRecoveryRequested.bind(this),onGoToAdministrationSmtpSettingsRequested:this.onGoToAdministrationSmtpSettingsRequested.bind(this),onGoToAdministrationSelfRegistrationRequested:this.onGoToAdministrationSelfRegistrationRequested.bind(this),onGoToAdministrationSsoRequested:this.onGoToAdministrationSsoRequested.bind(this),onGoToAdministrationMfaPolicyRequested:this.onGoToAdministrationMfaPolicyRequested.bind(this),onGoToAdministrationPasswordPoliciesRequested:this.onGoToAdministrationPasswordPoliciesRequested.bind(this),onGoToAdministrationUserPassphrasePoliciesRequested:this.onGoToAdministrationUserPassphrasePoliciesRequested.bind(this),onGoToAdministrationPasswordExpirySettingsRequested:this.onGoToAdministrationPasswordExpirySettingsRequested.bind(this),onGoToPasswordsRequested:this.onGoToPasswordsRequested.bind(this),onGoToUsersRequested:this.onGoToUsersRequested.bind(this),onGoToUserSettingsProfileRequested:this.onGoToUserSettingsProfileRequested.bind(this),onGoToUserSettingsPassphraseRequested:this.onGoToUserSettingsPassphraseRequested.bind(this),onGoToUserSettingsSecurityTokenRequested:this.onGoToUserSettingsSecurityTokenRequested.bind(this),onGoToUserSettingsThemeRequested:this.onGoToUserSettingsThemeRequested.bind(this),onGoToUserSettingsMfaRequested:this.onGoToUserSettingsMfaRequested.bind(this),onGoToUserSettingsKeysRequested:this.onGoToUserSettingsKeysRequested.bind(this),onGoToUserSettingsMobileRequested:this.onGoToUserSettingsMobileRequested.bind(this),onGoToUserSettingsDesktopRequested:this.onGoToUserSettingsDesktopRequested.bind(this),onGoToUserSettingsAccountRecoveryRequested:this.onGoToUserSettingsAccountRecoveryRequested.bind(this),onGoToAdministrationRbacsRequested:this.onGoToAdministrationRbacsRequested.bind(this)}}async goTo(e,t){if(e===this.props.context.name)await this.props.history.push({pathname:t});else{const e=`${this.props.context.userSettings?this.props.context.userSettings.getTrustedDomain():this.props.context.trustedDomain}${t}`;window.open(e,"_parent","noopener,noreferrer")}}onGoToNewTab(e){window.open(e,"_blank","noopener,noreferrer")}async onGoToAdministrationRequested(){let e="/app/administration/email-notification";this.isMfaEnabled?e="/app/administration/mfa":this.isUserDirectoryEnabled?e="/app/administration/users-directory":this.isSmtpSettingsEnable?e="/app/administration/smtp-settings":this.isSelfRegistrationEnable?e="/app/administration/self-registation":this.isPasswordPoliciesEnable?e="/app/administration/password-policies":this.isUserPassphrasePoliciesEnable?e="/app/administration/user-passphrase-policies":this.isPasswordExpiryEnable&&(e="/app/administration/password-expiry"),await this.goTo("api",e)}async onGoToAdministrationMfaRequested(){await this.goTo("api","/app/administration/mfa")}async onGoToAdministrationMfaPolicyRequested(){await this.goTo("api","/app/administration/mfa-policy")}async onGoToAdministrationPasswordPoliciesRequested(){await this.goTo("browser-extension","/app/administration/password-policies")}async onGoToAdministrationSelfRegistrationRequested(){await this.goTo("api","/app/administration/self-registration")}async onGoToAdministrationUsersDirectoryRequested(){await this.goTo("api","/app/administration/users-directory")}async onGoToAdministrationEmailNotificationsRequested(){await this.goTo("api","/app/administration/email-notification")}async onGoToAdministrationSmtpSettingsRequested(){await this.goTo("api","/app/administration/smtp-settings")}async onGoToAdministrationSubscriptionRequested(){await this.goTo("browser-extension","/app/administration/subscription")}async onGoToAdministrationInternationalizationRequested(){await this.goTo("api","/app/administration/internationalization")}async onGoToAdministrationAccountRecoveryRequested(){await this.goTo("browser-extension","/app/administration/account-recovery")}async onGoToAdministrationSsoRequested(){await this.goTo("browser-extension","/app/administration/sso")}async onGoToAdministrationRbacsRequested(){await this.goTo("api","/app/administration/rbacs")}async onGoToAdministrationUserPassphrasePoliciesRequested(){await this.goTo("browser-extension","/app/administration/user-passphrase-policies")}async onGoToAdministrationPasswordExpirySettingsRequested(){await this.goTo("browser-extension","/app/administration/password-expiry")}get isMfaEnabled(){const e=this.props.context.siteSettings;return e&&e.canIUse("multiFactorAuthentication")}get isUserDirectoryEnabled(){const e=this.props.context.siteSettings;return e&&e.canIUse("directorySync")}get isSmtpSettingsEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("smtpSettings")}get isSelfRegistrationEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("selfRegistration")}get isPasswordPoliciesEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("passwordPoliciesUpdate")}get isUserPassphrasePoliciesEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("userPassphrasePolicies")}get isPasswordExpiryEnable(){const e=this.props.context.siteSettings;return e&&e.canIUse("passwordExpiry")}async onGoToPasswordsRequested(){await this.goTo("browser-extension","/app/passwords")}async onGoToUsersRequested(){await this.goTo("browser-extension","/app/users")}async onGoToUserSettingsProfileRequested(){await this.goTo("browser-extension","/app/settings/profile")}async onGoToUserSettingsPassphraseRequested(){await this.goTo("browser-extension","/app/settings/passphrase")}async onGoToUserSettingsSecurityTokenRequested(){await this.goTo("browser-extension","/app/settings/security-token")}async onGoToUserSettingsThemeRequested(){await this.goTo("browser-extension","/app/settings/theme")}async onGoToUserSettingsMfaRequested(){let e="api";window.chrome?.webview&&(e="browser-extension"),await this.goTo(e,"/app/settings/mfa")}async onGoToUserSettingsDuoSetupRequested(){let e="api";window.chrome?.webview&&(e="browser-extension"),await this.goTo(e,"/app/settings/mfa")}async onGoToUserSettingsKeysRequested(){await this.goTo("browser-extension","/app/settings/keys")}async onGoToUserSettingsMobileRequested(){await this.goTo("browser-extension","/app/settings/mobile")}async onGoToUserSettingsDesktopRequested(){await this.goTo("browser-extension","/app/settings/desktop")}async onGoToUserSettingsAccountRecoveryRequested(){await this.goTo("browser-extension","/app/settings/account-recovery")}render(){return n.createElement($.Provider,{value:this.state},this.props.children)}}Z.displayName="NavigationContextProvider",Z.propTypes={context:o().object,children:o().any,location:o().object,match:o().object,history:o().object};const Y=(0,N.EN)(I(Z));function J(e){return class extends n.Component{render(){return n.createElement($.Consumer,null,(t=>n.createElement(e,H({navigationContext:t},this.props))))}}}class Q{}class X extends Q{static execute(){return!0}}class ee extends Q{static execute(){return!1}}const te="Folders.use",ae="Users.viewWorkspace",ne="Mobile.transfer",ie="Desktop.transfer",se="Allow",oe="Deny",re={[se]:X,[oe]:ee},le={[te]:re[se]},ce={[te]:re[se]};class me{static getByRbac(e){return re[e.controlFunction]||(console.warn(`Could not find control function for the given rbac entity (${e.id})`),ee)}static getDefaultForAdminAndUiAction(e){return le[e]||X}static getDefaultForUserAndUiAction(e){return ce[e]||X}}class de{constructor(e){this._props=JSON.parse(JSON.stringify(e))}toDto(){return JSON.parse(JSON.stringify(this))}toJSON(){return this._props}_hasProp(e){if(!e.includes(".")){const t=de._normalizePropName(e);return Object.prototype.hasOwnProperty.call(this._props,t)}try{return this._getPropByPath(e),!0}catch(e){return!1}}_getPropByPath(e){return de._normalizePropName(e).split(".").reduce(((e,t)=>{if(Object.prototype.hasOwnProperty.call(e,t))return e[t];throw new Error}),this._props)}static _normalizePropName(e){return e.replace(/([A-Z])/g,((e,t)=>`_${t.toLowerCase()}`)).replace(/\._/,".").replace(/^_/,"").replace(/^\./,"")}}const he=de;class pe extends Error{constructor(e="Entity validation error."){super(e),this.name="EntityValidationError",this.details={}}addError(e,t,a){if("string"!=typeof e)throw new TypeError("EntityValidationError addError property should be a string.");if("string"!=typeof t)throw new TypeError("EntityValidationError addError rule should be a string.");if("string"!=typeof a)throw new TypeError("EntityValidationError addError message should be a string.");Object.prototype.hasOwnProperty.call(this.details,e)||(this.details[e]={}),this.details[e][t]=a}getError(e,t){if(!this.hasError(e,t))return null;const a=this.details[e];return t?a[t]:a}hasError(e,t){if("string"!=typeof e)throw new TypeError("EntityValidationError hasError property should be a string.");const a=this.details&&Object.prototype.hasOwnProperty.call(this.details,e);if(!t)return a;if("string"!=typeof t)throw new TypeError("EntityValidationError hasError rule should be a string.");return Object.prototype.hasOwnProperty.call(this.details[e],t)}hasErrors(){return Object.keys(this.details).length>0}}const ue=pe;var ge=a(8966),be=a.n(ge);class fe{static validateSchema(e,t){if(!t)throw new TypeError(`Could not validate entity ${e}. No schema for entity ${e}.`);if(!t.type)throw new TypeError(`Could not validate entity ${e}. Type missing.`);if("array"!==t.type){if("object"===t.type){if(!t.required||!Array.isArray(t.required))throw new TypeError(`Could not validate entity ${e}. Schema error: no required properties.`);if(!t.properties||!Object.keys(t).length)throw new TypeError(`Could not validate entity ${e}. Schema error: no properties.`);const a=t.properties;for(const e in a){if(!Object.prototype.hasOwnProperty.call(a,e)||!a[e].type&&!a[e].anyOf)throw TypeError(`Invalid schema. Type missing for ${e}...`);if(a[e].anyOf&&(!Array.isArray(a[e].anyOf)||!a[e].anyOf.length))throw new TypeError(`Invalid schema, prop ${e} anyOf should be an array`)}}}else if(!t.items)throw new TypeError(`Could not validate entity ${e}. Schema error: missing item definition.`)}static validate(e,t,a){if(!e||!t||!a)throw new TypeError(`Could not validate entity ${e}. No data provided.`);switch(a.type){case"object":return fe.validateObject(e,t,a);case"array":return fe.validateArray(e,t,a);default:throw new TypeError(`Could not validate entity ${e}. Unsupported type.`)}}static validateArray(e,t,a){return fe.validateProp("items",t,a)}static validateObject(e,t,a){const n=a.required,i=a.properties,s={},o=new ue(`Could not validate entity ${e}.`);for(const e in i)if(Object.prototype.hasOwnProperty.call(i,e)){if(n.includes(e)){if(!Object.prototype.hasOwnProperty.call(t,e)){o.addError(e,"required",`The ${e} is required.`);continue}}else if(!Object.prototype.hasOwnProperty.call(t,e))continue;try{s[e]=fe.validateProp(e,t[e],i[e])}catch(t){if(!(t instanceof ue))throw t;o.details[e]=t.details[e]}}if(o.hasErrors())throw o;return s}static validateProp(e,t,a){if(a.anyOf)return fe.validateAnyOf(e,t,a.anyOf),t;if(fe.validatePropType(e,t,a),a.enum)return fe.validatePropEnum(e,t,a),t;switch(a.type){case"string":fe.validatePropTypeString(e,t,a);break;case"integer":case"number":fe.validatePropTypeNumber(e,t,a);break;case"array":case"object":case"boolean":case"blob":case"null":break;case"x-custom":fe.validatePropCustom(e,t,a);break;default:throw new TypeError(`Could not validate property ${e}. Unsupported prop type ${a.type}`)}return t}static validatePropType(e,t,a){if(!fe.isValidPropType(t,a.type)){const t=new ue(`Could not validate property ${e}.`);throw t.addError(e,"type",`The ${e} is not a valid ${a.type}.`),t}}static validatePropCustom(e,t,a){try{a.validationCallback(t)}catch(t){const a=new ue(`Could not validate property ${e}.`);throw a.addError(e,"custom",`The ${e} is not valid: ${t.message}`),a}}static validatePropTypeString(e,t,a){const n=new ue(`Could not validate property ${e}.`);if(a.format&&(fe.isValidStringFormat(t,a.format)||n.addError(e,"format",`The ${e} is not a valid ${a.format}.`)),a.notEmpty&&(fe.isValidStringNotEmpty(t)||n.addError(e,"notEmpty",`The ${e} should be not empty`)),a.length&&(fe.isValidStringLength(t,a.length,a.length)||n.addError(e,"length",`The ${e} should be ${a.length} character in length.`)),a.minLength&&(fe.isValidStringLength(t,a.minLength)||n.addError(e,"minLength",`The ${e} should be ${a.minLength} character in length minimum.`)),a.maxLength&&(fe.isValidStringLength(t,0,a.maxLength)||n.addError(e,"maxLength",`The ${e} should be ${a.maxLength} character in length maximum.`)),a.pattern&&(be().matches(t,a.pattern)||n.addError(e,"pattern",`The ${e} is not valid.`)),a.custom&&(a.custom(t)||n.addError(e,"custom",`The ${e} is not valid.`)),n.hasErrors())throw n}static validatePropTypeNumber(e,t,a){const n=new ue(`Could not validate property ${e}.`);if("number"==typeof a.gte&&(fe.isGreaterThanOrEqual(t,a.gte)||n.addError(e,"gte",`The ${e} should be greater or equal to ${a.gte}.`)),"number"==typeof a.lte&&(fe.isLesserThanOrEqual(t,a.lte)||n.addError(e,"lte",`The ${e} should be lesser or equal to ${a.lte}.`)),n.hasErrors())throw n}static validatePropEnum(e,t,a){if(!fe.isPropInEnum(t,a.enum)){const t=new ue(`Could not validate property ${e}.`);throw t.addError(e,"enum",`The ${e} value is not included in the supported list.`),t}}static validateAnyOf(e,t,a){for(let n=0;n=t}static isLesserThanOrEqual(e,t){return e<=t}}const ye=fe;class ve extends he{constructor(e){super(ye.validate(ve.ENTITY_NAME,e,ve.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",enum:[ve.ROLE_ADMIN,ve.ROLE_USER,ve.ROLE_GUEST,ve.ROLE_ROOT]},description:{type:"string",maxLength:255},created:{type:"string",format:"date-time"},modified:{type:"string",format:"date-time"}}}}get id(){return this._props.id}get name(){return this._props.name}get description(){return this._props.description||null}get created(){return this._props.created||null}get modified(){return this._props.modified||null}isAdmin(){return this.name===ve.ROLE_ADMIN}static get ENTITY_NAME(){return"Role"}static get ROLE_ADMIN(){return"admin"}static get ROLE_USER(){return"user"}static get ROLE_GUEST(){return"guest"}static get ROLE_ROOT(){return"root"}}const ke=ve;class Ee{static canRoleUseUiAction(e,t,a){if(window.chrome?.webview){const e=t.findRbacByActionName(a);return this.getByRbacOrDefault(e,a)}const n=new ke(e.role);if(n.isAdmin())return me.getDefaultForAdminAndUiAction(a).execute();const i=t.findRbacByRoleAndUiActionName(n,a);return this.getByRbacOrDefault(i,a,e)}static getByRbacOrDefault(e,t,a){return e?me.getByRbac(e).execute(a):me.getDefaultForUserAndUiAction(t).execute()}}function we(){return we=Object.assign?Object.assign.bind():function(e){for(var t=1;t{}});class Se extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{canIUseUiAction:this.canIUseUiAction.bind(this)}}canIUseUiAction(e){return Ee.canRoleUseUiAction(this.props.context.loggedInUser,this.props.context.rbacs,e)}render(){return n.createElement(Ce.Provider,{value:this.state},this.props.children)}}Se.propTypes={context:o().any,children:o().any};const xe=I(Se);function Ne(e){return class extends n.Component{render(){return n.createElement(Ce.Consumer,null,(t=>n.createElement(e,we({rbacContext:t},this.props))))}}}class _e extends n.Component{getClassName(){let e=`svg-icon ${this.props.name}`;return this.props.big&&(e+=" icon-only"),this.props.baseline&&(e+=" baseline"),this.props.dim&&(e+=" dim"),e}render(){return n.createElement("span",{className:this.getClassName(),onClick:this.props.onClick,style:this.props.style},"2-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.97528 1.43999V15.24M7.97528 1.43999H13.3453C13.5466 1.43866 13.7461 1.47733 13.9323 1.55375C14.1185 1.63017 14.2878 1.74282 14.4301 1.88516C14.5725 2.0275 14.6851 2.19669 14.7615 2.38292C14.838 2.56915 14.8766 2.7687 14.8753 2.96999V13.7C14.8766 13.9018 14.838 14.1018 14.7617 14.2886C14.6854 14.4754 14.5729 14.6452 14.4307 14.7883C14.2885 14.9315 14.1194 15.0451 13.9332 15.1226C13.7469 15.2001 13.547 15.24 13.3453 15.24H7.97528V1.43999ZM7.97528 1.43999H2.6153C2.41353 1.43867 2.21346 1.47727 2.02667 1.55357C1.83989 1.62987 1.67005 1.74236 1.52692 1.88457C1.38378 2.02677 1.2702 2.19588 1.19269 2.38217C1.11517 2.56845 1.07525 2.76823 1.07526 2.96999V13.7C1.07526 14.1084 1.2375 14.5001 1.52631 14.7889C1.81511 15.0777 2.20686 15.24 2.6153 15.24H7.97528V1.43999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"3-dots-h"===this.props.name&&n.createElement("svg",{width:"16",height:"3",viewBox:"0 0 16 3",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"1.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"8",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"14.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"})),"3-dots-v"===this.props.name&&n.createElement("svg",{width:"3",height:"16",viewBox:"0 0 3 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"1.5",cy:"1.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"1.5",cy:"8",r:"1.5",fill:"var(--icon-color)",stroke:"none"}),n.createElement("circle",{cx:"1.5",cy:"14.5",r:"1.5",fill:"var(--icon-color)",stroke:"none"})),"add"===this.props.name&&n.createElement("svg",{width:"13",height:"12",viewBox:"0 0 13 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.51996 1.50999V11.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.68994 6.34H11.3499",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"arrow-left"===this.props.name&&n.createElement("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.62 6.34H0.959961",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.77995 11.17L0.949951 6.34L5.77995 1.50999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"arrow-right"===this.props.name&&n.createElement("svg",{width:"13",height:"12",viewBox:"0 0 13 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.61993 6.34H11.2799",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.47992 1.50999L11.3099 6.34L6.47992 11.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"ascending"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.87466 9.07V1.61",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.13467 5.34L4.87466 1.61L8.60464 5.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"ban"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.58527 13.33C10.8935 13.33 13.5753 10.6482 13.5753 7.34001C13.5753 4.03182 10.8935 1.35001 7.58527 1.35001C4.27708 1.35001 1.59528 4.03182 1.59528 7.34001C1.59528 10.6482 4.27708 13.33 7.58527 13.33Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.34528 3.11L11.8152 11.57",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"broken-link"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.76352 11.73L6.76352 12.73C6.44415 13.0524 6.0633 13.3075 5.64352 13.48C5.22571 13.6553 4.7766 13.7438 4.32352 13.74C3.40986 13.7429 2.53235 13.3833 1.88351 12.74C1.56332 12.4205 1.30928 12.0409 1.13596 11.6231C0.962628 11.2053 0.873383 10.7573 0.873383 10.305C0.873383 9.85264 0.962628 9.40473 1.13596 8.9869C1.30928 8.56907 1.56332 8.18952 1.88351 7.87L2.88351 6.87",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6635 7.82999L12.6635 6.82999C12.986 6.51063 13.241 6.12976 13.4135 5.70999C13.592 5.29282 13.6838 4.84374 13.6835 4.38999C13.6837 3.70751 13.4815 3.0403 13.1024 2.47277C12.7233 1.90524 12.1844 1.4629 11.5539 1.2017C10.9234 0.940496 10.2296 0.872172 9.56021 1.00537C8.89085 1.13857 8.27598 1.46731 7.79349 1.94999L6.79349 2.94999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.1735 11.24L3.36349 3.42999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"calendar"===this.props.name&&n.createElement("svg",{width:"15",height:"17",viewBox:"0 0 15 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.7348 2.64999H2.7748C1.99055 2.64999 1.35475 3.28575 1.35475 4.06999V14.03C1.35475 14.8142 1.99055 15.45 2.7748 15.45H12.7348C13.519 15.45 14.1548 14.8142 14.1548 14.03V4.06999C14.1548 3.28575 13.519 2.64999 12.7348 2.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5948 1.23V4.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.9048 1.23V4.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.35475 6.92H14.1548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"camera"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.5953 12.07C16.5926 12.429 16.4482 12.7723 16.1934 13.0252C15.9387 13.2781 15.5941 13.42 15.2352 13.42H3.04523C2.68718 13.42 2.34381 13.2778 2.09064 13.0246C1.83746 12.7714 1.69525 12.428 1.69525 12.07V4.59C1.69525 4.23196 1.83746 3.88858 2.09064 3.63541C2.34381 3.38224 2.68718 3.24001 3.04523 3.24001H5.74518L7.09528 1.24001H11.1452L12.4952 3.24001H15.1953C15.5542 3.24 15.8986 3.38191 16.1534 3.6348C16.4081 3.88769 16.5526 4.23105 16.5552 4.59L16.5953 12.07Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.16522 10.72C10.6564 10.72 11.8652 9.51118 11.8652 8.02001C11.8652 6.52884 10.6564 5.32001 9.16522 5.32001C7.67405 5.32001 6.46527 6.52884 6.46527 8.02001C6.46527 9.51118 7.67405 10.72 9.16522 10.72Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-down"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-left"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(90)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-right"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(270)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"caret-up"===this.props.name&&n.createElement("svg",{width:"10",height:"10",transform:"rotate(180)",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1 3L5 7L9 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"check"===this.props.name&&n.createElement("svg",{width:"15",height:"11",viewBox:"0 0 15 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6647 0.940002L4.86478 9.74L0.864777 5.74",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"clock"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.69485 15.18C11.4725 15.18 14.5348 12.1176 14.5348 8.34C14.5348 4.56237 11.4725 1.5 7.69485 1.5C3.91723 1.5 0.854767 4.56237 0.854767 8.34C0.854767 12.1176 3.91723 15.18 7.69485 15.18Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.69485 4.23V8.34L10.4248 9.71",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"close-circle"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.42523 13.33C10.7334 13.33 13.4152 10.6482 13.4152 7.34001C13.4152 4.03182 10.7334 1.35001 7.42523 1.35001C4.11705 1.35001 1.43524 4.03182 1.43524 7.34001C1.43524 10.6482 4.11705 13.33 7.42523 13.33Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.12518 5.65001L5.73517 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.73517 5.65001L9.12518 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"close"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M9.69525 1.2L1.41522 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.41522 1.2L9.69525 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"copy-to-clipboard"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6147 6.27H7.40469C7.22347 6.27 7.04405 6.3057 6.87662 6.37505C6.70919 6.4444 6.55707 6.54605 6.42892 6.6742C6.30078 6.80234 6.19908 6.95447 6.12973 7.1219C6.06038 7.28933 6.02469 7.46878 6.02469 7.65001V13.86C6.02469 14.226 6.17012 14.577 6.42892 14.8358C6.68772 15.0946 7.03869 15.24 7.40469 15.24H13.6147C13.9807 15.24 14.3317 15.0946 14.5905 14.8358C14.8493 14.577 14.9947 14.226 14.9947 13.86V7.65001C14.9947 7.46878 14.959 7.28933 14.8897 7.1219C14.8203 6.95447 14.7186 6.80234 14.5905 6.6742C14.4623 6.54605 14.3102 6.4444 14.1428 6.37505C13.9754 6.3057 13.7959 6.27 13.6147 6.27Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.26468 10.41H2.57468C2.38882 10.4136 2.20425 10.3791 2.03226 10.3086C1.86026 10.2381 1.70449 10.1331 1.57468 10C1.44256 9.86948 1.33818 9.71364 1.26773 9.54181C1.19728 9.36998 1.16224 9.1857 1.1647 9V2.82C1.16281 2.63439 1.19811 2.45027 1.26852 2.27852C1.33894 2.10677 1.44303 1.95086 1.57468 1.82C1.70499 1.68827 1.86107 1.58477 2.03311 1.51596C2.20515 1.44714 2.38946 1.41448 2.57468 1.42H8.7847C8.968 1.41862 9.14969 1.45404 9.31906 1.52416C9.48843 1.59428 9.64204 1.69767 9.77072 1.82822C9.8994 1.95877 10.0006 2.11381 10.0683 2.28417C10.1359 2.45453 10.1687 2.63674 10.1647 2.82V3.51",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"descending"===this.props.name&&n.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.40469 1.61V9.07",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.13467 5.34L5.40469 9.07L1.6647 5.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"document"===this.props.name&&n.createElement("svg",{width:"14",height:"17",viewBox:"0 0 14 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.47476 1.39999H2.92471C2.74218 1.39999 2.5615 1.43594 2.39285 1.5058C2.22421 1.57565 2.071 1.67804 1.94193 1.80711C1.81285 1.93619 1.71039 2.08942 1.64053 2.25806C1.57068 2.42671 1.53482 2.60746 1.53482 2.78999V13.89C1.53482 14.0721 1.5708 14.2523 1.64078 14.4204C1.71075 14.5885 1.81333 14.7411 1.94254 14.8694C2.07174 14.9976 2.225 15.0991 2.39359 15.1678C2.56217 15.2366 2.74265 15.2713 2.92471 15.27H11.2448C11.4268 15.2713 11.6073 15.2366 11.7759 15.1678C11.9445 15.0991 12.0979 14.9976 12.2271 14.8694C12.3563 14.7411 12.4587 14.5885 12.5287 14.4204C12.5987 14.2523 12.6348 14.0721 12.6348 13.89V5.58999L8.47476 1.39999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.46475 1.39999V5.56999H12.6248",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.85477 9.03H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.85477 11.81H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.69473 6.25999H4.99478H4.30472",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"download-a"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.01358 10.65L8.65359 13.29L11.2936 10.65",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.65359 7.34V13.29",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.5135 11.36C15.0875 10.9566 15.518 10.3808 15.7425 9.71616C15.9671 9.05151 15.974 8.33258 15.7622 7.66375C15.5504 6.99492 15.131 6.411 14.5648 5.99674C13.9986 5.58248 13.3151 5.35944 12.6135 5.36H11.7835C11.5878 4.58232 11.2178 3.85932 10.7015 3.24567C10.1852 2.63202 9.53617 2.14378 8.80345 1.81786C8.07073 1.49194 7.27349 1.33687 6.47203 1.36438C5.67056 1.39189 4.88587 1.60126 4.17723 1.97666C3.46858 2.35205 2.85455 2.88365 2.38157 3.53126C1.90859 4.17886 1.58909 4.92553 1.44712 5.7148C1.30516 6.50407 1.34445 7.31529 1.56211 8.08712C1.77978 8.85895 2.17005 9.5712 2.70347 10.17",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"download"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.3233 10.64V13.7C15.3246 13.9018 15.286 14.1018 15.2097 14.2886C15.1334 14.4754 15.0209 14.6452 14.8787 14.7883C14.7365 14.9315 14.5674 15.0451 14.3811 15.1226C14.1949 15.2001 13.9951 15.24 13.7933 15.24H3.06332C2.86109 15.24 2.66081 15.2002 2.47397 15.1228C2.28713 15.0454 2.11737 14.9319 1.97437 14.7889C1.83136 14.6459 1.71793 14.4762 1.64053 14.2893C1.56314 14.1025 1.52332 13.9022 1.52332 13.7V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.59332 6.81L8.43332 10.64L12.2633 6.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.43332 10.64V1.44",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"edit"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.53454 2.85999H2.70452C2.52292 2.85866 2.34289 2.89345 2.17486 2.96233C2.00683 3.03121 1.85417 3.13281 1.72576 3.26122C1.59735 3.38963 1.49575 3.54229 1.42687 3.71032C1.35799 3.87835 1.32318 4.0584 1.32451 4.23999V13.9C1.31899 14.0852 1.35164 14.2696 1.42046 14.4416C1.48928 14.6136 1.59281 14.7697 1.72454 14.9C1.8554 15.0316 2.01128 15.1357 2.18303 15.2062C2.35478 15.2766 2.53892 15.3119 2.72454 15.31H12.3845C12.7489 15.3048 13.0969 15.1578 13.3546 14.9001C13.6123 14.6424 13.7593 14.2944 13.7645 13.93V9.06999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.7045 1.82C12.9733 1.55934 13.3303 1.4094 13.7045 1.4C13.8966 1.39867 14.0871 1.43552 14.2648 1.50842C14.4426 1.58132 14.604 1.68882 14.7399 1.82466C14.8757 1.9605 14.9832 2.12197 15.0561 2.29971C15.129 2.47745 15.1659 2.6679 15.1646 2.86C15.1622 3.04677 15.1229 3.23124 15.0491 3.40284C14.9753 3.57443 14.8685 3.72979 14.7346 3.86L8.18451 10.42L5.42456 11.11L6.11456 8.35L12.7045 1.82Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"envelope"===this.props.name&&n.createElement("svg",{width:"16",height:"13",viewBox:"0 0 16 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M2.96527 1.24001H13.1552C13.493 1.24 13.8171 1.37348 14.0568 1.61137C14.2966 1.84925 14.4326 2.17226 14.4352 2.51V10.16C14.4326 10.4977 14.2966 10.8208 14.0568 11.0586C13.8171 11.2965 13.493 11.43 13.1552 11.43H2.96527C2.62752 11.43 2.30342 11.2965 2.06366 11.0586C1.8239 10.8208 1.68788 10.4977 1.68524 10.16V2.51C1.68788 2.17226 1.8239 1.84925 2.06366 1.61137C2.30342 1.37348 2.62752 1.24 2.96527 1.24001V1.24001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.4352 2.52L8.06525 6.98L1.69525 2.52",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"expand"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.4549 1.73H14.8548V6.14",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.04483 14.95H1.6348V10.54",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.8648 1.73L9.71487 6.87",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.6348 14.95L6.77481 9.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"external-link"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.2239 9.10001V13.7C13.2239 14.1084 13.0617 14.5001 12.7729 14.7889C12.4841 15.0778 12.0924 15.24 11.6839 15.24H3.25388C3.05289 15.2412 2.85377 15.2019 2.66824 15.1246C2.48272 15.0473 2.31461 14.9335 2.17392 14.79C2.03098 14.6468 1.91764 14.4768 1.84043 14.2898C1.76321 14.1028 1.72363 13.9023 1.72391 13.7V5.27C1.72653 4.86503 1.88859 4.47739 2.17496 4.19103C2.46132 3.90466 2.84891 3.74263 3.25388 3.74001H7.85391",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.9239 1.44H15.5239V6.04",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.08389 9.87L15.5239 1.44",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"eye-close"===this.props.name&&n.createElement("svg",{width:"18",height:"17",viewBox:"0 0 18 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.2347 9.8C10.0451 10.0025 9.81744 10.1656 9.56473 10.28C9.30808 10.3893 9.0335 10.4503 8.75473 10.46C8.47778 10.4605 8.20314 10.4096 7.94473 10.31C7.68694 10.2031 7.45254 10.0469 7.25473 9.85001C7.05246 9.65668 6.89537 9.42107 6.79471 9.16C6.69246 8.90261 6.64477 8.62678 6.65469 8.35C6.65565 8.07447 6.71357 7.80211 6.82474 7.55C6.94001 7.29486 7.10291 7.06406 7.30472 6.87L10.2347 9.8ZM12.8647 12.44C11.6829 13.3356 10.2473 13.8329 8.76474 13.86C3.93474 13.86 1.17471 8.34 1.17471 8.34C2.03377 6.73809 3.22745 5.33978 4.67471 4.24L12.8647 12.44ZM7.30472 2.98C7.77695 2.87138 8.26016 2.81769 8.74472 2.82C13.5747 2.82 16.3347 8.34 16.3347 8.34C15.9175 9.12411 15.418 9.86159 14.8447 10.54L7.30472 2.98Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.17471 0.75L16.3547 15.93",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"eye-open"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.99472 6.33999C0.99472 6.33999 3.75475 0.819992 8.58475 0.819992C13.4147 0.819992 16.1747 6.33999 16.1747 6.33999C16.1747 6.33999 13.4147 11.86 8.58475 11.86C3.75475 11.86 0.99472 6.33999 0.99472 6.33999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.58475 8.40999C8.99415 8.40999 9.39436 8.28859 9.73477 8.06113C10.0752 7.83368 10.3405 7.51038 10.4972 7.13214C10.6538 6.7539 10.6948 6.33769 10.615 5.93615C10.5351 5.53461 10.3379 5.16577 10.0484 4.87628C9.75894 4.58678 9.3901 4.38964 8.98856 4.30976C8.58702 4.22989 8.17082 4.27089 7.79257 4.42756C7.41433 4.58423 7.09101 4.84955 6.86356 5.18996C6.6361 5.53037 6.51474 5.93058 6.51474 6.33999C6.51474 6.88899 6.7328 7.4155 7.121 7.8037C7.5092 8.1919 8.03575 8.40999 8.58475 8.40999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"filter"===this.props.name&&n.createElement("svg",{width:"18",height:"16",viewBox:"0 0 18 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.8734 1.44H1.54337L7.67337 8.69V13.71L10.7334 15.24V8.69L16.8734 1.44Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"folder"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.77C14.0011 10.9326 13.9672 11.0937 13.9006 11.2433C13.834 11.393 13.736 11.528 13.6127 11.64C13.3673 11.8712 13.0363 12.0006 12.6916 12H2.29792C1.95325 12.0006 1.62224 11.8712 1.37683 11.64C1.25729 11.5257 1.16249 11.3901 1.09784 11.2408C1.03319 11.0915 0.999929 10.9316 1 10.77V2.22C1.00148 1.89698 1.13701 1.58771 1.37683 1.36C1.62224 1.12877 1.95325 0.999403 2.29792 1H5.54266L6.85103 2.84H12.6916C13.0363 2.8394 13.3673 2.96877 13.6127 3.2C13.7348 3.31089 13.832 3.44427 13.8986 3.59209C13.9651 3.73991 13.9996 3.89909 14 4.06V10.77Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"folders"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.9438 12.5803C13.9455 12.7685 13.9124 12.9552 13.8464 13.1293C13.7804 13.3035 13.6829 13.4616 13.5595 13.5943C13.309 13.8584 12.972 14.0042 12.6222 13.9999H2.3125C1.96297 14.0031 1.62631 13.8574 1.37525 13.5943C1.25312 13.4611 1.15697 13.3027 1.09257 13.1285C1.02816 12.9543 0.996821 12.7679 1.00035 12.5803V5.92825C0.996282 5.74059 1.02739 5.55399 1.09182 5.37971C1.15626 5.20542 1.25268 5.04707 1.37525 4.91422C1.4979 4.78073 1.64403 4.67516 1.805 4.60376C1.96597 4.53235 2.13853 4.49655 2.3125 4.49847H5.54599L6.8394 6.59751H12.6597C13.0013 6.60275 13.3274 6.75187 13.5689 7.01317C13.8104 7.27447 13.9483 7.62737 13.9531 7.99687L13.9438 12.5803Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.04723 2.42985C1.04316 2.24219 1.07426 2.05559 1.1387 1.88131C1.20313 1.70702 1.29955 1.54868 1.42212 1.41582C1.54477 1.28233 1.6909 1.17676 1.85188 1.10535C2.01285 1.03395 2.1854 0.998153 2.35937 1.00007H6.8863L8.17968 3.09911H12.7066C13.0481 3.10435 13.3743 3.25347 13.6158 3.51477C13.8574 3.77607 13.9952 4.12896 14 4.49847",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"info-circle"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.25473 15.24C9.61942 15.24 10.9535 14.8353 12.0882 14.0771C13.2229 13.319 14.1072 12.2413 14.6295 10.9805C15.1517 9.71971 15.2884 8.33235 15.0221 6.99388C14.7559 5.65541 14.0987 4.42595 13.1338 3.46097C12.1688 2.49599 10.9393 1.83882 9.60086 1.57259C8.26239 1.30635 6.87504 1.44299 5.61423 1.96524C4.35342 2.48748 3.27579 3.37187 2.51761 4.50657C1.75943 5.64127 1.35471 6.97531 1.35471 8.34C1.35735 10.1692 2.0852 11.9227 3.37863 13.2161C4.67206 14.5095 6.42555 15.2374 8.25473 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.25473 11.1V8.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.25473 5.65V5.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"internal-link"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.52392 8.8V3.28C1.5226 3.038 1.56925 2.79813 1.66125 2.5743C1.75325 2.35046 1.88875 2.14709 2.05987 1.97597C2.231 1.80484 2.43436 1.66936 2.6582 1.57736C2.88204 1.48536 3.12189 1.43867 3.36389 1.44H13.4839C13.9719 1.44 14.4399 1.63386 14.785 1.97892C15.13 2.32399 15.3239 2.792 15.3239 3.28V13.4C15.3229 13.6402 15.2753 13.8779 15.1839 14.1C15.0899 14.3236 14.9542 14.5272 14.7839 14.7C14.4387 15.0443 13.9714 15.2383 13.4839 15.24H7.96393",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.35385 6.75999H9.95389V11.4",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.5239 15.24L9.95389 6.75999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"layout"===this.props.name&&n.createElement("svg",{width:"14",height:"15",viewBox:"0 0 14 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.8629 1.19H2.30292C1.54629 1.19 0.932922 1.80337 0.932922 2.56V12.12C0.932922 12.8766 1.54629 13.49 2.30292 13.49H11.8629C12.6195 13.49 13.2329 12.8766 13.2329 12.12V2.56C13.2329 1.80337 12.6195 1.19 11.8629 1.19Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.932922 5.29001H13.2329",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.03296 13.49V5.29001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"license"===this.props.name&&n.createElement("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.2155 8.58999C14.9711 7.80057 15.3874 6.74663 15.3755 5.65392C15.3635 4.5612 14.9242 3.51661 14.1515 2.7439C13.3788 1.97119 12.3342 1.5318 11.2415 1.51986C10.1487 1.50791 9.09484 1.92436 8.30542 2.67999L3.60535 7.38V13.3H9.52539L14.2155 8.58999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.2654 5.59L1.51538 15.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.3154 10.47H6.39539",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"life-ring"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.70966 13.43C11.0731 13.43 13.7996 10.7034 13.7996 7.34C13.7996 3.97659 11.0731 1.25 7.70966 1.25C4.34624 1.25 1.61969 3.97659 1.61969 7.34C1.61969 10.7034 4.34624 13.43 7.70966 13.43Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.70966 9.77999C9.05723 9.77999 10.1497 8.68757 10.1497 7.33999C10.1497 5.99242 9.05723 4.89999 7.70966 4.89999C6.36208 4.89999 5.26971 5.99242 5.26971 7.33999C5.26971 8.68757 6.36208 9.77999 7.70966 9.77999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.40973 3.03L5.98969 5.62",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 9.06L12.0197 11.65",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 5.62L12.0197 3.03",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.43964 5.62L11.5897 3.47",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.40973 11.65L5.98969 9.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"link"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.84119 9.03C7.13202 9.43825 7.50715 9.77928 7.94119 10.03C8.37534 10.2686 8.85677 10.4086 9.3512 10.44C9.86059 10.4745 10.3709 10.3889 10.8412 10.19C11.3076 10.0211 11.731 9.75138 12.0812 9.39999L14.1512 7.33C14.6209 6.84495 14.938 6.23271 15.0631 5.56918C15.1883 4.90564 15.1159 4.21998 14.8551 3.59716C14.5943 2.97435 14.1564 2.44177 13.5958 2.06543C13.0351 1.68909 12.3764 1.48553 11.7012 1.47999C11.2503 1.47878 10.8036 1.56647 10.3866 1.73806C9.96966 1.90966 9.59061 2.16177 9.27118 2.47999L8.08118 3.58999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.64117 7.65C9.34989 7.23849 8.97075 6.89691 8.53118 6.65C8.09831 6.40942 7.61823 6.266 7.12432 6.22974C6.63042 6.19347 6.13455 6.26522 5.67118 6.44C5.20474 6.60886 4.78133 6.87861 4.43118 7.23L2.36119 9.3C1.87601 9.78489 1.54639 10.4034 1.41442 11.0765C1.28246 11.7497 1.35414 12.4469 1.62033 13.079C1.88651 13.7112 2.33511 14.2497 2.90881 14.6257C3.48251 15.0017 4.15529 15.1982 4.84118 15.19C5.29207 15.1912 5.73876 15.1035 6.15573 14.9319C6.57269 14.7603 6.95174 14.5082 7.27117 14.19L8.45117 13.01",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"list"===this.props.name&&n.createElement("svg",{width:"17",height:"12",viewBox:"0 0 17 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.95473 1.53999H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.95473 6.34H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.95473 11.14H15.3548",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 1.53999H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 6.34H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.954727 11.14H0.964737",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"log-out"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.44388 13.59H2.68387C2.49801 13.5936 2.31338 13.5591 2.14139 13.4886C1.96939 13.4181 1.81368 13.3131 1.68387 13.18C1.55176 13.0495 1.44737 12.8936 1.37692 12.7218C1.30647 12.55 1.27143 12.3657 1.27389 12.18V2.51C1.272 2.32439 1.3073 2.14028 1.37772 1.96853C1.44813 1.79678 1.55222 1.64087 1.68387 1.51C1.81418 1.37827 1.9702 1.27478 2.14224 1.20596C2.31428 1.13714 2.49866 1.10448 2.68387 1.11001H5.44388",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.2739 10.79L13.7239 7.34L10.2739 3.89",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.7239 7.34H5.44388",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plus-circle"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.38519 9.63999C7.76002 9.63999 9.68524 7.71482 9.68524 5.33999C9.68524 2.96517 7.76002 1.03999 5.38519 1.03999C3.01037 1.03999 1.08527 2.96517 1.08527 5.33999C1.08527 7.71482 3.01037 9.63999 5.38519 9.63999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.38519 3.62V7.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.66522 5.34H7.10516",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plus-square"===this.props.name&&n.createElement("svg",{width:"11",height:"11",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M9.12531 1.03999H2.43524C1.90505 1.03999 1.47528 1.4698 1.47528 1.99999V8.68999C1.47528 9.22019 1.90505 9.64999 2.43524 9.64999H9.12531C9.6555 9.64999 10.0853 9.22019 10.0853 8.68999V1.99999C10.0853 1.4698 9.6555 1.03999 9.12531 1.03999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.77533 3.42999V7.24999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.8653 5.34H7.68524",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"power"===this.props.name&&n.createElement("svg",{width:"15",height:"17",viewBox:"0 0 15 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.9098 4.59C12.7908 5.47109 13.3908 6.59365 13.6338 7.81571C13.8768 9.03777 13.752 10.3045 13.2751 11.4556C12.7983 12.6067 11.9908 13.5906 10.9548 14.2828C9.91882 14.9751 8.70077 15.3445 7.45477 15.3445C6.20878 15.3445 4.99079 14.9751 3.95477 14.2828C2.91876 13.5906 2.11125 12.6067 1.6344 11.4556C1.15755 10.3045 1.03278 9.03777 1.27582 7.81571C1.51885 6.59365 2.11881 5.47109 2.99982 4.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.47981 1.34V8.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"printer"===this.props.name&&n.createElement("svg",{width:"14",height:"15",viewBox:"0 0 14 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M3.38623 5.49V1.17H10.7863V5.49",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.38627 11.04H2.14628C1.98391 11.04 1.82314 11.0079 1.67326 10.9454C1.52337 10.883 1.38734 10.7915 1.27299 10.6762C1.15864 10.5609 1.06822 10.4242 1.007 10.2738C0.945777 10.1234 0.914858 9.96237 0.916178 9.8V6.72001C0.916178 6.39379 1.04586 6.08093 1.27653 5.85026C1.5072 5.61959 1.82006 5.49001 2.14628 5.49001H11.9762C12.3034 5.48999 12.6173 5.61926 12.8495 5.84965C13.0818 6.08003 13.2136 6.39287 13.2162 6.72001V9.8C13.2162 10.1289 13.0856 10.4443 12.8531 10.6768C12.6205 10.9094 12.3051 11.04 11.9762 11.04H10.7463",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.7863 8.56999H3.38623V13.51H10.7863V8.56999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"question-circle"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.04996 15.24C9.41465 15.24 10.7487 14.8353 11.8834 14.0771C13.0181 13.319 13.9025 12.2413 14.4247 10.9805C14.947 9.71971 15.0836 8.33235 14.8174 6.99388C14.5511 5.65541 13.894 4.42595 12.929 3.46097C11.964 2.49599 10.7345 1.83882 9.39608 1.57259C8.05761 1.30635 6.67026 1.44299 5.40945 1.96524C4.14864 2.48748 3.071 3.37187 2.31282 4.50657C1.55464 5.64127 1.14996 6.97531 1.14996 8.34C1.14996 10.17 1.87692 11.925 3.17092 13.219C4.46492 14.513 6.21996 15.24 8.04996 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.03998 6.27001C6.20089 5.80813 6.52015 5.41815 6.94115 5.16921C7.36216 4.92026 7.85772 4.82844 8.33997 4.91001C8.8197 4.99744 9.25434 5.24832 9.56998 5.62001C9.88695 5.99449 10.0606 6.46939 10.06 6.96001C10.06 8.34001 7.98997 9.03001 7.98997 9.03001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.04993 11.79V11.73",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"refresh-1"===this.props.name&&n.createElement("svg",{width:"17",height:"14",viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.4753 2.14V6.04H11.5753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.18524 12.54V8.64H5.08527",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.81525 5.39C3.33356 3.92951 4.41025 2.73435 5.8089 2.0669C7.20755 1.39945 8.8138 1.31425 10.2752 1.83001C11.097 2.11893 11.8425 2.59081 12.4553 3.21L15.4553 6.04M1.16522 8.64001L4.16522 11.47C4.86357 12.1684 5.72733 12.6787 6.67609 12.9532C7.62484 13.2277 8.62773 13.2575 9.59113 13.0399C10.5545 12.8222 11.4471 12.3642 12.1857 11.7085C12.9243 11.0528 13.485 10.2208 13.8152 9.29",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"refresh"===this.props.name&&n.createElement("svg",{width:"16",height:"15",viewBox:"0 0 16 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.60464 2.06999V6.06999H5.54471",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.25467 9.29999C3.57205 10.2045 4.1047 11.0183 4.80667 11.6711C5.50864 12.3239 6.3588 12.7962 7.28397 13.0471C8.20913 13.2981 9.18158 13.3203 10.1172 13.1117C11.0529 12.9032 11.9237 12.4701 12.6547 11.85C13.2373 11.3277 13.7104 10.695 14.0465 9.98847C14.3827 9.28196 14.5751 8.51572 14.6128 7.73422C14.6505 6.95272 14.5327 6.17152 14.2661 5.43591C13.9996 4.70031 13.5897 4.02495 13.0601 3.44902C12.5305 2.87309 11.8918 2.40804 11.1811 2.08087C10.4703 1.75369 9.70175 1.57089 8.91983 1.54307C8.13792 1.51526 7.3583 1.64298 6.62613 1.91882C5.89396 2.19467 5.22387 2.61315 4.65469 3.14999L1.65469 6.01999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"save"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.4247 15.24H2.69469C2.28625 15.24 1.89456 15.0777 1.60576 14.7889C1.31695 14.5001 1.15471 14.1084 1.15471 13.7V2.96999C1.1547 2.76823 1.19463 2.56845 1.27214 2.38217C1.34965 2.19588 1.46323 2.02677 1.60637 1.88457C1.7495 1.74236 1.91934 1.62987 2.10612 1.55357C2.29291 1.47727 2.49292 1.43867 2.69469 1.43999H11.1247L14.9547 5.26999V13.7C14.956 13.9018 14.9174 14.1018 14.8411 14.2886C14.7648 14.4754 14.6523 14.6452 14.5101 14.7883C14.3679 14.9315 14.1988 15.0451 14.0125 15.1226C13.8262 15.2001 13.6265 15.24 13.4247 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.8947 15.24V9.10999H4.22472V15.24",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.22472 1.43999V5.26999H10.3647",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"search"===this.props.name&&n.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.20346 12.17C8.29521 12.17 9.36247 11.8462 10.2702 11.2397C11.178 10.6332 11.8855 9.77105 12.3033 8.7624C12.7211 7.75375 12.8304 6.64387 12.6174 5.57309C12.4044 4.50232 11.8787 3.51875 11.1067 2.74676C10.3347 1.97478 9.35114 1.44905 8.28036 1.23606C7.20959 1.02307 6.09974 1.13238 5.09109 1.55018C4.08245 1.96797 3.22028 2.67548 2.61374 3.58324C2.00719 4.491 1.6835 5.55824 1.6835 6.64999C1.6835 8.11399 2.26506 9.51802 3.30026 10.5532C4.33546 11.5884 5.73947 12.17 7.20346 12.17V12.17Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.1035 13.59L11.1035 10.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"share"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.4733 5.58C12.6166 5.58 13.5434 4.65323 13.5434 3.51C13.5434 2.36677 12.6166 1.44 11.4733 1.44C10.3301 1.44 9.40335 2.36677 9.40335 3.51C9.40335 4.65323 10.3301 5.58 11.4733 5.58Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.19333 10.41C4.33656 10.41 5.26334 9.48323 5.26334 8.34C5.26334 7.19677 4.33656 6.27 3.19333 6.27C2.0501 6.27 1.12335 7.19677 1.12335 8.34C1.12335 9.48323 2.0501 10.41 3.19333 10.41Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.4733 15.24C12.6166 15.24 13.5434 14.3132 13.5434 13.17C13.5434 12.0268 12.6166 11.1 11.4733 11.1C10.3301 11.1 9.40335 12.0268 9.40335 13.17C9.40335 14.3132 10.3301 15.24 11.4733 15.24Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.98334 9.38L9.69333 12.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.69333 4.55L4.98334 7.3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"star"===this.props.name&&n.createElement("svg",{width:"14",height:"13",viewBox:"0 0 14 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.30478 0.110001L9.32474 4.21L13.8548 4.87L10.5747 8.06L11.3548 12.57L7.30478 10.44L3.25479 12.57L4.03476 8.06L0.754791 4.87L5.28476 4.21L7.30478 0.110001Z",fill:"var(--icon-favorites-color)"})),"star-stroke"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8 1.77L10.02 5.87L14.55 6.53L11.2699 9.72L12.05 14.23L8 12.1L3.95001 14.23L4.72998 9.72L1.45001 6.53L5.97998 5.87L8 1.77Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinejoin:"round"})),"switch"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M16.5154 10.8L13.7454 13.58L10.9753 10.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.58545 1.09999H10.9653C11.7009 1.09999 12.4065 1.39151 12.9276 1.9107C13.4487 2.42989 13.7427 3.13442 13.7454 3.86999V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.27539 3.87999L4.04541 1.09999L6.81543 3.87999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.19543 13.59H6.81543C6.45083 13.5913 6.08955 13.5206 5.75232 13.382C5.41509 13.2434 5.1085 13.0396 4.85022 12.7822C4.59194 12.5249 4.38702 12.2191 4.24719 11.8823C4.10736 11.5456 4.0354 11.1846 4.0354 10.82V1.12",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"theme-dark"===this.props.name&&n.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.14 7.31001C13.0365 8.40623 12.6232 9.45037 11.9483 10.3204C11.2734 11.1904 10.3648 11.8503 9.32868 12.2229C8.29257 12.5956 7.17169 12.6656 6.09724 12.4248C5.02279 12.1841 4.03916 11.6424 3.26118 10.8632C2.4832 10.084 1.94314 9.09942 1.70405 8.02459C1.46497 6.94976 1.53678 5.82909 1.91108 4.79356C2.28539 3.75804 2.94664 2.85046 3.8177 2.17692C4.68876 1.50337 5.73364 1.09169 6.83003 0.990005C6.19481 1.86018 5.8913 2.92863 5.97419 4.0028C6.05709 5.07697 6.52085 6.08621 7.28205 6.84863C8.04326 7.61104 9.05177 8.07648 10.1258 8.16107C11.1998 8.24567 12.2688 7.94385 13.14 7.31001V7.31001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"theme-light"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.47571 11.23C10.2541 11.23 11.6957 9.78835 11.6957 8.00999C11.6957 6.23164 10.2541 4.78999 8.47571 4.78999C6.69735 4.78999 5.25574 6.23164 5.25574 8.00999C5.25574 9.78835 6.69735 11.23 8.47571 11.23Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.47571 0.919998V2.21",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.47571 13.82V15.11",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.45569 3L4.37573 3.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.5757 12.11L13.4857 13.03",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.37573 8.00999H2.66577",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.2758 8.00999H15.5657",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.45569 13.03L4.37573 12.11",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.5757 3.91L13.4857 3",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"trash"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.30994 4.2H13.6899",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.75995 4.19999V2.81999C4.75806 2.63438 4.79335 2.45026 4.86377 2.27851C4.93419 2.10676 5.03829 1.95085 5.16994 1.81999C5.30095 1.68922 5.45711 1.58635 5.62898 1.5176C5.80086 1.44885 5.98488 1.41565 6.16994 1.41999H8.92995C9.11154 1.41866 9.29158 1.45345 9.45961 1.52233C9.62764 1.59121 9.78031 1.69281 9.90872 1.82122C10.0371 1.94963 10.1387 2.10229 10.2076 2.27032C10.2765 2.43835 10.3113 2.6184 10.3099 2.79999V4.17999L4.75995 4.19999ZM12.3799 4.17999V13.84C12.3843 14.0251 12.3511 14.2091 12.2823 14.3809C12.2136 14.5528 12.1107 14.709 11.9799 14.84C11.8491 14.9716 11.6932 15.0758 11.5214 15.1462C11.3497 15.2166 11.1656 15.2519 10.9799 15.25H4.07994C3.7121 15.2474 3.36007 15.1001 3.09996 14.84C2.83985 14.5799 2.69256 14.2278 2.68994 13.86V4.19999L12.3799 4.17999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.13995 7.64999V11.79",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.89996 7.64999V11.79",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"txt"===this.props.name&&n.createElement("svg",{width:"17",height:"12",viewBox:"0 0 17 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.0753 4.78H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.2754 1.58H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.2754 7.98H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.0753 11.18H0.875366",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"upload-a"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.7482 9.98L8.10822 7.34L5.4682 9.98",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.10822 7.34V13.28",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.6383 11.59C14.2828 11.24 14.7924 10.6853 15.0865 10.0134C15.3807 9.34158 15.4426 8.59089 15.2626 7.87992C15.0825 7.16895 14.6707 6.53821 14.0923 6.08732C13.5138 5.63642 12.8018 5.39107 12.0684 5.39H11.2283C11.0717 4.70118 10.7786 4.05078 10.3661 3.47732C9.95362 2.90385 9.43025 2.41898 8.82702 2.05142C8.22379 1.68385 7.553 1.44107 6.85425 1.33744C6.1555 1.23382 5.44297 1.27145 4.75903 1.44813C4.07509 1.6248 3.43358 1.93692 2.87243 2.366C2.31129 2.79507 1.84193 3.33239 1.49219 3.94612C1.14244 4.55985 0.919424 5.23753 0.836302 5.93901C0.753179 6.6405 0.811675 7.35153 1.0083 8.03C1.21212 8.83805 1.60647 9.58555 2.15832 10.21",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.7482 9.98L8.10822 7.34L5.4682 9.98",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"upload"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M15.1234 10.64V13.7C15.1234 14.1067 14.9625 14.4969 14.6758 14.7854C14.3892 15.0739 14.0001 15.2374 13.5934 15.24H2.85333C2.44663 15.2374 2.05752 15.0739 1.77087 14.7854C1.48423 14.4969 1.32333 14.1067 1.32333 13.7V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M12.0634 5.27L8.22336 1.44L4.39334 5.27",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.22336 1.44V10.64",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"user"===this.props.name&&n.createElement("svg",{width:"13",height:"15",viewBox:"0 0 13 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.9329 13.59V12.17C11.9305 11.4474 11.6458 10.7543 11.1395 10.2386C10.6332 9.72301 9.94542 9.42564 9.22295 9.40999H3.70296C3.34014 9.40867 2.98065 9.47915 2.64519 9.61739C2.30974 9.75562 2.00495 9.95887 1.7484 10.2154C1.49185 10.472 1.28858 10.7768 1.15035 11.1122C1.01211 11.4477 0.941629 11.8072 0.94295 12.17V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.41296 6.64999C6.95884 6.64999 7.49247 6.48812 7.94635 6.18485C8.40023 5.88157 8.75396 5.45052 8.96286 4.9462C9.17176 4.44187 9.22643 3.88693 9.11993 3.35154C9.01344 2.81615 8.75056 2.32437 8.36456 1.93838C7.97857 1.55238 7.4868 1.28952 6.95142 1.18302C6.41603 1.07653 5.86107 1.13118 5.35675 1.34008C4.85243 1.54898 4.42138 1.90274 4.1181 2.35662C3.81483 2.8105 3.65295 3.34411 3.65295 3.88999C3.65559 4.62118 3.94723 5.32166 4.46426 5.83869C4.98129 6.35572 5.68178 6.64736 6.41296 6.64999V6.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"users"===this.props.name&&n.createElement("svg",{width:"18",height:"15",viewBox:"0 0 18 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.1038 13.59V12.17C12.1124 11.799 12.0449 11.4302 11.9056 11.0862C11.7663 10.7423 11.5581 10.4305 11.2938 10.17C11.0319 9.90758 10.7199 9.70061 10.3763 9.56145C10.0326 9.42228 9.66448 9.35376 9.2938 9.35999H3.77378C3.04963 9.38607 2.36453 9.69487 1.8654 10.2202C1.36627 10.7455 1.09287 11.4455 1.1038 12.17V13.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.6138 6.64999C7.15968 6.64999 7.69331 6.48812 8.14719 6.18485C8.60107 5.88157 8.95483 5.45052 9.16373 4.9462C9.37262 4.44187 9.42727 3.88693 9.32077 3.35154C9.21428 2.81615 8.95139 2.32437 8.5654 1.93838C8.17941 1.55238 7.68764 1.28952 7.15225 1.18302C6.61686 1.07653 6.06191 1.13118 5.55759 1.34008C5.05326 1.54898 4.62221 1.90274 4.31894 2.35662C4.01567 2.8105 3.85379 3.34411 3.85379 3.88999C3.85643 4.62118 4.14804 5.32166 4.66507 5.83869C5.1821 6.35572 5.88261 6.64736 6.6138 6.64999V6.64999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M16.2738 13.59V12.17C16.2709 11.5583 16.0672 10.9645 15.6938 10.48C15.324 9.98829 14.7989 9.63591 14.2038 9.48",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.4438 1.22C12.0403 1.37297 12.5662 1.72595 12.9338 2.22C13.3101 2.703 13.5144 3.29774 13.5144 3.91C13.5144 4.52226 13.3101 5.117 12.9338 5.6C12.5662 6.09405 12.0403 6.44703 11.4438 6.6",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"video"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6053 1.59H3.04523C2.23337 1.59 1.57526 2.24814 1.57526 3.06V13.62C1.57526 14.4319 2.23337 15.09 3.04523 15.09H13.6053C14.4171 15.09 15.0753 14.4319 15.0753 13.62V3.06C15.0753 2.24814 14.4171 1.59 13.6053 1.59Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.94525 1.59V15.09",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 1.59V15.09",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 8.34H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 4.97H4.94525",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.57526 11.71H4.94525",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 11.71H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6953 4.97H15.0753",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"warning"===this.props.name&&n.createElement("svg",{width:"16",height:"15",viewBox:"0 0 16 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.04506 1.94L1.39504 11.38C1.30734 11.5316 1.25039 11.699 1.22756 11.8726C1.20473 12.0462 1.21645 12.2227 1.26198 12.3918C1.30751 12.5609 1.38602 12.7193 1.49294 12.858C1.59986 12.9967 1.73308 13.1129 1.88503 13.2C2.08111 13.3184 2.30599 13.3807 2.53505 13.38H13.845C14.0205 13.3787 14.1941 13.3427 14.3556 13.274C14.5171 13.2053 14.6634 13.1054 14.7862 12.9799C14.9089 12.8544 15.0055 12.7058 15.0706 12.5428C15.1356 12.3798 15.1677 12.2055 15.1651 12.03C15.1657 11.8009 15.1034 11.5761 14.985 11.38L9.33498 1.94C9.2446 1.78868 9.12507 1.65685 8.98329 1.55214C8.84152 1.44744 8.68038 1.37195 8.50917 1.33008C8.33797 1.28821 8.1602 1.28079 7.9861 1.30824C7.812 1.33569 7.64503 1.39748 7.49501 1.49C7.312 1.60289 7.15795 1.75699 7.04506 1.94V1.94Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.1951 5.37V8.04",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.1951 10.71H8.20511",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"chevron-left"===this.props.name&&n.createElement("svg",{width:"7",height:"12",viewBox:"0 0 7 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M5.76616 10.805L0.936157 5.975L5.76616 1.145",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"chevron-right"===this.props.name&&n.createElement("svg",{width:"7",height:"12",viewBox:"0 0 7 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.766174 1.145L5.59618 5.975L0.766174 10.805",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"cog"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.7254 6.42L12.4355 5.7C12.3855 5.13 13.5555 3.92 13.3255 3.7L12.7654 3.13C12.7654 3.13 12.4354 2.80999 12.2054 2.56999C11.9754 2.32999 10.7554 3.57 10.2054 3.47L9.49545 3.17C9.05545 2.8 9.02545 1.11 8.69545 1.11H7.12544C6.79544 1.11 6.77545 2.8 6.33545 3.17L5.61545 3.47C5.05545 3.52 3.84545 2.33999 3.61545 2.56999C3.38545 2.79999 3.05545 3.13 3.05545 3.13L2.49545 3.7C2.25545 3.93 3.43545 5.14 3.38545 5.7L3.08545 6.42C2.72545 6.85 1.08545 6.88001 1.08545 7.21001V8.8C1.08545 9.13 2.77545 9.15 3.08545 9.59L3.38545 10.31C3.38545 10.87 2.25545 12.09 2.49545 12.31L3.05545 12.87L3.61545 13.43C3.85545 13.67 5.06545 12.49 5.61545 12.54L6.33545 12.84C6.77545 13.2 6.79544 14.84 7.12544 14.84H8.72545C9.05545 14.84 9.08545 13.15 9.52545 12.84L10.2354 12.54C10.8054 12.54 12.0154 13.67 12.2354 13.43L12.7955 12.87L13.3555 12.31C13.5855 12.08 12.4155 10.86 12.4655 10.31L12.7254 9.64C13.0954 9.2 14.7854 9.18001 14.7854 8.85001V7.25999C14.8254 6.87999 13.1354 6.85 12.7254 6.42ZM7.88545 10.19C7.45189 10.192 7.02749 10.0652 6.66603 9.82579C6.30457 9.58636 6.02233 9.24502 5.85504 8.84503C5.68775 8.44504 5.64295 8.00439 5.72632 7.57892C5.80969 7.15344 6.01747 6.76228 6.32335 6.455C6.62922 6.14772 7.01941 5.93816 7.4445 5.85284C7.86959 5.76753 8.31044 5.81031 8.7112 5.97577C9.11195 6.14123 9.45458 6.42192 9.69566 6.78227C9.93675 7.14263 10.0654 7.56643 10.0654 8C10.0656 8.57226 9.84174 9.12185 9.44179 9.53114C9.04184 9.94044 8.49756 10.1769 7.92545 10.19H7.88545Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"contrast"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.30612 14.875C9.67081 14.875 11.0049 14.4703 12.1396 13.7121C13.2743 12.954 14.1587 11.8763 14.6809 10.6155C15.2032 9.35471 15.3398 7.96734 15.0735 6.62888C14.8073 5.29041 14.1502 4.06094 13.1852 3.09596C12.2202 2.13098 10.9907 1.47382 9.65225 1.20758C8.31378 0.941342 6.92643 1.07799 5.66562 1.60023C4.40481 2.12248 3.32718 3.00687 2.569 4.14157C1.81082 5.27627 1.40613 6.61031 1.40613 7.97501C1.40613 9.805 2.13309 11.56 3.42709 12.854C4.72109 14.1481 6.47613 14.875 8.30612 14.875V14.875Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.30612 1.07501C6.47613 1.07501 4.72109 1.80196 3.42709 3.09596C2.13309 4.38996 1.40613 6.14501 1.40613 7.97501C1.40613 9.805 2.13309 11.56 3.42709 12.854C4.72109 14.1481 6.47613 14.875 8.30612 14.875V1.07501Z",fill:"var(--icon-color)",stroke:"none"})),"copy-to-clipboard-2"===this.props.name&&n.createElement("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M11.0061 2.55C11.3774 2.55 11.7335 2.6975 11.9961 2.96005C12.2586 3.2226 12.4061 3.57869 12.4061 3.95V13.75C12.4061 14.1213 12.2586 14.4774 11.9961 14.7399C11.7335 15.0025 11.3774 15.15 11.0061 15.15H2.60611C2.23481 15.15 1.87872 15.0025 1.61617 14.7399C1.35361 14.4774 1.20612 14.1213 1.20612 13.75V3.95C1.20612 3.57869 1.35361 3.2226 1.61617 2.96005C1.87872 2.6975 2.23481 2.55 2.60611 2.55",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.9061 2.22H8.2261C8.2261 1.84339 8.0765 1.48221 7.8102 1.21591C7.54389 0.94961 7.18271 0.800003 6.80611 0.800003C6.4295 0.800003 6.0683 0.94961 5.802 1.21591C5.5357 1.48221 5.38611 1.84339 5.38611 2.22H4.7061C4.52045 2.22 4.3424 2.29374 4.21112 2.42502C4.07985 2.55629 4.0061 2.73435 4.0061 2.92V3.62C4.0061 3.80565 4.07985 3.9837 4.21112 4.11497C4.3424 4.24625 4.52045 4.32001 4.7061 4.32001H8.9061C9.09175 4.32001 9.26979 4.24625 9.40106 4.11497C9.53234 3.9837 9.60611 3.80565 9.60611 3.62V2.92C9.60611 2.73435 9.53234 2.55629 9.40106 2.42502C9.26979 2.29374 9.09175 2.22 8.9061 2.22Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"home-1"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.54611 0.934998L1.20612 5.86499V13.605C1.20873 13.9781 1.35812 14.3353 1.62198 14.5991C1.88584 14.863 2.24297 15.0124 2.61612 15.015H5.61612V8.755H9.52612V15.015H12.5261C12.8985 15.0098 13.2541 14.8596 13.5174 14.5963C13.7807 14.333 13.931 13.9773 13.9361 13.605V5.86499L7.54611 0.934998Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"home"===this.props.name&&n.createElement("svg",{width:"13",height:"14",viewBox:"0 0 13 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.56547 0.764991L0.975466 5.115V11.945C0.974867 12.2743 1.10424 12.5905 1.33547 12.825C1.57112 13.0544 1.88658 13.1835 2.21546 13.185H4.83547V7.665H8.28546V13.185H10.9055C11.2348 13.1856 11.551 13.0562 11.7855 12.825C11.9031 12.7107 11.9965 12.5739 12.0601 12.4227C12.1237 12.2715 12.1561 12.109 12.1555 11.945V5.115L6.56547 0.764991Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"key"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.96613 14.385C6.75553 14.385 8.20613 12.9344 8.20613 11.145C8.20613 9.3556 6.75553 7.905 4.96613 7.905C3.17672 7.905 1.72614 9.3556 1.72614 11.145C1.72614 12.9344 3.17672 14.385 4.96613 14.385Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.5461 1.565L7.2561 8.845",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M13.3461 5.735L15.2061 3.875",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"lock-open"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},n.createElement("g",{fill:"none"},n.createElement("rect",{height:"7.37",rx:".75",stroke:"var(--icon-color)",strokeLinejoin:"round",strokeWidth:"var(--icon-stroke-width)",width:"9.81",x:"3.09",y:"7.43"}),n.createElement("path",{d:"m14.39 6.15v-1.61c0-1.85-.68-3.35-1.52-3.35-.84 0-1.52 1.5-1.52 3.35v2.89",stroke:"var(--icon-color)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"var(--icon-stroke-width)"}),n.createElement("path",{d:"m0 0h16v16h-16z"}))),"lock"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 12 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M10.2155 7.41H1.90546C1.49124 7.41 1.15546 7.74579 1.15546 8.16V14.03C1.15546 14.4442 1.49124 14.78 1.90546 14.78H10.2155C10.6297 14.78 10.9655 14.4442 10.9655 14.03V8.16C10.9655 7.74579 10.6297 7.41 10.2155 7.41Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.72546 7.39999V4.52C2.72546 3.63153 3.07841 2.77945 3.70666 2.1512C4.3349 1.52295 5.18699 1.17 6.07546 1.17V1.17C6.96394 1.17 7.81603 1.52295 8.44427 2.1512C9.07252 2.77945 9.42546 3.63153 9.42546 4.52V7.39999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"settings"===this.props.name&&n.createElement("svg",{width:"13",height:"16",viewBox:"0 0 13 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M0.786133 3.105H3.55614",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.98615 3.105H11.7262",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.786133 7.97501H8.09613",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5361 7.97501H11.7261",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M0.786133 12.835H3.82614",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.2561 12.835H11.7261",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.55615 1.285V4.935",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.09613 6.145V9.795",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.82617 11.015V14.665",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"tag"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.62 8.39256L14.93 4.53256C14.9802 4.38718 14.989 4.23071 14.9554 4.08062C14.9219 3.93053 14.8473 3.79272 14.74 3.68255L12.38 1.32255C12.2698 1.21524 12.132 1.14064 11.9819 1.10709C11.8318 1.07354 11.6754 1.08236 11.53 1.13255L7.66999 2.44256C7.54938 2.48377 7.43989 2.5522 7.34999 2.64256L1.43999 8.62255C1.3638 8.6987 1.30335 8.78912 1.26211 8.88863C1.22087 8.98815 1.19965 9.09483 1.19965 9.20255C1.19965 9.31028 1.22087 9.41694 1.26211 9.51646C1.30335 9.61598 1.3638 9.70641 1.43999 9.78256L6.34999 14.6226C6.42614 14.6987 6.51656 14.7592 6.61608 14.8004C6.7156 14.8417 6.82227 14.8629 6.92999 14.8629C7.03772 14.8629 7.14439 14.8417 7.2439 14.8004C7.34342 14.7592 7.43384 14.6987 7.50999 14.6226L13.44 8.69256C13.5206 8.60648 13.582 8.50421 13.62 8.39256V8.39256Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M11.78 5.34255C12.3433 5.34255 12.8 4.88588 12.8 4.32255C12.8 3.75922 12.3433 3.30256 11.78 3.30256C11.2167 3.30256 10.76 3.75922 10.76 4.32255C10.76 4.88588 11.2167 5.34255 11.78 5.34255Z",fill:"var(--icon-color)",stroke:"none"})),"2-columns-narrow-right"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.4927 1.01001H2.75269C1.90769 1.01001 1.22266 1.69501 1.22266 2.54001V13.28C1.22266 14.125 1.90769 14.81 2.75269 14.81H13.4927C14.3377 14.81 15.0226 14.125 15.0226 13.28V2.54001C15.0226 1.69501 14.3377 1.01001 13.4927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.4227 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"2+2-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.0927 1.01001H2.35266C1.50767 1.01001 0.822693 1.69501 0.822693 2.54001V13.28C0.822693 14.125 1.50767 14.81 2.35266 14.81H13.0927C13.9376 14.81 14.6227 14.125 14.6227 13.28V2.54001C14.6227 1.69501 13.9376 1.01001 13.0927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.0226 1.01001V7.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.35266 7.91V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.6227 7.91H0.822693",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"3+1-columns"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.2927 1.66H2.55267C1.70768 1.66 1.02264 2.34501 1.02264 3.19V13.93C1.02264 14.775 1.70768 15.46 2.55267 15.46H13.2927C14.1377 15.46 14.8227 14.775 14.8227 13.93V3.19C14.8227 2.34501 14.1377 1.66 13.2927 1.66Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.62268 1.66V6.51999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.2227 1.66V6.51999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.8227 6.51999H1.02264",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"bug"===this.props.name&&n.createElement("svg",{width:"15",height:"16",viewBox:"0 0 15 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.73268 5.40999C8.15113 5.40867 8.56568 5.48993 8.95265 5.64916C9.33962 5.80838 9.6914 6.04242 9.98775 6.33785C10.2841 6.63327 10.5192 6.98427 10.6796 7.37074C10.8401 7.75721 10.9227 8.17154 10.9227 8.58998V9.98998C10.9227 10.836 10.5866 11.6474 9.98836 12.2457C9.39012 12.8439 8.57872 13.18 7.73268 13.18C7.31424 13.18 6.89991 13.0974 6.51344 12.937C6.12697 12.7765 5.77597 12.5414 5.48055 12.245C5.18512 11.9487 4.95111 11.5969 4.79189 11.21C4.63267 10.823 4.55137 10.4084 4.55269 9.98998V8.58998C4.55269 7.74659 4.88772 6.93775 5.48409 6.34139C6.08045 5.74502 6.88929 5.40999 7.73268 5.40999V5.40999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.74268 5.41V4.69C5.74268 4.2577 5.91441 3.8431 6.22009 3.53741C6.52578 3.23173 6.94038 3.06 7.37268 3.06H8.09265C8.52495 3.06 8.93955 3.23173 9.24524 3.53741C9.55092 3.8431 9.72266 4.2577 9.72266 4.69V5.41",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.06268 1.45999C6.99268 1.64999 7.61268 2.11999 7.62268 2.64999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.40265 1.45999C8.47265 1.64999 7.85265 2.11999 7.84265 2.64999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.8627 7.95999L13.5427 6.51001L12.5427 4.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.9227 9.29999H13.0226L14.1627 11.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.5427 11.51L12.0126 12.78L10.5427 14.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.52264 7.95999L1.84265 6.51001L2.84265 4.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.46265 9.29999H2.36267L1.22266 11.8",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.84265 11.51L3.36267 12.78L4.84265 14.91",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"cloud"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.2073 5.06497H11.3573C11.1192 4.10573 10.616 3.2328 9.90537 2.54587C9.19474 1.85894 8.30523 1.38569 7.33847 1.18018C6.3717 0.974661 5.36663 1.04515 4.43801 1.38361C3.5094 1.72206 2.69467 2.31484 2.08688 3.09424C1.47909 3.87364 1.10273 4.80825 1.00077 5.79135C0.898818 6.77445 1.07538 7.76642 1.51029 8.65396C1.94521 9.5415 2.62095 10.2889 3.46035 10.8107C4.29975 11.3325 5.26897 11.6077 6.25733 11.605H12.2073C13.0746 11.605 13.9063 11.2605 14.5196 10.6472C15.1328 10.034 15.4773 9.20222 15.4773 8.33496C15.4773 7.4677 15.1328 6.63598 14.5196 6.02274C13.9063 5.40949 13.0746 5.06497 12.2073 5.06497V5.06497Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-caret-left"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6927 1.01001H2.9527C2.1077 1.01001 1.42267 1.69501 1.42267 2.54001V13.28C1.42267 14.125 2.1077 14.81 2.9527 14.81H13.6927C14.5377 14.81 15.2227 14.125 15.2227 13.28V2.54001C15.2227 1.69501 14.5377 1.01001 13.6927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.02271 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.9327 5.59L9.61267 7.91L11.9327 10.23",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-caret-right"===this.props.name&&n.createElement("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.8927 1.01001H3.15265C2.30765 1.01001 1.62268 1.69501 1.62268 2.54001V13.28C1.62268 14.125 2.30765 14.81 3.15265 14.81H13.8927C14.7377 14.81 15.4227 14.125 15.4227 13.28V2.54001C15.4227 1.69501 14.7377 1.01001 13.8927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.22266 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M9.81268 10.23L12.1327 7.91L9.81268 5.59",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns-narrow-left"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.6927 1.01001H2.95267C2.10767 1.01001 1.42267 1.69501 1.42267 2.54001V13.28C1.42267 14.125 2.10767 14.81 2.95267 14.81H13.6927C14.5377 14.81 15.2227 14.125 15.2227 13.28V2.54001C15.2227 1.69501 14.5377 1.01001 13.6927 1.01001Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.02264 1.01001V14.81",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"columns"===this.props.name&&n.createElement("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M13.8926 1.66H3.15265C2.30765 1.66 1.62265 2.34501 1.62265 3.19V13.93C1.62265 14.775 2.30765 15.46 3.15265 15.46H13.8926C14.7376 15.46 15.4227 14.775 15.4227 13.93V3.19C15.4227 2.34501 14.7376 1.66 13.8926 1.66Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.22266 1.66V15.46",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.8227 1.66V15.46",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"dashboard-2"===this.props.name&&n.createElement("svg",{width:"17",height:"13",viewBox:"0 0 17 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.1126 3.82999C15.0921 5.06821 15.6243 6.6012 15.6227 8.17999C15.6218 9.26541 15.3721 10.3362 14.8927 11.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M2.20267 11.28C1.72784 10.3157 1.48147 9.25491 1.48267 8.18001C1.48722 7.09544 1.74051 6.02639 2.22309 5.0551C2.70566 4.0838 3.40465 3.23616 4.26624 2.57741C5.12783 1.91865 6.12907 1.46634 7.19291 1.25529C8.25675 1.04424 9.35483 1.08005 10.4027 1.36",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.55267 8.17999L12.4326 2.34",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M15.6227 8.17999H14.0527",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.55267 1.12V2.69",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.56262 3.19L4.67264 4.29999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.49268 8.17999H3.06268",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"dice"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M7.14615 5.29L1.81615 6.97C1.50297 7.07105 1.24229 7.29153 1.09065 7.58358C0.939009 7.87563 0.908637 8.2157 1.00615 8.52999L2.68616 13.86C2.78515 14.175 3.00477 14.4381 3.29706 14.5917C3.58934 14.7453 3.93054 14.7771 4.24615 14.68L9.57616 13C9.73199 12.9511 9.87662 12.8719 10.0018 12.7669C10.1269 12.6619 10.23 12.5333 10.3053 12.3883C10.3806 12.2433 10.4265 12.0849 10.4403 11.9222C10.4542 11.7595 10.4358 11.5956 10.3862 11.44L8.70616 6.1C8.60511 5.78683 8.38463 5.52612 8.09257 5.37448C7.80052 5.22283 7.46044 5.19249 7.14615 5.29V5.29Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.6762 10.09C11.8345 10.1286 11.9988 10.1353 12.1597 10.1098C12.3207 10.0843 12.4749 10.0271 12.6135 9.94154C12.7521 9.85595 12.8724 9.74366 12.9673 9.61122C13.0621 9.47877 13.1297 9.32879 13.1662 9.17L14.4562 3.72001C14.5313 3.40046 14.4766 3.06417 14.3041 2.78486C14.1317 2.50556 13.8555 2.30603 13.5362 2.23002L8.09618 0.940016C7.77417 0.867702 7.43664 0.924619 7.15614 1.09852C6.87565 1.27243 6.67459 1.54943 6.59618 1.87001L6.13617 3.87001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.43617 9.62C3.878 9.62 4.23618 9.26184 4.23618 8.82001C4.23618 8.37818 3.878 8.01999 3.43617 8.01999C2.99434 8.01999 2.63617 8.37818 2.63617 8.82001C2.63617 9.26184 2.99434 9.62 3.43617 9.62Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M6.88617 8.51999C7.328 8.51999 7.68617 8.16183 7.68617 7.72C7.68617 7.27817 7.328 6.92001 6.88617 6.92001C6.44434 6.92001 6.08618 7.27817 6.08618 7.72C6.08618 8.16183 6.44434 8.51999 6.88617 8.51999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M5.69617 10.79C6.13799 10.79 6.49617 10.4318 6.49617 9.98999C6.49617 9.54816 6.13799 9.19 5.69617 9.19C5.25434 9.19 4.89618 9.54816 4.89618 9.98999C4.89618 10.4318 5.25434 10.79 5.69617 10.79Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M4.52618 13.05C4.96801 13.05 5.32619 12.6918 5.32619 12.25C5.32619 11.8082 4.96801 11.45 4.52618 11.45C4.08436 11.45 3.7262 11.8082 3.7262 12.25C3.7262 12.6918 4.08436 13.05 4.52618 13.05Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M7.96614 11.97C8.40797 11.97 8.76614 11.6118 8.76614 11.17C8.76614 10.7282 8.40797 10.37 7.96614 10.37C7.52431 10.37 7.16614 10.7282 7.16614 11.17C7.16614 11.6118 7.52431 11.97 7.96614 11.97Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M11.2362 8.48999C11.678 8.48999 12.0362 8.13183 12.0362 7.69C12.0362 7.24817 11.678 6.89001 11.2362 6.89001C10.7943 6.89001 10.4362 7.24817 10.4362 7.69C10.4362 8.13183 10.7943 8.48999 11.2362 8.48999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M8.54616 4.14001C8.98799 4.14001 9.34616 3.78182 9.34616 3.34C9.34616 2.89817 8.98799 2.54001 8.54616 2.54001C8.10433 2.54001 7.74615 2.89817 7.74615 3.34C7.74615 3.78182 8.10433 4.14001 8.54616 4.14001Z",fill:"var(--icon-color)",stroke:"none"})),"face-ID"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M1.35001 5.07001V2.51001C1.34869 2.33845 1.38134 2.16831 1.44608 2.00943C1.51082 1.85055 1.60637 1.70607 1.72722 1.58429C1.84807 1.46251 1.99183 1.36585 2.15021 1.2999C2.30859 1.23394 2.47845 1.19998 2.65002 1.19998H4.95001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.72 1.19998H13.29C13.4616 1.19998 13.6315 1.23394 13.7898 1.2999C13.9482 1.36585 14.092 1.46251 14.2128 1.58429C14.3337 1.70607 14.4292 1.85055 14.494 2.00943C14.5587 2.16831 14.5913 2.33845 14.59 2.51001V4.79999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M14.59 10.59V13.16C14.59 13.5057 14.4534 13.8374 14.2098 14.0828C13.9663 14.3282 13.6357 14.4674 13.29 14.47H10.99",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.22 14.45H2.67C2.3243 14.4473 1.99366 14.3082 1.75014 14.0628C1.50663 13.8174 1.36999 13.4857 1.37 13.14V10.84",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.94 5.53V7.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M11.01 5.53V7.13",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.97 5.39999V8.23999C7.97002 8.38679 7.9124 8.52774 7.80953 8.63248C7.70666 8.73721 7.56678 8.79737 7.42 8.79999H7.31",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.1 10.28C9.49291 10.8839 8.67138 11.223 7.81503 11.223C6.95867 11.223 6.13715 10.8839 5.53003 10.28",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"fingerprint"===this.props.name&&n.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.68002 16C7.83861 15.3719 7.15609 14.5553 6.68721 13.6158C6.21833 12.6763 5.97612 11.64 5.98003 10.59C6.01806 10.0205 6.27111 9.48669 6.68794 9.09676C7.10478 8.70683 7.65424 8.48989 8.22502 8.48989C8.79581 8.48989 9.34526 8.70683 9.7621 9.09676C10.1789 9.48669 10.432 10.0205 10.47 10.59C10.47 10.8841 10.528 11.1754 10.6405 11.4472C10.7531 11.719 10.9181 11.9659 11.1261 12.1739C11.3341 12.3819 11.581 12.5469 11.8528 12.6595C12.1246 12.772 12.4159 12.83 12.71 12.83C13.0042 12.83 13.2955 12.772 13.5672 12.6595C13.839 12.5469 14.0859 12.3819 14.2939 12.1739C14.5019 11.9659 14.6669 11.719 14.7795 11.4472C14.8921 11.1754 14.95 10.8841 14.95 10.59C14.9417 8.90033 14.2971 7.27584 13.1447 6.04012C11.9923 4.8044 10.4167 4.04814 8.73169 3.92202C7.04672 3.7959 5.37609 4.30918 4.05258 5.35958C2.72907 6.40997 1.84984 7.9204 1.59003 9.58998",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M12.6801 10.59C12.6801 9.39652 12.2059 8.25193 11.362 7.40802C10.5181 6.56411 9.37353 6.09 8.18005 6.09C6.98658 6.09 5.84198 6.56411 4.99807 7.40802C4.15416 8.25193 3.68005 9.39652 3.68005 10.59C3.67942 12.0766 4.04704 13.5402 4.75005 14.85",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M3.52002 2.98998C5.11912 2.00811 6.98513 1.55064 8.85704 1.68153C10.7289 1.81242 12.5131 2.52514 13.96 3.71999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"}),n.createElement("path",{d:"M8.22003 10.59C8.2202 11.6349 8.58483 12.6471 9.2511 13.4521C9.91736 14.2571 10.8435 14.8045 11.87 15",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeMiterlimit:"10",strokeLinecap:"round"})),"folder-root"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.7744C14.0001 10.9354 13.9668 11.0948 13.9022 11.2436C13.8375 11.3923 13.7427 11.5275 13.6232 11.6413C13.3765 11.8699 13.0463 11.9985 12.7021 12H2.29791C1.95367 11.9985 1.62347 11.8699 1.37681 11.6413C1.25728 11.5275 1.16248 11.3923 1.09782 11.2436C1.03317 11.0948 0.999929 10.9354 1 10.7744V2.22555C0.999929 2.06459 1.03317 1.90517 1.09782 1.75643C1.16248 1.6077 1.25728 1.47257 1.37681 1.35871C1.62347 1.13012 1.95367 1.00152 2.29791 1H5.55314L6.85105 2.83333H12.7021C13.0463 2.83485 13.3765 2.96345 13.6232 3.19204C13.7427 3.30589 13.8375 3.44106 13.9022 3.58979C13.9668 3.73853 14.0001 3.89792 14 4.05888V10.7744Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M7.49995 4.91578L4.25519 7.26721V10.9937C4.25519 11.1733 4.33018 11.3457 4.46366 11.4727C4.59714 11.5998 4.77817 11.6712 4.96694 11.6712H6.46372V8.68208H8.45245V11.6712H9.9597C10.0532 11.6715 10.1458 11.6541 10.232 11.6199C10.3183 11.5856 10.3965 11.5353 10.4621 11.4719C10.5938 11.344 10.6688 11.1727 10.6715 10.9937V7.26721L7.49995 4.91578Z",fill:"var(--icon-color)",stroke:"none"})),"folder-shared"===this.props.name&&n.createElement("svg",{width:"15",height:"13",viewBox:"0 0 15 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14 10.7744C14.0001 10.9354 13.9668 11.0948 13.9022 11.2436C13.8375 11.3923 13.7427 11.5275 13.6232 11.6413C13.3765 11.8699 13.0463 11.9985 12.7021 12H2.2979C1.95366 11.9985 1.62347 11.8699 1.37681 11.6413C1.25728 11.5275 1.16248 11.3923 1.09782 11.2436C1.03317 11.0948 0.999929 10.9354 1 10.7744V2.22555C0.999929 2.06459 1.03317 1.90517 1.09782 1.75643C1.16248 1.6077 1.25728 1.47256 1.37681 1.35871C1.62347 1.13012 1.95366 1.00152 2.2979 1H5.55314L6.85104 2.83333H12.7021C13.0463 2.83485 13.3765 2.96345 13.6232 3.19204C13.7427 3.30589 13.8375 3.44106 13.9022 3.58979C13.9668 3.73853 14.0001 3.89791 14 4.05888V10.7744Z",fill:"var(--icon-background-color)",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.3889 12V10.7246C10.3922 10.3531 10.2418 9.99517 9.97022 9.72827C9.83273 9.59843 9.66922 9.49625 9.48941 9.42779C9.30959 9.35932 9.11715 9.32597 8.92353 9.32972H6.05557C5.8655 9.3284 5.67704 9.36305 5.50116 9.43168C5.32528 9.50031 5.1655 9.60154 5.03109 9.72948C4.89668 9.85743 4.79034 10.0095 4.71824 10.177C4.64615 10.3444 4.60973 10.5238 4.61112 10.7047V11.9801",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M7.49998 7.97461C7.78567 7.97461 8.06493 7.89397 8.30247 7.74288C8.54001 7.5918 8.72515 7.37705 8.83448 7.1258C8.9438 6.87456 8.97241 6.59808 8.91667 6.33136C8.86094 6.06464 8.72337 5.81965 8.52136 5.62735C8.31935 5.43505 8.06198 5.30409 7.78178 5.25103C7.50159 5.19798 7.21116 5.22523 6.94722 5.3293C6.68329 5.43337 6.45769 5.60961 6.29897 5.83573C6.14025 6.06184 6.05554 6.32766 6.05554 6.59961C6.05554 6.96428 6.20772 7.31404 6.47861 7.5719C6.74949 7.82977 7.11689 7.97461 7.49998 7.97461Z",fill:"var(--icon-color)",stroke:"none"})),"heart-o"===this.props.name&&n.createElement("svg",{width:"17",height:"15",viewBox:"0 0 17 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.46701 14.12C8.39968 14.1229 8.33253 14.1109 8.27032 14.085C8.20811 14.0591 8.15238 14.0198 8.10702 13.97L2.98703 9.04L2.75701 8.82L2.30703 8.29C2.10475 8.03461 1.91773 7.76746 1.747 7.48998C1.56775 7.17196 1.42039 6.837 1.30703 6.48998C1.1817 6.1264 1.11749 5.74455 1.11703 5.35998C1.08303 4.84662 1.15416 4.33172 1.32611 3.84682C1.49806 3.36192 1.76721 2.91725 2.11703 2.54C2.50658 2.19036 2.9619 1.92184 3.45639 1.75014C3.95087 1.57845 4.4746 1.50701 4.997 1.54C5.33771 1.5472 5.67517 1.60793 5.997 1.71999C6.34988 1.83562 6.68607 1.99697 6.997 2.19997C7.26741 2.3717 7.52783 2.5587 7.777 2.76C7.99865 2.93314 8.20908 3.12018 8.40701 3.32C8.59918 3.11788 8.80644 2.93068 9.027 2.76C9.247 2.58 9.50703 2.39997 9.80703 2.19997C10.1184 1.99766 10.4545 1.83635 10.807 1.71999C11.1286 1.60695 11.4662 1.54619 11.807 1.54C12.3295 1.50645 12.8534 1.57762 13.3479 1.74935C13.8425 1.92107 14.2978 2.18989 14.687 2.54C15.0388 2.9159 15.3092 3.36039 15.4813 3.84563C15.6534 4.33088 15.7234 4.84641 15.687 5.35998C15.6358 6.06837 15.4442 6.75949 15.1231 7.39303C14.802 8.02656 14.358 8.58983 13.817 9.04998L8.70703 13.97C8.64352 14.0425 8.56002 14.0947 8.46701 14.12Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"heart"===this.props.name&&n.createElement("svg",{width:"16",height:"14",viewBox:"0 0 16 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.05462 13.12C7.98595 13.1217 7.91766 13.1093 7.854 13.0835C7.79034 13.0577 7.73269 13.0191 7.68462 12.97L2.57461 8.04L2.34463 7.82L1.89462 7.29C1.68905 7.03708 1.5019 6.7697 1.33462 6.48998C1.15536 6.17196 1.00798 5.837 0.894616 5.48998C0.769279 5.1264 0.705073 4.74455 0.704614 4.35998C0.670613 3.84662 0.74177 3.33172 0.91372 2.84682C1.08567 2.36192 1.35479 1.91725 1.70461 1.54C2.09386 1.18989 2.54913 0.921074 3.04369 0.74935C3.53826 0.577625 4.06216 0.506451 4.58462 0.539999C4.92533 0.547199 5.26278 0.607934 5.58462 0.719992C5.93749 0.835618 6.27369 0.996973 6.58462 1.19997C6.88462 1.39997 7.14462 1.58 7.36462 1.76C7.58627 1.93314 7.79669 2.12018 7.99462 2.32C8.18679 2.11788 8.39405 1.93068 8.61462 1.76C8.83462 1.58 9.09462 1.39997 9.39462 1.19997C9.70594 0.997665 10.042 0.836354 10.3946 0.719992C10.716 0.606272 11.0537 0.545489 11.3946 0.539999C11.9171 0.506451 12.441 0.577625 12.9355 0.74935C13.4301 0.921074 13.8854 1.18989 14.2746 1.54C14.6264 1.9159 14.8968 2.36039 15.0689 2.84563C15.241 3.33088 15.311 3.84641 15.2746 4.35998C15.2235 5.06837 15.0317 5.75949 14.7107 6.39303C14.3896 7.02656 13.9457 7.58983 13.4046 8.04998L8.29461 12.97C8.23111 13.0425 8.14763 13.0947 8.05462 13.12V13.12Z",fill:"var(--icon-color)",stroke:"none"})),"heartbeat"===this.props.name&&n.createElement("svg",{width:"16",height:"14",viewBox:"0 0 16 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M14.524 7.18165H9.754L8.55402 13.14L6.14401 1.69998L4.95401 7.03865H1.284",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"Pin"===this.props.name&&n.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.98903 8.67999L10.849 5.16L11.019 5.32999C11.2505 5.55539 11.5609 5.68152 11.884 5.68152C12.2072 5.68152 12.5175 5.55539 12.749 5.32999C12.863 5.21661 12.9535 5.08183 13.0152 4.93338C13.0769 4.78493 13.1087 4.62576 13.1087 4.465C13.1087 4.30423 13.0769 4.14506 13.0152 3.99661C12.9535 3.84817 12.863 3.71338 12.749 3.60001L10.419 1.26999C10.1896 1.04058 9.87847 0.911713 9.55403 0.911713C9.22959 0.911713 8.91844 1.04058 8.68903 1.26999C8.45961 1.4994 8.33073 1.81057 8.33073 2.13501C8.33073 2.45945 8.45961 2.77059 8.68903 3L8.86903 3.16998L5.33904 5.03C4.87276 4.77332 4.33557 4.67547 3.80873 4.75125C3.28189 4.82703 2.79407 5.07229 2.41904 5.44998L2.00903 5.85001L8.16904 12.01L8.56903 11.61C8.94755 11.2334 9.19324 10.7438 9.26901 10.2152C9.34478 9.68667 9.2465 9.14779 8.98903 8.67999V8.67999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.89906 10.13L1.29907 12.73",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"plug"===this.props.name&&n.createElement("svg",{width:"13",height:"15",viewBox:"0 0 13 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M4.01277 5.26999C3.52129 5.84389 3.26446 6.58213 3.29362 7.33716C3.32278 8.09219 3.63577 8.8084 4.17005 9.34268C4.70434 9.87697 5.42058 10.19 6.17561 10.2191C6.93064 10.2483 7.66884 9.99148 8.24275 9.5L10.3528 7.38998L6.13276 3.16L4.01277 5.26999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M4.01273 9.5L1.96271 11.5C1.7532 11.7098 1.61057 11.9769 1.5528 12.2677C1.49503 12.5585 1.52473 12.8599 1.63816 13.1339C1.75158 13.4078 1.94364 13.642 2.19007 13.8068C2.4365 13.9716 2.72623 14.0597 3.02271 14.06H12.0227",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M8.17273 2.82999L9.46271 1.54001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M10.6927 5.35001L11.9828 4.06",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M5.58276 2.62L10.8528 7.89001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"server"===this.props.name&&n.createElement("svg",{width:"15",height:"14",viewBox:"0 0 15 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M12.2891 8.79999H2.47908C1.93232 8.79999 1.48907 9.24325 1.48907 9.79001V11.77C1.48907 12.3168 1.93232 12.76 2.47908 12.76H12.2891C12.8358 12.76 13.2791 12.3168 13.2791 11.77V9.79001C13.2791 9.24325 12.8358 8.79999 12.2891 8.79999Z",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.48907 7.01001V5.82999C1.48907 5.56477 1.59443 5.31043 1.78197 5.12289C1.9695 4.93536 2.22386 4.82999 2.48907 4.82999H12.2991C12.5643 4.82999 12.8186 4.93536 13.0062 5.12289C13.1937 5.31043 13.2991 5.56477 13.2991 5.82999V7.01001",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M1.48907 3.04999V1.87C1.48907 1.60478 1.59443 1.35044 1.78197 1.1629C1.9695 0.975366 2.22386 0.869995 2.48907 0.869995H12.2991C12.5643 0.869995 12.8186 0.975366 13.0062 1.1629C13.1937 1.35044 13.2991 1.60478 13.2991 1.87V3.04999",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M3.46906 3.60999C3.88327 3.60999 4.21906 3.2742 4.21906 2.85999C4.21906 2.44577 3.88327 2.10999 3.46906 2.10999C3.05484 2.10999 2.71906 2.44577 2.71906 2.85999C2.71906 3.2742 3.05484 3.60999 3.46906 3.60999Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M3.46906 7.57001C3.88327 7.57001 4.21906 7.23422 4.21906 6.82001C4.21906 6.40579 3.88327 6.07001 3.46906 6.07001C3.05484 6.07001 2.71906 6.40579 2.71906 6.82001C2.71906 7.23422 3.05484 7.57001 3.46906 7.57001Z",fill:"var(--icon-color)",stroke:"none"}),n.createElement("path",{d:"M3.46906 11.53C3.88327 11.53 4.21906 11.1942 4.21906 10.78C4.21906 10.3658 3.88327 10.03 3.46906 10.03C3.05484 10.03 2.71906 10.3658 2.71906 10.78C2.71906 11.1942 3.05484 11.53 3.46906 11.53Z",fill:"var(--icon-color)",stroke:"none"})),"share-2"===this.props.name&&n.createElement("svg",{width:"17",height:"14",viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M8.11267 11.7L6.36267 13.21L6.32269 7.70999L1.16266 5.44L15.9727 1.45999L10.7827 12.82L8.21265 8.38",fill:"none",stroke:"var(--icon-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"failed"===this.props.name&&n.createElement("svg",{width:"127",height:"127",viewBox:"0 0 127 127",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"63.25",cy:"63.1909",r:"61",stroke:"var(--icon-failed-color)",strokeWidth:"4"}),n.createElement("g",{clipPath:"url(#clip0_174_687280)"},n.createElement("path",{d:"M63.249 32.4197L63.249 69.784",stroke:"var(--icon-failed-color)",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M63.249 85.2234H63.1493",stroke:"var(--icon-failed-color)",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})),n.createElement("defs",null,n.createElement("clipPath",{id:"clip0_174_687280"},n.createElement("rect",{width:"68.1081",height:"68.1081",fill:"var(--icon-exclamation-color)",transform:"translate(29.1959 29.137)"})))),"success"===this.props.name&&n.createElement("svg",{width:"127",height:"127",viewBox:"0 0 127 127",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"63.25",cy:"63.1909",r:"61",stroke:"var(--icon-success-color)",strokeWidth:"4"}),n.createElement("path",{d:"M85.9519 46.1641L54.7357 77.3803L40.5465 63.1911",stroke:"var(--icon-success-color)",strokeWidth:"6.69935",strokeLinecap:"round",strokeLinejoin:"round"})),"exclamation"===this.props.name&&n.createElement("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M6.70175 0.0187378C5.51507 0.0187378 4.35498 0.370631 3.36829 1.02992C2.38159 1.68921 1.61254 2.62628 1.15842 3.72264C0.704293 4.81899 0.585428 6.02539 0.816939 7.18927C1.04845 8.35316 1.62007 9.42228 2.45918 10.2614C3.29829 11.1005 4.36718 11.6719 5.53107 11.9035C6.69495 12.135 7.90159 12.0161 8.99794 11.562C10.0943 11.1079 11.0313 10.3389 11.6905 9.35217C12.3498 8.36548 12.7017 7.20539 12.7017 6.0187C12.7017 4.42741 12.0695 2.90129 10.9443 1.77607C9.81911 0.650856 8.29305 0.0187378 6.70175 0.0187378Z",fill:"var(--icon-exclamation-background-color)"}),n.createElement("path",{d:"M6.71118 3.0694L6.71118 6.6279",stroke:"var(--icon-exclamation-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"}),n.createElement("path",{d:"M6.71118 9H6.70169",stroke:"var(--icon-exclamation-color)",vectorEffect:"non-scaling-stroke",strokeWidth:"var(--icon-stroke-width)",strokeLinecap:"round",strokeLinejoin:"round"})),"spinner"===this.props.name&&n.createElement("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("circle",{cx:"8",cy:"8",r:"8",transform:"translate(1 1)",fill:"none",stroke:"var(--spinner-background)",strokeWidth:"var(--spinner-stroke-width)"}),n.createElement("ellipse",{id:"loading",rx:"8",ry:"8",transform:"translate(9 9)",fill:"none",stroke:"var(--spinner-color)",strokeWidth:"var(--spinner-stroke-width)",strokeLinecap:"round"})),"timer"===this.props.name&&n.createElement("svg",{width:"16",height:"16",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("ellipse",{rx:"8",ry:"8",transform:"translate(10 10)",fill:"none",stroke:"var(--timer-background)",strokeWidth:"var(--timer-stroke-width)"}),n.createElement("ellipse",{id:"timer-progress",rx:"8",ry:"8",transform:"matrix(0-1 1 0 10 10)",fill:"none",stroke:"var(--timer-color)",strokeLinecap:"round",strokeWidth:"var(--timer-stroke-width)"})))}}_e.defaultProps={big:!1,baseline:!1,dim:!1,onClick:()=>{}},_e.propTypes={name:o().string,big:o().bool,dim:o().bool,baseline:o().bool,onClick:o().func,style:o().object};const Re=_e;class Ie extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleCloseClick=this.handleCloseClick.bind(this)}handleCloseClick(){this.props.onClose()}render(){return n.createElement("button",{type:"button",disabled:this.props.disabled,className:"dialog-close button button-transparent",onClick:this.handleCloseClick},n.createElement(Re,{name:"close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"Close")))}}Ie.propTypes={onClose:o().func,disabled:o().bool};const Ae=(0,k.Z)("common")(Ie);class Pe extends n.Component{render(){return n.createElement("div",{className:"tooltip",tabIndex:"0"},this.props.children,n.createElement("span",{className:`tooltip-text ${this.props.direction}`},this.props.message))}}Pe.defaultProps={direction:"right"},Pe.propTypes={children:o().any,message:o().any.isRequired,direction:o().string};const De=Pe;class Le extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleKeyDown=this.handleKeyDown.bind(this),this.handleClose=this.handleClose.bind(this)}handleKeyDown(e){27===e.keyCode&&this.handleClose()}handleClose(){this.props.disabled||this.props.onClose()}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown,{capture:!1})}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown,{capture:!1})}render(){return n.createElement("div",{className:`${this.props.className} dialog-wrapper`},n.createElement("div",{className:"dialog"},n.createElement("div",{className:"dialog-header"},n.createElement("div",{className:"dialog-title-wrapper"},n.createElement("h2",null,n.createElement("span",{className:"dialog-header-title"},this.props.title),this.props.subtitle&&n.createElement("span",{className:"dialog-header-subtitle"},this.props.subtitle)),this.props.tooltip&&""!==this.props.tooltip&&n.createElement(De,{message:this.props.tooltip},n.createElement(Re,{name:"info-circle"}))),n.createElement(Ae,{onClose:this.handleClose,disabled:this.props.disabled})),n.createElement("div",{className:"dialog-content"},this.props.children)))}}Le.propTypes={children:o().node,className:o().string,title:o().string,subtitle:o().string,tooltip:o().string,disabled:o().bool,onClose:o().func};const Te=Le;class Ue extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{showErrorDetails:!1}}bindCallbacks(){this.handleKeyDown=this.handleKeyDown.bind(this),this.handleErrorDetailsToggle=this.handleErrorDetailsToggle.bind(this)}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown,{capture:!0})}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown,{capture:!0})}getTitle(){return this.props.title?this.props.title:this.props.t("There was an unexpected error...")}getMessage(){return this.props.error.message}handleKeyDown(e){27!==e.keyCode&&13!==e.keyCode||(e.stopPropagation(),this.props.onClose())}handleErrorDetailsToggle(){this.setState({showErrorDetails:!this.state.showErrorDetails})}get hasErrorDetails(){return Boolean(this.props.error.data?.body)||Boolean(this.props.error.details)}formatErrors(){const e=this.props.error?.details||this.props.error?.data;return JSON.stringify(e,null,4)}render(){return n.createElement(Te,{className:"dialog-wrapper error-dialog",onClose:this.props.onClose,title:this.getTitle()},n.createElement("div",{className:"form-content"},n.createElement("p",null,this.getMessage()),this.hasErrorDetails&&n.createElement("div",{className:"accordion error-details"},n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleErrorDetailsToggle},n.createElement(v.c,null,"Error details"),n.createElement(Re,{baseline:!0,name:this.state.showErrorDetails?"caret-up":"caret-down"}))),this.state.showErrorDetails&&n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("label",{htmlFor:"js_field_debug",className:"visuallyhidden"},n.createElement(v.c,null,"Error details")),n.createElement("textarea",{id:"js_field_debug",defaultValue:this.formatErrors(),readOnly:!0}))))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"button",className:"button primary warning",onClick:this.props.onClose},"Ok")))}}Ue.propTypes={title:o().string,error:o().object.isRequired,onClose:o().func,t:o().func};const je=(0,k.Z)("common")(Ue);class ze extends n.Component{constructor(){super(),this.bindCallbacks()}bindCallbacks(){this.handleSignOutClick=this.handleSignOutClick.bind(this)}isSelected(e){let t=!1;return"passwords"===e?t=/^\/app\/(passwords|folders)/.test(this.props.location.pathname):"users"===e?t=/^\/app\/(users|groups)/.test(this.props.location.pathname):"administration"===e&&(t=/^\/app\/administration/.test(this.props.location.pathname)),t}isLoggedInUserAdmin(){return this.props.context.loggedInUser&&"admin"===this.props.context.loggedInUser.role.name}async handleSignOutClick(){try{await this.props.context.onLogoutRequested()}catch(e){this.props.dialogContext.open(je,{error:e})}}render(){const e=this.props.rbacContext.canIUseUiAction(ae),t=this.props.rbacContext.canIUseUiAction("Administration.viewWorkspace");return n.createElement("nav",null,n.createElement("div",{className:"primary navigation top"},n.createElement("ul",null,n.createElement("li",{key:"password"},n.createElement("div",{className:"row "+(this.isSelected("passwords")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"passwords link no-border",type:"button",onClick:this.props.navigationContext.onGoToPasswordsRequested},n.createElement("span",null,n.createElement(v.c,null,"passwords"))))))),e&&n.createElement("li",{key:"users"},n.createElement("div",{className:"row "+(this.isSelected("users")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"users link no-border",type:"button",onClick:this.props.navigationContext.onGoToUsersRequested},n.createElement("span",null,n.createElement(v.c,null,"users"))))))),this.isLoggedInUserAdmin()&&t&&n.createElement("li",{key:"administration"},n.createElement("div",{className:"row "+(this.isSelected("administration")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"administration link no-border",type:"button",onClick:this.props.navigationContext.onGoToAdministrationRequested},n.createElement("span",null,n.createElement(v.c,null,"administration"))))))),n.createElement("li",{key:"help"},n.createElement("div",{className:"row"},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("a",{className:"help",href:"https://help.passbolt.com",role:"button",target:"_blank",rel:"noopener noreferrer"},n.createElement("span",null,n.createElement(v.c,null,"help"))))))),n.createElement("li",{key:"logout",className:"right"},n.createElement("div",{className:"row"},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"sign-out link no-border",type:"button",onClick:this.handleSignOutClick},n.createElement("span",null,n.createElement(v.c,null,"sign out"))))))))))}}ze.propTypes={context:o().object,rbacContext:o().any,navigationContext:o().any,history:o().object,location:o().object,dialogContext:o().object};const Me=I(Ne((0,N.EN)(J(g((0,k.Z)("common")(ze))))));class Oe extends n.Component{render(){return n.createElement("div",{className:"col1"},n.createElement("div",{className:"logo-svg no-img"},n.createElement("svg",{height:"25px",role:"img","aria-labelledby":"logo",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"100%",viewBox:"0 30 450 20"},n.createElement("title",{id:"logo"},"Passbolt logo"),n.createElement("g",{clipPath:"url(#clip0)"},n.createElement("path",{d:"M12.1114 26.4938V52.609h7.4182c4.9203 0 8.3266-1.0597 10.3704-3.1035 2.0438-2.0438 3.0278-5.5258 3.0278-10.2947 0-4.6175-.9083-7.8724-2.8007-9.7648-1.8924-2.0438-5.0717-2.9522-9.6891-2.9522h-8.3266zM0 16.5776h23.3144c7.0398 0 12.4899 2.0438 16.4261 6.2071 3.9362 4.1633 5.9043 9.9162 5.9043 17.2588 0 3.0278-.3785 5.8286-1.2111 8.3265-.8327 2.498-2.0438 4.8446-3.7091 6.8884-1.9681 2.498-4.3904 4.3147-7.1155 5.4501-2.8007 1.0598-6.4342 1.5896-11.0516 1.5896H12.1114v16.5775H0v-62.298zM70.0188 53.1389H85.158v-9.462H70.9272c-2.8008 0-4.7689.3785-5.8287 1.1354-1.0597.757-1.5896 2.1195-1.5896 4.0119 0 1.5896.4542 2.7251 1.2869 3.4063.8326.6056 2.5736.9084 5.223.9084zM53.9712 16.5776h24.7527c6.2827 0 10.9759 1.4383 14.1551 4.3147 3.1793 2.8765 4.7689 7.1155 4.7689 12.7927v28.6888H65.0985c-4.5417 0-8.0994-1.1354-10.5217-3.4063s-3.6334-5.5258-3.6334-9.7648c0-5.223 1.3625-8.9322 4.1633-11.203 2.8007-2.2709 7.4939-3.4064 14.0794-3.4064h15.8962v-1.1354c0-2.7251-.8326-4.6175-2.4222-5.7529-1.5897-1.1355-4.3904-1.6653-8.5537-1.6653H53.9712v-9.4621zM107.488 52.8356h25.51c2.271 0 3.936-.3784 4.92-1.0597 1.06-.6813 1.59-1.8167 1.59-3.4063 0-1.5897-.53-2.7251-1.59-3.4064-1.059-.7569-2.725-1.1354-4.92-1.1354h-10.446c-6.207 0-10.37-.9841-12.566-2.8765-2.195-1.8924-3.255-5.2987-3.255-10.0676 0-4.9202 1.287-8.5536 3.937-10.9002 2.649-2.3466 6.737-3.482 12.187-3.482h25.964v9.5377h-21.347c-3.482 0-5.753.3028-6.812.9083-1.06.6056-1.59 1.6654-1.59 3.255 0 1.4382.454 2.498 1.362 3.1035.909.6813 2.423.9841 4.391.9841h10.976c4.996 0 8.856 1.2111 11.43 3.5577 2.649 2.3466 3.936 5.6772 3.936 10.0676 0 4.239-1.211 7.721-3.558 10.3704-2.346 2.6493-5.298 4.0119-9.007 4.0119h-31.112v-9.4621zM159.113 52.8356h25.51c2.271 0 3.936-.3784 4.92-1.0597 1.06-.6813 1.59-1.8167 1.59-3.4063 0-1.5897-.53-2.7251-1.59-3.4064-1.059-.7569-2.725-1.1354-4.92-1.1354h-10.446c-6.207 0-10.37-.9841-12.566-2.8765-2.195-1.8924-3.255-5.2987-3.255-10.0676 0-4.9202 1.287-8.5536 3.937-10.9002 2.649-2.3466 6.737-3.482 12.187-3.482h25.964v9.5377h-21.347c-3.482 0-5.753.3028-6.812.9083-1.06.6056-1.59 1.6654-1.59 3.255 0 1.4382.454 2.498 1.362 3.1035.909.6813 2.423.9841 4.391.9841h10.976c4.996 0 8.856 1.2111 11.43 3.5577 2.649 2.3466 3.936 5.6772 3.936 10.0676 0 4.239-1.211 7.721-3.558 10.3704-2.346 2.6493-5.298 4.0119-9.007 4.0119h-31.263v-9.4621h.151zM223.607 0v16.5775h10.37c4.617 0 8.251.5298 11.052 1.6653 2.8 1.0597 5.147 2.8764 7.115 5.3744 1.665 2.1195 2.876 4.3904 3.709 6.9641.833 2.4979 1.211 5.2987 1.211 8.3265 0 7.3426-1.968 13.0955-5.904 17.2588-3.936 4.1633-9.386 6.2071-16.426 6.2071h-23.315V0h12.188zm7.342 26.4937h-7.418v26.1152h8.326c4.618 0 7.873-.9841 9.69-2.8765 1.892-1.9681 2.8-5.223 2.8-9.9162 0-4.7689-1.059-8.1752-3.103-10.219-1.968-2.1195-5.45-3.1035-10.295-3.1035zM274.172 39.5132c0 4.3904.984 7.721 3.027 10.219 2.044 2.4223 4.845 3.6334 8.554 3.6334 3.633 0 6.434-1.2111 8.554-3.6334 2.044-2.4223 3.103-5.8286 3.103-10.219s-1.059-7.721-3.103-10.1433c-2.044-2.4222-4.845-3.6334-8.554-3.6334-3.633 0-6.434 1.2112-8.554 3.6334-2.043 2.4223-3.027 5.8286-3.027 10.1433zm35.88 0c0 7.1912-2.196 12.9441-6.586 17.2588-4.39 4.2389-10.219 6.4341-17.637 6.4341-7.418 0-13.323-2.1195-17.713-6.4341-4.391-4.3147-6.586-9.9919-6.586-17.1831 0-7.1911 2.195-12.944 6.586-17.2587 4.39-4.3147 10.295-6.5099 17.713-6.5099 7.342 0 13.247 2.1952 17.637 6.5099 4.39 4.239 6.586 9.9919 6.586 17.183zM329.884 62.3737h-12.565V0h12.565v62.3737zM335.712 16.5775h8.554V0h12.111v16.5775h12.793v9.1592h-12.793v18.4699c0 3.4063.606 5.7529 1.742 7.1154 1.135 1.2869 3.179 1.9681 6.055 1.9681h4.996v9.1593h-11.127c-4.466 0-7.873-1.2112-10.295-3.7091-2.346-2.498-3.558-6.0557-3.558-10.6732V25.7367h-8.553v-9.1592h.075z",fill:"var(--icon-color)"}),n.createElement("path",{d:"M446.532 30.884L419.433 5.52579c-2.347-2.19519-6.056-2.19519-8.478 0L393.923 21.4977c4.466 1.6653 7.948 5.3744 9.235 9.9919h23.012c1.211 0 2.119.984 2.119 2.1195v3.482c0 1.2111-.984 2.1195-2.119 2.1195h-2.649v4.9202c0 1.2112-.985 2.1195-2.12 2.1195h-5.829c-1.211 0-2.119-.984-2.119-2.1195v-4.9202h-10.219c-1.287 4.6932-4.769 8.478-9.311 10.0676l17.108 15.9719c2.346 2.1952 6.055 2.1952 8.478 0l27.023-25.3582c2.574-2.4223 2.574-6.5099 0-9.0079z",fill:"#E10600"}),n.createElement("path",{d:"M388.927 28.3862c-1.135 0-2.195.3028-3.179.757-2.271 1.1354-3.86 3.482-3.86 6.2071 0 2.6493 1.438 4.9202 3.633 6.1314.984.5298 2.12.8326 3.331.8326 3.86 0 6.964-3.1035 6.964-6.964.151-3.7848-3.028-6.9641-6.889-6.9641z",fill:"#E10600"})),n.createElement("defs",null,n.createElement("clipPath",{id:"clip0"},n.createElement("path",{fill:"#fff",d:"M0 0h448.5v78.9511H0z"})))),n.createElement("h1",null,n.createElement("span",null,"Passbolt"))))}}const Fe=Oe;function qe(){return qe=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getOrganizationPolicy:()=>{},getRequestor:()=>{},getRequestedDate:()=>{},getPolicy:()=>{},getUserAccountRecoverySubscriptionStatus:()=>{},isAccountRecoveryChoiceRequired:()=>{},isPolicyEnabled:()=>{},loadAccountRecoveryPolicy:()=>{},reloadAccountRecoveryPolicy:()=>{},isReady:()=>{}});class Ve extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{accountRecoveryOrganizationPolicy:null,status:null,isDataLoaded:!1,findAccountRecoveryPolicy:this.findAccountRecoveryPolicy.bind(this),getOrganizationPolicy:this.getOrganizationPolicy.bind(this),getRequestor:this.getRequestor.bind(this),getRequestedDate:this.getRequestedDate.bind(this),getPolicy:this.getPolicy.bind(this),getUserAccountRecoverySubscriptionStatus:this.getUserAccountRecoverySubscriptionStatus.bind(this),setUserAccountRecoveryStatus:this.setUserAccountRecoveryStatus.bind(this),isAccountRecoveryChoiceRequired:this.isAccountRecoveryChoiceRequired.bind(this),isPolicyEnabled:this.isPolicyEnabled.bind(this),loadAccountRecoveryPolicy:this.loadAccountRecoveryPolicy.bind(this),reloadAccountRecoveryPolicy:this.reloadAccountRecoveryPolicy.bind(this),isReady:this.isReady.bind(this)}}async loadAccountRecoveryPolicy(){this.state.isDataLoaded||await this.findAccountRecoveryPolicy()}async reloadAccountRecoveryPolicy(){await this.findAccountRecoveryPolicy()}async findAccountRecoveryPolicy(){if(!this.props.context.siteSettings.canIUse("accountRecovery"))return;const e=this.props.context.loggedInUser;if(!e)return;const t=await this.props.accountRecoveryUserService.getOrganizationAccountRecoverySettings(),a=e.account_recovery_user_setting?.status||Ve.STATUS_PENDING;this.setState({accountRecoveryOrganizationPolicy:t,status:a,isDataLoaded:!0})}isReady(){return this.state.isDataLoaded}getOrganizationPolicy(){return this.state.accountRecoveryOrganizationPolicy}getRequestedDate(){return this.getOrganizationPolicy()?.modified}getRequestor(){return this.getOrganizationPolicy()?.creator}getPolicy(){return this.getOrganizationPolicy()?.policy}getUserAccountRecoverySubscriptionStatus(){return this.state.status}setUserAccountRecoveryStatus(e){this.setState({status:e})}isAccountRecoveryChoiceRequired(){if(null===this.getOrganizationPolicy())return!1;const e=this.getPolicy();return this.state.status===Ve.STATUS_PENDING&&e!==Ve.POLICY_DISABLED}isPolicyEnabled(){const e=this.getPolicy();return e&&e!==Ve.POLICY_DISABLED}static get STATUS_PENDING(){return"pending"}static get POLICY_DISABLED(){return"disabled"}static get POLICY_MANDATORY(){return"mandatory"}static get POLICY_OPT_OUT(){return"opt-out"}static get STATUS_APPROVED(){return"approved"}render(){return n.createElement(We.Provider,{value:this.state},this.props.children)}}Ve.propTypes={context:o().any.isRequired,children:o().any,accountRecoveryUserService:o().object.isRequired};const Be=I(Ve);function Ge(e){return class extends n.Component{render(){return n.createElement(We.Consumer,null,(t=>n.createElement(e,qe({accountRecoveryContext:t},this.props))))}}}const Ke=/img\/avatar\/user(_medium)?\.png$/;class He extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){return{error:!1}}bindCallbacks(){this.handleError=this.handleError.bind(this)}get avatarUrl(){return this.props?.user?.profile?.avatar?.url?.medium}propsHasUrl(){return Boolean(this.avatarUrl)}propsUrlHasProtocol(){return this.avatarUrl.startsWith("https://")||this.avatarUrl.startsWith("http://")}formatUrl(e){return`${this.props.baseUrl}/${e}`}isDefaultAvatarUrlFromApi(){return Ke.test(this.avatarUrl)}getAvatarSrc(){return this.propsHasUrl()?this.propsUrlHasProtocol()?this.avatarUrl:this.formatUrl(this.avatarUrl):null}handleError(){console.error(`Could not load avatar image url: ${this.getAvatarSrc()}`),this.setState({error:!0})}getAltText(){const e=this.props?.user;return e?.first_name&&e?.last_name?this.props.t("Avatar of user {{first_name}} {{last_name}}.",{firstname:e.first_name,lastname:e.last_name}):"..."}render(){const e=this.getAvatarSrc(),t=this.state.error||this.isDefaultAvatarUrlFromApi()||!e;return n.createElement("div",{className:`${this.props.className} ${this.props.attentionRequired?"attention-required":""}`},t&&n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 42 42","aria-labelledby":"svg-title"},n.createElement("title",{id:"svg-title"},this.getAltText()),n.createElement("circle",{fill:"#939598",cx:"21",cy:"21",r:"21"}),n.createElement("path",{fill:"#ffffff",d:"m21,23.04c-4.14,0-7.51-3.37-7.51-7.51s3.37-7.51,7.51-7.51,7.51,3.37,7.51,7.51-3.37,7.51-7.51,7.51Z"}),n.createElement("path",{fill:"#ffffff",d:"m27.17,26.53h-12.33c-2.01,0-3.89.78-5.31,2.2-1.42,1.42-2.2,3.3-2.2,5.31v1.15c3.55,3.42,8.36,5.53,13.67,5.53s10.13-2.11,13.67-5.53v-1.15c0-2.01-.78-3.89-2.2-5.31-1.42-1.42-3.3-2.2-5.31-2.2Z"})),!t&&n.createElement("img",{src:e,onError:this.handleError,alt:this.getAltText()}),this.props.attentionRequired&&n.createElement(Re,{name:"exclamation"}))}}He.defaultProps={className:"avatar user-avatar"},He.propTypes={baseUrl:o().string,user:o().object,attentionRequired:o().bool,className:o().string,t:o().func};const $e=(0,k.Z)("common")(He);class Ze extends Error{constructor(e,t){super(e),this.name="PassboltApiFetchError",this.data=t||{}}}const Ye=Ze;class Je extends Error{constructor(){super("An internal error occurred. The server response could not be parsed. Please contact your administrator."),this.name="PassboltBadResponseError"}}const Qe=Je;class Xe extends Error{constructor(e){super(e=e||"The service is unavailable"),this.name="PassboltServiceUnavailableError"}}const et=Xe,tt=["GET","POST","PUT","DELETE"];class at{constructor(e){if(this.options=e,!this.options.getBaseUrl())throw new TypeError("ApiClient constructor error: baseUrl is required.");if(!this.options.getResourceName())throw new TypeError("ApiClient constructor error: resourceName is required.");try{let e=this.options.getBaseUrl().toString();e.endsWith("/")&&(e=e.slice(0,-1));let t=this.options.getResourceName();t.startsWith("/")&&(t=t.slice(1)),t.endsWith("/")&&(t=t.slice(0,-1)),this.baseUrl=`${e}/${t}`,this.baseUrl=new URL(this.baseUrl)}catch(e){throw new TypeError("ApiClient constructor error: b.")}this.apiVersion="api-version=v2"}getDefaultHeaders(){return{Accept:"application/json","content-type":"application/json"}}buildFetchOptions(){return{credentials:"include",headers:{...this.getDefaultHeaders(),...this.options.getHeaders()}}}async get(e,t){this.assertValidId(e);const a=this.buildUrl(`${this.baseUrl}/${e}`,t||{});return this.fetchAndHandleResponse("GET",a)}async delete(e,t,a,n){let i;this.assertValidId(e),void 0===n&&(n=!1),i=n?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,a||{}):this.buildUrl(`${this.baseUrl}/${e}`,a||{});let s=null;return t&&(s=this.buildBody(t)),this.fetchAndHandleResponse("DELETE",i,s)}async findAll(e){const t=this.buildUrl(this.baseUrl.toString(),e||{});return await this.fetchAndHandleResponse("GET",t)}async create(e,t){const a=this.buildUrl(this.baseUrl.toString(),t||{}),n=this.buildBody(e);return this.fetchAndHandleResponse("POST",a,n)}async update(e,t,a,n){let i;this.assertValidId(e),void 0===n&&(n=!1),i=n?this.buildUrl(`${this.baseUrl}/${e}/dry-run`,a||{}):this.buildUrl(`${this.baseUrl}/${e}`,a||{});let s=null;return t&&(s=this.buildBody(t)),this.fetchAndHandleResponse("PUT",i,s)}async updateAll(e,t={}){const a=this.buildUrl(this.baseUrl.toString(),t),n=e?this.buildBody(e):null;return this.fetchAndHandleResponse("PUT",a,n)}assertValidId(e){if(!e)throw new TypeError("ApiClient.assertValidId error: id cannot be empty");if("string"!=typeof e)throw new TypeError("ApiClient.assertValidId error: id should be a string")}assertMethod(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertValidMethod method should be a string.");if(tt.indexOf(e.toUpperCase())<0)throw new TypeError(`ApiClient.assertValidMethod error: method ${e} is not supported.`)}assertUrl(e){if(!e)throw new TypeError("ApliClient.assertUrl error: url is required.");if(!(e instanceof URL))throw new TypeError("ApliClient.assertUrl error: url should be a valid URL object.");if("https:"!==e.protocol&&"http:"!==e.protocol)throw new TypeError("ApliClient.assertUrl error: url protocol should only be https or http.")}assertBody(e){if("string"!=typeof e)throw new TypeError("ApiClient.assertBody error: body should be a string.")}buildBody(e){return JSON.stringify(e)}buildUrl(e,t){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: url should be a string.");const a=new URL(`${e}.json?${this.apiVersion}`);t=t||{};for(const[e,n]of Object.entries(t)){if("string"!=typeof e)throw new TypeError("ApiClient.buildUrl error: urlOptions key should be a string.");if("string"==typeof n)a.searchParams.append(e,n);else{if(!Array.isArray(n))throw new TypeError("ApiClient.buildUrl error: urlOptions value should be a string or array.");n.forEach((t=>{a.searchParams.append(e,t)}))}}return a}async sendRequest(e,t,a,n){this.assertUrl(t),this.assertMethod(e),a&&this.assertBody(a);const i={...this.buildFetchOptions(),...n};i.method=e,a&&(i.body=a);try{return await fetch(t.toString(),i)}catch(e){throw console.error(e),navigator.onLine?new et("Unable to reach the server, an unexpected error occurred"):new et("Unable to reach the server, you are not connected to the network")}}async fetchAndHandleResponse(e,t,a,n){let i;const s=await this.sendRequest(e,t,a,n);try{i=await s.json()}catch(e){throw console.debug(t.toString(),e),new Qe(e,s)}if(!s.ok){const e=i.header.message;throw new Ye(e,{code:s.status,body:i.body})}return i}}const nt=class{constructor(e){this.apiClientOptions=e}async findAllSettings(){return this.initClient(),(await this.apiClient.findAll()).body}async save(e){return this.initClient(),(await this.apiClient.create(e)).body}async getUserSettings(){return this.initClient("setup/select"),(await this.apiClient.findAll()).body}initClient(e="settings"){this.apiClientOptions.setResourceName(`mfa/${e}`),this.apiClient=new at(this.apiClientOptions)}},it=class{constructor(e){e.setResourceName("mfa-policies/settings"),this.apiClient=new at(e)}async find(){return(await this.apiClient.findAll()).body}async save(e){await this.apiClient.create(e)}};function st(){return st=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getMfaOrganisationSettings:()=>{},getMfaUserSettings:()=>{},findPolicy:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},isMfaChoiceRequired:()=>{},checkMfaChoiceRequired:()=>{},hasMfaUserSettings:()=>{},navigate:()=>{},setProvider:()=>{},goToProviderList:()=>{},validateTotpCode:()=>{},removeProvider:()=>{},validateYubikeyCode:()=>{}});class lt extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.props.context.getApiClientOptions&&(this.mfaService=new nt(this.props.context.getApiClientOptions()),this.mfaPolicyService=new it(this.props.context.getApiClientOptions()))}get defaultState(){return{state:ot,setup:null,policy:null,provider:null,processing:!0,mfaUserSettings:null,mfaOrganisationSettings:null,mfaChoiceRequired:!1,getPolicy:this.getPolicy.bind(this),getMfaOrganisationSettings:this.getMfaOrganisationSettings.bind(this),getMfaUserSettings:this.getMfaUserSettings.bind(this),findPolicy:this.findPolicy.bind(this),findMfaSettings:this.findMfaSettings.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),hasMfaSettings:this.hasMfaSettings.bind(this),hasMfaOrganisationSettings:this.hasMfaOrganisationSettings.bind(this),hasMfaUserSettings:this.hasMfaUserSettings.bind(this),clearContext:this.clearContext.bind(this),checkMfaChoiceRequired:this.checkMfaChoiceRequired.bind(this),isMfaChoiceRequired:this.isMfaChoiceRequired.bind(this),navigate:this.navigate.bind(this),setProvider:this.setProvider.bind(this),goToProviderList:this.goToProviderList.bind(this),validateTotpCode:this.validateTotpCode.bind(this),removeProvider:this.removeProvider.bind(this),validateYubikeyCode:this.validateYubikeyCode.bind(this)}}async findPolicy(){if(this.getPolicy())return;this.setProcessing(!0);let e=null,t=null;t=this.mfaPolicyService?await this.mfaPolicyService.find():await this.props.context.port.request("passbolt.mfa-policy.get-policy"),e=t?t.policy:null,this.setState({policy:e}),this.setProcessing(!1)}async findMfaSettings(){this.setProcessing(!0);let e=null,t=null,a=null;e=this.mfaService?await this.mfaService.getUserSettings():await this.props.context.port.request("passbolt.mfa-policy.get-mfa-settings"),t=e.MfaAccountSettings,a=e.MfaOrganizationSettings,this.setState({mfaUserSettings:t}),this.setState({mfaOrganisationSettings:a}),this.setProcessing(!1)}getPolicy(){return this.state.policy}getMfaOrganisationSettings(){return this.state.mfaOrganisationSettings}getMfaUserSettings(){return this.state.mfaUserSettings}hasMfaSettings(){return!this.hasMfaOrganisationSettings()||this.hasMfaUserSettings()}hasMfaOrganisationSettings(){return this.state.mfaOrganisationSettings&&Object.values(this.state.mfaOrganisationSettings).some((e=>e))}hasMfaUserSettings(){return this.state.mfaUserSettings&&Object.values(this.state.mfaUserSettings).some((e=>e))}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}clearContext(){const{policy:e,processing:t}=this.defaultState;this.setState({policy:e,processing:t})}async checkMfaChoiceRequired(){if(await this.findPolicy(),null===this.getPolicy()||"mandatory"!==this.getPolicy())return!1;await this.findMfaSettings(),this.setState({mfaChoiceRequired:!this.hasMfaSettings()})}isMfaChoiceRequired(){return this.state.mfaChoiceRequired}navigate(e){this.setState({state:e})}goToProviderList(){this.setState({state:ot,provider:null})}setProvider(e){this.setState({provider:e})}async validateTotpCode(e,t){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.verify-totp-code",{otpProvisioningUri:e,totp:t})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}async validateYubikeyCode(e){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.verify-yubikey-code",{hotp:e})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}async removeProvider(){try{this.setProcessing(!0),await this.props.context.port.request("passbolt.mfa-setup.remove-provider",{provider:this.state.provider})}catch(e){throw console.error(e),e}finally{this.setProcessing(!1)}}render(){return n.createElement(rt.Provider,{value:this.state},this.props.children)}}lt.propTypes={context:o().any,children:o().any};const ct=I(lt);function mt(e){return class extends n.Component{render(){return n.createElement(rt.Consumer,null,(t=>n.createElement(e,st({mfaContext:t},this.props))))}}}class dt extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks(),this.createRefs()}getDefaultState(){return{open:!1,loading:!0}}bindCallbacks(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleToggleMenuClick=this.handleToggleMenuClick.bind(this),this.handleProfileClick=this.handleProfileClick.bind(this),this.handleThemeClick=this.handleThemeClick.bind(this),this.handleMobileAppsClick=this.handleMobileAppsClick.bind(this)}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),this.props.context.siteSettings.canIUse("mfaPolicies")&&this.props.mfaContext.checkMfaChoiceRequired()}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0})}createRefs(){this.userBadgeMenuRef=n.createRef()}get canIUseThemeCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountSettings")}get canIUseMobileCapability(){return this.props.rbacContext.canIUseUiAction(ne)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("mobile")}handleDocumentClickEvent(e){this.userBadgeMenuRef.current.contains(e.target)||this.closeUserBadgeMenu()}handleDocumentContextualMenuEvent(e){this.userBadgeMenuRef.current.contains(e.target)||this.closeUserBadgeMenu()}handleDocumentDragStartEvent(){this.closeUserBadgeMenu()}closeUserBadgeMenu(){this.setState({open:!1})}getUserFullName(){return this.props.user&&this.props.user.profile?`${this.props.user.profile.first_name} ${this.props.user.profile.last_name}`:"..."}getUserUsername(){return this.props.user&&this.props.user.username?`${this.props.user.username}`:"..."}handleToggleMenuClick(e){e.preventDefault();const t=!this.state.open;this.setState({open:t})}handleProfileClick(){this.props.navigationContext.onGoToUserSettingsProfileRequested(),this.closeUserBadgeMenu()}handleThemeClick(){this.props.navigationContext.onGoToUserSettingsThemeRequested(),this.closeUserBadgeMenu()}handleMobileAppsClick(){this.props.navigationContext.onGoToUserSettingsMobileRequested(),this.closeUserBadgeMenu()}get attentionRequired(){return this.props.accountRecoveryContext.isAccountRecoveryChoiceRequired()||this.props.mfaContext.isMfaChoiceRequired()}render(){return n.createElement("div",{className:"col3 profile-wrapper"},n.createElement("div",{className:"user profile dropdown",ref:this.userBadgeMenuRef},n.createElement("div",{className:"avatar-with-name button "+(this.state.open?"open":""),onClick:this.handleToggleMenuClick},n.createElement($e,{user:this.props.user,className:"avatar picture left-cell",baseUrl:this.props.baseUrl,attentionRequired:this.attentionRequired}),n.createElement("div",{className:"details center-cell"},n.createElement("span",{className:"name"},this.getUserFullName()),n.createElement("span",{className:"email"},this.getUserUsername())),n.createElement("div",{className:"more right-cell"},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(Re,{name:"caret-down"})))),this.state.open&&n.createElement("ul",{className:"dropdown-content right visible"},n.createElement("li",{key:"profile"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleProfileClick},n.createElement("span",null,n.createElement(v.c,null,"Profile")),this.attentionRequired&&n.createElement(Re,{name:"exclamation",baseline:!0})))),this.canIUseThemeCapability&&n.createElement("li",{key:"theme"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleThemeClick},n.createElement("span",null,n.createElement(v.c,null,"Theme"))))),this.canIUseMobileCapability&&n.createElement("li",{id:"user-badge-menu-mobile",key:"mobile"},n.createElement("div",{className:"row"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleMobileAppsClick},n.createElement("span",null,n.createElement(v.c,null,"Mobile Apps")),n.createElement("span",{className:"chips new"},"new")))))))}}dt.propTypes={context:o().object,navigationContext:o().any,mfaContext:o().object,accountRecoveryContext:o().object,baseUrl:o().string,user:o().object,rbacContext:o().any};const ht=I(Ne(J(Ge(mt((0,k.Z)("common")(dt))))));class pt extends n.Component{constructor(e){super(e),this.bindCallbacks()}canIUse(e){return Boolean(this.props.context.siteSettings?.canIUse(e))}get isMfaEnabled(){return this.canIUse("multiFactorAuthentication")}get isUserDirectoryEnabled(){return this.canIUse("directorySync")}get canIUseEE(){return this.canIUse("ee")}get canIUseLocale(){return this.canIUse("locale")}get canIUseAccountRecovery(){return this.canIUse("accountRecovery")}get canIUseSmtpSettings(){return this.canIUse("smtpSettings")}get canIUseSelfRegistrationSettings(){return this.canIUse("selfRegistration")}get canIUseSso(){return this.canIUse("sso")}get canIUseMfaPolicy(){return this.canIUse("mfaPolicies")}get canIUsePasswordPolicies(){return this.canIUse("passwordPoliciesUpdate")}get canIUseRbacs(){return this.canIUse("rbacs")}get canIUseUserPassphrasePolicies(){return this.canIUse("userPassphrasePolicies")}get canIUsePasswordExpiry(){return this.canIUse("passwordExpiry")}bindCallbacks(){this.handleMfaClick=this.handleMfaClick.bind(this),this.handleUserDirectoryClick=this.handleUserDirectoryClick.bind(this),this.handleEmailNotificationsClick=this.handleEmailNotificationsClick.bind(this),this.handleSubscriptionClick=this.handleSubscriptionClick.bind(this),this.handleInternationalizationClick=this.handleInternationalizationClick.bind(this),this.handleAccountRecoveryClick=this.handleAccountRecoveryClick.bind(this),this.handleSmtpSettingsClick=this.handleSmtpSettingsClick.bind(this),this.handleSelfRegistrationClick=this.handleSelfRegistrationClick.bind(this),this.handleSsoClick=this.handleSsoClick.bind(this),this.handleMfaPolicyClick=this.handleMfaPolicyClick.bind(this),this.handleRbacsClick=this.handleRbacsClick.bind(this),this.handlePasswordPoliciesClick=this.handlePasswordPoliciesClick.bind(this),this.handleUserPassphrasePoliciesClick=this.handleUserPassphrasePoliciesClick.bind(this),this.handlePasswordExpirySettingsClick=this.handlePasswordExpirySettingsClick.bind(this)}handleMfaClick(){this.props.navigationContext.onGoToAdministrationMfaRequested()}handleUserDirectoryClick(){this.props.navigationContext.onGoToAdministrationUsersDirectoryRequested()}handleEmailNotificationsClick(){this.props.navigationContext.onGoToAdministrationEmailNotificationsRequested()}handleSubscriptionClick(){this.props.navigationContext.onGoToAdministrationSubscriptionRequested()}handleInternationalizationClick(){this.props.navigationContext.onGoToAdministrationInternationalizationRequested()}handleAccountRecoveryClick(){this.props.navigationContext.onGoToAdministrationAccountRecoveryRequested()}handleSmtpSettingsClick(){this.props.navigationContext.onGoToAdministrationSmtpSettingsRequested()}handleSelfRegistrationClick(){this.props.navigationContext.onGoToAdministrationSelfRegistrationRequested()}handleSsoClick(){this.props.navigationContext.onGoToAdministrationSsoRequested()}handleRbacsClick(){this.props.navigationContext.onGoToAdministrationRbacsRequested()}handleMfaPolicyClick(){this.props.navigationContext.onGoToAdministrationMfaPolicyRequested()}handlePasswordPoliciesClick(){this.props.navigationContext.onGoToAdministrationPasswordPoliciesRequested()}handleUserPassphrasePoliciesClick(){this.props.navigationContext.onGoToAdministrationUserPassphrasePoliciesRequested()}handlePasswordExpirySettingsClick(){this.props.navigationContext.onGoToAdministrationPasswordExpirySettingsRequested()}isMfaSelected(){return F.MFA===this.props.administrationWorkspaceContext.selectedAdministration}isMfaPolicySelected(){return F.MFA_POLICY===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordPoliciesSelected(){return F.PASSWORD_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isUserDirectorySelected(){return F.USER_DIRECTORY===this.props.administrationWorkspaceContext.selectedAdministration}isEmailNotificationsSelected(){return F.EMAIL_NOTIFICATION===this.props.administrationWorkspaceContext.selectedAdministration}isSubscriptionSelected(){return F.SUBSCRIPTION===this.props.administrationWorkspaceContext.selectedAdministration}isInternationalizationSelected(){return F.INTERNATIONALIZATION===this.props.administrationWorkspaceContext.selectedAdministration}isAccountRecoverySelected(){return F.ACCOUNT_RECOVERY===this.props.administrationWorkspaceContext.selectedAdministration}isSsoSelected(){return F.SSO===this.props.administrationWorkspaceContext.selectedAdministration}isRbacSelected(){return F.RBAC===this.props.administrationWorkspaceContext.selectedAdministration}isSmtpSettingsSelected(){return F.SMTP_SETTINGS===this.props.administrationWorkspaceContext.selectedAdministration}isSelfRegistrationSettingsSelected(){return F.SELF_REGISTRATION===this.props.administrationWorkspaceContext.selectedAdministration}isUserPassphrasePoliciesSelected(){return F.USER_PASSPHRASE_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordExpirySettingsSelected(){return F.PASSWORD_EXPIRY===this.props.administrationWorkspaceContext.selectedAdministration}render(){return n.createElement("div",{className:"navigation-secondary navigation-administration"},n.createElement("ul",{id:"administration_menu",className:"clearfix menu ready"},this.isMfaEnabled&&n.createElement("li",{id:"mfa_menu"},n.createElement("div",{className:"row "+(this.isMfaSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleMfaClick},n.createElement("span",null,n.createElement(v.c,null,"Multi Factor Authentication"))))))),this.canIUseMfaPolicy&&n.createElement("li",{id:"mfa_policy_menu"},n.createElement("div",{className:"row "+(this.isMfaPolicySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleMfaPolicyClick},n.createElement("span",null,n.createElement(v.c,null,"MFA Policy"))))))),this.canIUsePasswordPolicies&&n.createElement("li",{id:"password_policy_menu"},n.createElement("div",{className:"row "+(this.isPasswordPoliciesSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handlePasswordPoliciesClick},n.createElement("span",null,n.createElement(v.c,null,"Password Policy"))))))),this.isUserDirectoryEnabled&&n.createElement("li",{id:"user_directory_menu"},n.createElement("div",{className:"row "+(this.isUserDirectorySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleUserDirectoryClick},n.createElement("span",null,n.createElement(v.c,null,"Users Directory"))))))),n.createElement("li",{id:"email_notification_menu"},n.createElement("div",{className:"row "+(this.isEmailNotificationsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleEmailNotificationsClick},n.createElement("span",null,n.createElement(v.c,null,"Email Notifications"))))))),this.canIUseLocale&&n.createElement("li",{id:"internationalization_menu"},n.createElement("div",{className:"row "+(this.isInternationalizationSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleInternationalizationClick},n.createElement("span",null,n.createElement(v.c,null,"Internationalisation"))))))),this.canIUseEE&&n.createElement("li",{id:"subscription_menu"},n.createElement("div",{className:"row "+(this.isSubscriptionSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSubscriptionClick},n.createElement("span",null,n.createElement(v.c,null,"Subscription"))))))),this.canIUseAccountRecovery&&n.createElement("li",{id:"account_recovery_menu"},n.createElement("div",{className:"row "+(this.isAccountRecoverySelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleAccountRecoveryClick},n.createElement("span",null,n.createElement(v.c,null,"Account Recovery"))))))),this.canIUseSmtpSettings&&n.createElement("li",{id:"smtp_settings_menu"},n.createElement("div",{className:"row "+(this.isSmtpSettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSmtpSettingsClick},n.createElement("span",null,n.createElement(v.c,null,"Email server"))))))),this.canIUseSelfRegistrationSettings&&n.createElement("li",{id:"self_registration_menu"},n.createElement("div",{className:"row "+(this.isSelfRegistrationSettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSelfRegistrationClick},n.createElement("span",null,n.createElement(v.c,null,"Self Registration"))))))),this.canIUseSso&&n.createElement("li",{id:"sso_menu"},n.createElement("div",{className:"row "+(this.isSsoSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleSsoClick},n.createElement("span",null,n.createElement(v.c,null,"Single Sign-On"))))))),this.canIUseRbacs&&n.createElement("li",{id:"rbacs_menu"},n.createElement("div",{className:"row "+(this.isRbacSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleRbacsClick},n.createElement("span",null,n.createElement(v.c,null,"Role-Based Access Control"))))))),this.canIUseUserPassphrasePolicies&&n.createElement("li",{id:"user_passphrase_policies_menu"},n.createElement("div",{className:"row "+(this.isUserPassphrasePoliciesSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handleUserPassphrasePoliciesClick},n.createElement("span",null,n.createElement(v.c,null,"User Passphrase Policies"))))))),this.canIUsePasswordExpiry&&n.createElement("li",{id:"password_expiry_menu"},n.createElement("div",{className:"row "+(this.isPasswordExpirySettingsSelected()?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.handlePasswordExpirySettingsClick},n.createElement("span",null,n.createElement(v.c,null,"Password Expiry")))))))))}}pt.propTypes={context:o().object,administrationWorkspaceContext:o().object,history:o().object,navigationContext:o().any};const ut=(0,N.EN)(I(J(O((0,k.Z)("common")(pt))))),gt={totp:"totp",yubikey:"yubikey",duo:"duo"},bt=class{constructor(e={}){this.totpProviderToggle="providers"in e&&e.providers.includes(gt.totp),this.yubikeyToggle="providers"in e&&e.providers.includes(gt.yubikey),this.yubikeyClientIdentifier="yubikey"in e?e.yubikey.clientId:"",this.yubikeySecretKey="yubikey"in e?e.yubikey.secretKey:"",this.duoToggle="providers"in e&&e.providers.includes(gt.duo),this.duoHostname="duo"in e?e.duo.hostName:"",this.duoClientId="duo"in e?e.duo.integrationKey:"",this.duoClientSecret="duo"in e?e.duo.secretKey:""}};function ft(){return ft=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findMfaSettings:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},getErrors:()=>{},setError:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},clearContext:()=>{}});class vt extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.mfaService=new nt(t)}get defaultState(){return{errors:this.initErrors(),currentSettings:null,settings:new bt,submitted:!1,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findMfaSettings:this.findMfaSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),clearContext:this.clearContext.bind(this)}}initErrors(){return{yubikeyClientIdentifierError:null,yubikeySecretKeyError:null,duoHostnameError:null,duoClientIdError:null,duoClientSecretError:null}}async findMfaSettings(){this.setProcessing(!0);const e=await this.mfaService.findAllSettings(),t=new bt(e);this.setState({currentSettings:t}),this.setState({settings:Object.assign({},t)}),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}async setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});await this.setState({settings:a})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e})}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new class{constructor(e={}){this.providers=[],this.setProviders(e),this.yubikey=this.providers.includes(gt.yubikey)?new class{constructor(e={}){this.clientId="yubikeyClientIdentifier"in e?e.yubikeyClientIdentifier:e.clientId,this.secretKey="yubikeySecretKey"in e?e.yubikeySecretKey:e.secretKey}}(e):{},this.duo=this.providers.includes(gt.duo)?new class{constructor(e={}){this.apiHostName=e.duoHostname,this.clientId=e.duoClientId,this.clientSecret=e.duoClientSecret}}(e):{}}setProviders(e){e.totpProviderToggle&&this.providers.push(gt.totp),e.yubikeyToggle&&this.providers.push(gt.yubikey),e.duoToggle&&this.providers.push(gt.duo)}}(this.state.settings);await this.mfaService.save(e),await this.findMfaSettings()}getErrors(){return this.state.errors}setError(e,t){const a=Object.assign({},this.state.errors,{[e]:t});this.setState({errors:a})}setErrors(e,t=(()=>{})){const a=Object.assign({},this.state.errors,e);return this.setState({errors:a},t)}render(){return n.createElement(yt.Provider,{value:this.state},this.props.children)}}vt.propTypes={context:o().any,children:o().any};const kt=I(vt);function Et(e){return class extends n.Component{render(){return n.createElement(yt.Consumer,null,(t=>n.createElement(e,ft({adminMfaContext:t},this.props))))}}}var wt=a(648),Ct=a.n(wt);class St{constructor(e,t){this.context=e,this.translation=t}static getInstance(e,t){return this.instance||(this.instance=new St(e,t)),this.instance}static killInstance(){this.instance=null}validateInput(e,t,a){const n=e.trim();return n.length?Ct()(t).test(n)?null:this.translation(a.regex):this.translation(a.required)}validateYubikeyClientIdentifier(e){const t=this.validateInput(e,"^[0-9]{1,64}$",{required:"A client identifier is required.",regex:"The client identifier should be an integer."});return this.context.setError("yubikeyClientIdentifierError",t),t}validateYubikeySecretKey(e){const t=this.validateInput(e,"^[a-zA-Z0-9\\/=+]{10,128}$",{required:"A secret key is required.",regex:"This secret key is not valid."});return this.context.setError("yubikeySecretKeyError",t),t}validateDuoHostname(e){const t=this.validateInput(e,"^api-[a-fA-F0-9]{8,16}\\.duosecurity\\.com$",{required:"A hostname is required.",regex:"This is not a valid hostname."});return this.context.setError("duoHostnameError",t),t}validateDuoClientId(e){const t=this.validateInput(e,"^[a-zA-Z0-9]{16,32}$",{required:"A client id is required.",regex:"This is not a valid client id."});return this.context.setError("duoClientIdError",t),t}validateDuoClientSecret(e){const t=this.validateInput(e,"^[a-zA-Z0-9]{32,128}$",{required:"A client secret is required.",regex:"This is not a valid client secret."});return this.context.setError("duoClientSecretError",t),t}validateYubikeyInputs(){let e=null,t=null;const a=this.context.getSettings();let n={};return a.yubikeyToggle&&(e=this.validateYubikeyClientIdentifier(a.yubikeyClientIdentifier),t=this.validateYubikeySecretKey(a.yubikeySecretKey),n={yubikeyClientIdentifierError:e,yubikeySecretKeyError:t}),n}validateDuoInputs(){let e=null,t=null,a=null,n={};const i=this.context.getSettings();return i.duoToggle&&(e=this.validateDuoHostname(i.duoHostname),t=this.validateDuoClientId(i.duoClientId),a=this.validateDuoClientSecret(i.duoClientSecret),n={duoHostnameError:e,duoClientIdError:t,duoClientSecretError:a}),n}async validate(){const e=Object.assign(this.validateYubikeyInputs(),this.validateDuoInputs());return await this.context.setErrors(e),0===Object.values(e).filter((e=>e)).length}}const xt=St;class Nt extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.mfaFormService=xt.getInstance(this.props.adminMfaContext,this.props.t)}async handleSaveClick(){try{await this.mfaFormService.validate()&&(await this.props.adminMfaContext.save(),this.handleSaveSuccess())}catch(e){this.handleSaveError(e)}finally{this.props.adminMfaContext.setSubmitted(!0),this.props.adminMfaContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminMfaContext.isProcessing()&&this.props.adminMfaContext.hasSettingsChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The multi factor authentication settings for the organization were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Nt.propTypes={adminMfaContext:o().object,actionFeedbackContext:o().object,t:o().func};const _t=Et(d((0,k.Z)("common")(Nt)));class Rt extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{viewPassword:!1,hasPassphraseFocus:!1}}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handlePasswordInputFocus=this.handlePasswordInputFocus.bind(this),this.handlePasswordInputBlur=this.handlePasswordInputBlur.bind(this),this.handleViewPasswordButtonClick=this.handleViewPasswordButtonClick.bind(this)}handleInputChange(e){this.props.onChange&&this.props.onChange(e)}handlePasswordInputFocus(){this.setState({hasPassphraseFocus:!0})}handlePasswordInputBlur(){this.setState({hasPassphraseFocus:!1})}handleViewPasswordButtonClick(){this.props.disabled||this.setState({viewPassword:!this.state.viewPassword})}get securityTokenStyle(){const e={background:this.props.securityToken.textColor,color:this.props.securityToken.backgroundColor},t={background:this.props.securityToken.backgroundColor,color:this.props.securityToken.textColor};return this.state.hasPassphraseFocus?e:t}get passphraseInputStyle(){const e={background:this.props.securityToken.backgroundColor,color:this.props.securityToken.textColor,"--passphrase-placeholder-color":this.props.securityToken.textColor};return this.state.hasPassphraseFocus?e:void 0}get previewStyle(){const e={"--icon-color":this.props.securityToken.textColor,"--icon-background-color":this.props.securityToken.backgroundColor};return this.state.hasPassphraseFocus?e:void 0}render(){return n.createElement("div",{className:`input password ${this.props.disabled?"disabled":""} ${this.state.hasPassphraseFocus?"":"no-focus"} ${this.props.securityToken?"security":""}`,style:this.props.securityToken?this.passphraseInputStyle:void 0},n.createElement("input",{id:this.props.id,name:this.props.name,maxLength:"4096",placeholder:this.props.placeholder,type:this.state.viewPassword&&!this.props.disabled?"text":"password",onKeyUp:this.props.onKeyUp,value:this.props.value,onFocus:this.handlePasswordInputFocus,onBlur:this.handlePasswordInputBlur,onChange:this.handleInputChange,disabled:this.props.disabled,readOnly:this.props.readOnly,autoComplete:this.props.autoComplete,"aria-required":!0,ref:this.props.inputRef}),this.props.preview&&n.createElement("div",{className:"password-view-wrapper"},n.createElement("button",{type:"button",onClick:this.handleViewPasswordButtonClick,style:this.props.securityToken?this.previewStyle:void 0,className:"password-view infield button-transparent "+(this.props.disabled?"disabled":"")},!this.state.viewPassword&&n.createElement(Re,{name:"eye-open"}),this.state.viewPassword&&n.createElement(Re,{name:"eye-close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"View")))),this.props.securityToken&&n.createElement("div",{className:"security-token-wrapper"},n.createElement("span",{className:"security-token",style:this.securityTokenStyle},this.props.securityToken.code)))}}Rt.defaultProps={id:"",name:"",autoComplete:"off"},Rt.propTypes={context:o().any,id:o().string,name:o().string,value:o().string,placeholder:o().string,autoComplete:o().string,inputRef:o().object,disabled:o().bool,readOnly:o().bool,preview:o().bool,onChange:o().func,onKeyUp:o().func,securityToken:o().shape({code:o().string,backgroundColor:o().string,textColor:o().string})};const It=(0,k.Z)("common")(Rt);class At extends n.Component{constructor(e){super(e),this.mfaFormService=xt.getInstance(this.props.adminMfaContext,this.props.t),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(_t),this.isRunningUnderHttps&&this.props.adminMfaContext.findMfaSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminMfaContext.clearContext(),xt.killInstance(),this.mfaFormService=null}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){const t=e.target,a="checkbox"===t.type?t.checked:t.value,n=t.name;this.props.adminMfaContext.setSettings(n,a),this.validateInput(n,a)}validateInput(e,t){switch(e){case"yubikeyClientIdentifier":this.mfaFormService.validateYubikeyClientIdentifier(t);break;case"yubikeySecretKey":this.mfaFormService.validateYubikeySecretKey(t);break;case"duoHostname":this.mfaFormService.validateDuoHostname(t);break;case"duoClientId":this.mfaFormService.validateDuoClientId(t);break;case"duoClientSecret":this.mfaFormService.validateDuoClientSecret(t)}}get isRunningUnderHttps(){const e=this.props.context.trustedDomain;return"https:"===new URL(e).protocol}hasAllInputDisabled(){return this.props.adminMfaContext.isProcessing()}render(){const e=this.props.adminMfaContext.isSubmitted(),t=this.props.adminMfaContext.getSettings(),a=this.props.adminMfaContext.getErrors();return n.createElement("div",{className:"row"},n.createElement("div",{className:"mfa-settings col7 main-column"},n.createElement("h3",null,"Multi Factor Authentication"),!this.isRunningUnderHttps&&n.createElement("p",null,n.createElement(v.c,null,"Sorry the multi factor authentication feature is only available in a secure context (HTTPS).")),this.isRunningUnderHttps&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose which multi factor authentication will be available.")),n.createElement("h4",{className:"no-border"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"totp-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"totpProviderToggle",onChange:this.handleInputChange,checked:t.totpProviderToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"totp-provider-toggle-button"},n.createElement(v.c,null,"Time-based One Time Password")))),!t.totpProviderToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Time-based One Time Password provider is disabled for all users.")),t.totpProviderToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Time-based One Time Password provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{id:"yubikey-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"yubikeyToggle",onChange:this.handleInputChange,checked:t.yubikeyToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"yubikey-provider-toggle-button"},"Yubikey"))),!t.yubikeyToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Yubikey provider is disabled for all users.")),t.yubikeyToggle&&n.createElement(n.Fragment,null,n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Yubikey provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("div",{className:`input text required ${a.yubikeyClientIdentifierError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client identifier")),n.createElement("input",{id:"yubikeyClientIdentifier",type:"text",name:"yubikeyClientIdentifier","aria-required":!0,className:"required fluid form-element ready",placeholder:"123456789",onChange:this.handleInputChange,value:t.yubikeyClientIdentifier,disabled:this.hasAllInputDisabled()}),a.yubikeyClientIdentifierError&&e&&n.createElement("div",{className:"yubikey_client_identifier error-message"},a.yubikeyClientIdentifierError)),n.createElement("div",{className:`input required input-secret ${a.yubikeySecretKeyError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Secret key")),n.createElement(It,{id:"yubikeySecretKey",onChange:this.handleInputChange,autoComplete:"off",name:"yubikeySecretKey",placeholder:"**********",disabled:this.hasAllInputDisabled(),value:t.yubikeySecretKey,preview:!0}),a.yubikeySecretKeyError&&e&&n.createElement("div",{className:"yubikey_secret_key error-message"},a.yubikeySecretKeyError))),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"duo-provider-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"duoToggle",onChange:this.handleInputChange,checked:t.duoToggle,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"duo-provider-toggle-button"},"Duo"))),!t.duoToggle&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"The Duo provider is disabled for all users.")),t.duoToggle&&n.createElement(n.Fragment,null,n.createElement("p",{className:"description enabled"},n.createElement(v.c,null,"The Duo provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.")),n.createElement("div",{className:`input text required ${a.duoHostnameError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Hostname")),n.createElement("input",{id:"duoHostname",type:"text",name:"duoHostname","aria-required":!0,className:"required fluid form-element ready",placeholder:"api-24zlkn4.duosecurity.com",value:t.duoHostname,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),a.duoHostnameError&&e&&n.createElement("div",{className:"duo_hostname error-message"},a.duoHostnameError)),n.createElement("div",{className:`input text required ${a.duoClientIdError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client id")),n.createElement("input",{id:"duoClientId",type:"text",name:"duoClientId","aria-required":!0,className:"required fluid form-element ready",placeholder:"HASJKDSQJO213123KQSLDF",value:t.duoClientId,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),a.duoClientIdError&&e&&n.createElement("div",{className:"duo_client_id error-message"},a.duoClientIdError)),n.createElement("div",{className:`input text required ${a.duoClientSecretError&&e?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Client secret")),n.createElement(It,{id:"duoClientSecret",onChange:this.handleInputChange,autoComplete:"off",name:"duoClientSecret",placeholder:"**********",disabled:this.hasAllInputDisabled(),value:t.duoClientSecret,preview:!0}),a.duoClientSecretError&&e&&n.createElement("div",{className:"duo_client_secret error-message"},a.duoClientSecretError))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need help?")),n.createElement("p",null,n.createElement(v.c,null,"Check out our Multi Factor Authentication configuration guide.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}At.propTypes={context:o().object,adminMfaContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const Pt=I(Et(O((0,k.Z)("common")(At))));class Dt extends n.Component{render(){let e=0;return n.createElement("div",{className:"breadcrumbs"},n.createElement("ul",{className:"menu"},this.props.items&&this.props.items.map((t=>(e++,n.createElement("li",{className:"ellipsis",key:e},t))))),this.props.children)}}Dt.propTypes={items:o().array,children:o().any};const Lt=Dt;class Tt extends n.Component{render(){return n.createElement("button",{type:"button",className:"link no-border inline ellipsis",onClick:this.props.onClick},this.props.name)}}Tt.propTypes={name:o().string,onClick:o().func};const Ut=Tt;class jt extends n.Component{get items(){return this.props.administrationWorkspaceContext.selectedAdministration===F.NONE?[]:[n.createElement(Ut,{key:"bread-1",name:this.translate("Administration"),onClick:this.props.navigationContext.onGoToAdministrationRequested}),n.createElement(Ut,{key:"bread-2",name:this.getLastBreadcrumbItemName(),onClick:this.onLastBreadcrumbClick.bind(this)}),n.createElement(Ut,{key:"bread-3",name:this.translate("Settings"),onClick:this.onLastBreadcrumbClick.bind(this)})]}getLastBreadcrumbItemName(){switch(this.props.administrationWorkspaceContext.selectedAdministration){case F.MFA:return this.translate("Multi Factor Authentication");case F.USER_DIRECTORY:return this.translate("Users Directory");case F.EMAIL_NOTIFICATION:return this.translate("Email Notification");case F.SUBSCRIPTION:return this.translate("Subscription");case F.INTERNATIONALIZATION:return this.translate("Internationalisation");case F.ACCOUNT_RECOVERY:return this.translate("Account Recovery");case F.SMTP_SETTINGS:return this.translate("Email server");case F.SELF_REGISTRATION:return this.translate("Self Registration");case F.SSO:return this.translate("Single Sign-On");case F.MFA_POLICY:return this.translate("MFA Policy");case F.RBAC:return this.translate("Role-Based Access Control");case F.PASSWORD_POLICIES:return this.translate("Password Policy");case F.USER_PASSPHRASE_POLICIES:return this.translate("User Passphrase Policies");case F.PASSWORD_EXPIRY:return this.translate("Password Expiry");default:return""}}async onLastBreadcrumbClick(){const e=this.props.location.pathname;this.props.history.push({pathname:e})}get translate(){return this.props.t}render(){return n.createElement(Lt,{items:this.items})}}jt.propTypes={administrationWorkspaceContext:o().object,location:o().object,history:o().object,navigationContext:o().any,t:o().func};const zt=(0,N.EN)(J(O((0,k.Z)("common")(jt)))),Mt=new class{allPropTypes=(...e)=>(...t)=>{const a=e.map((e=>e(...t))).filter(Boolean);if(0===a.length)return;const n=a.map((e=>e.message)).join("\n");return new Error(n)}};class Ot extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback(),this.createRefs()}getDefaultState(e){return{selectedValue:e.value,search:"",open:!1,style:void 0}}get listItemsFiltered(){const e=this.props.items.filter((e=>e.value!==this.state.selectedValue));return this.props.search&&""!==this.state.search?this.getItemsMatch(e,this.state.search):e}get selectedItemLabel(){const e=this.props.items&&this.props.items.find((e=>e.value===this.state.selectedValue));return e&&e.label||n.createElement(n.Fragment,null," ")}static getDerivedStateFromProps(e,t){return void 0!==e.value&&e.value!==t.selectedValue?{selectedValue:e.value}:null}bindCallback(){this.handleDocumentClickEvent=this.handleDocumentClickEvent.bind(this),this.handleDocumentContextualMenuEvent=this.handleDocumentContextualMenuEvent.bind(this),this.handleDocumentDragStartEvent=this.handleDocumentDragStartEvent.bind(this),this.handleDocumentScrollEvent=this.handleDocumentScrollEvent.bind(this),this.handleSelectClick=this.handleSelectClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleItemClick=this.handleItemClick.bind(this),this.handleSelectKeyDown=this.handleSelectKeyDown.bind(this),this.handleItemKeyDown=this.handleItemKeyDown.bind(this),this.handleBlur=this.handleBlur.bind(this)}createRefs(){this.selectedItemRef=n.createRef(),this.selectItemsRef=n.createRef(),this.itemsRef=n.createRef()}componentDidMount(){document.addEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.addEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.addEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.addEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClickEvent,{capture:!0}),document.removeEventListener("contextmenu",this.handleDocumentContextualMenuEvent,{capture:!0}),document.removeEventListener("dragstart",this.handleDocumentDragStartEvent,{capture:!0}),document.removeEventListener("scroll",this.handleDocumentScrollEvent,{capture:!0})}handleDocumentClickEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentContextualMenuEvent(e){this.selectedItemRef.current.contains(e.target)||this.selectItemsRef.current.contains(e.target)||this.closeSelect()}handleDocumentDragStartEvent(){this.closeSelect()}handleDocumentScrollEvent(e){this.itemsRef.current.contains(e.target)||this.closeSelect()}handleSelectClick(){if(this.props.disabled)this.closeSelect();else{const e=!this.state.open;e?this.forceVisibilitySelect():this.resetStyleSelect(),this.setState({open:e})}}getFirstParentWithTransform(){let e=this.selectedItemRef.current.parentElement;for(;null!==e&&""===e.style.getPropertyValue("transform");)e=e.parentElement;return e}forceVisibilitySelect(){const e=this.selectedItemRef.current.getBoundingClientRect(),{width:t,height:a}=e;let{top:n,left:i}=e;const s=this.getFirstParentWithTransform();if(s){const e=s.getBoundingClientRect();n-=e.top,i-=e.left}const o={position:"fixed",zIndex:1,width:t,height:a,top:n,left:i};this.setState({style:o})}handleBlur(e){e.currentTarget.contains(e.relatedTarget)||this.closeSelect()}closeSelect(){this.resetStyleSelect(),this.setState({open:!1})}resetStyleSelect(){this.setState({style:void 0})}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleItemClick(e){if(this.setState({selectedValue:e.value,open:!1}),"function"==typeof this.props.onChange){const t={target:{value:e.value,name:this.props.name}};this.props.onChange(t)}this.closeSelect()}getItemsMatch(e,t){const a=t&&t.split(/\s+/)||[""];return e.filter((e=>a.every((t=>((e,t)=>(e=>new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(e),"i"))(e).test(t))(t,e.label)))))}handleSelectKeyDown(e){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleSelectClick();case 40:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(0):this.handleSelectClick());case 38:return e.preventDefault(),e.stopPropagation(),void(this.state.open?this.focusItem(this.listItemsFiltered.length-1):this.handleSelectClick());case 27:return e.stopPropagation(),void this.closeSelect();default:return}}focusItem(e){this.itemsRef.current.childNodes[e]?.focus()}handleItemKeyDown(e,t){switch(e.keyCode){case 13:return e.stopPropagation(),void this.handleItemClick(t);case 40:return e.stopPropagation(),e.preventDefault(),void(e.target.nextSibling?e.target.nextSibling.focus():this.focusItem(0));case 38:return e.stopPropagation(),e.preventDefault(),void(e.target.previousSibling?e.target.previousSibling.focus():this.focusItem(this.listItemsFiltered.length-1));default:return}}hasFilteredItems(){return this.listItemsFiltered.length>0}render(){return n.createElement("div",{className:`select-container ${this.props.className}`,style:{width:this.state.style?.width,height:this.state.style?.height}},n.createElement("div",{onKeyDown:this.handleSelectKeyDown,onBlur:this.handleBlur,id:this.props.id,className:`select ${this.props.direction} ${this.state.open?"open":""}`,style:this.state.style},n.createElement("div",{ref:this.selectedItemRef,className:"selected-value "+(this.props.disabled?"disabled":""),tabIndex:this.props.disabled?-1:0,onClick:this.handleSelectClick},n.createElement("span",{className:"value"},this.selectedItemLabel),n.createElement(Re,{name:"caret-down"})),n.createElement("div",{ref:this.selectItemsRef,className:"select-items "+(this.state.open?"visible":"")},this.props.search&&n.createElement(n.Fragment,null,n.createElement("input",{className:"search-input",name:"search",value:this.state.search,onChange:this.handleInputChange,type:"text"}),n.createElement(Re,{name:"search"})),n.createElement("ul",{ref:this.itemsRef,className:"items"},this.hasFilteredItems()&&this.listItemsFiltered.map((e=>n.createElement("li",{tabIndex:e.disabled?-1:0,key:e.value,className:`option ${e.value}`,onKeyDown:t=>this.handleItemKeyDown(t,e),onClick:()=>this.handleItemClick(e)},e.label))),!this.hasFilteredItems()&&this.props.search&&n.createElement("li",{className:"option no-results"},n.createElement(v.c,null,"No results match")," ",n.createElement("span",null,this.state.search))))))}}Ot.defaultProps={id:"",name:"select",className:"",direction:"bottom"},Ot.propTypes={id:o().string,name:o().string,className:o().string,direction:o().oneOf(Object.values({top:"top",bottom:"bottom",left:"left",right:"right"})),search:o().bool,items:o().array,value:Mt.allPropTypes(o().oneOfType([o().string,o().number,o().bool]),((e,t,a)=>{const n=e[t],i=e.items;if(null!==n&&i.length>0&&i.every((e=>e.value!==n)))return new Error(`Invalid prop ${t} passed to ${a}. Expected the value ${n} in items.`)})),disabled:o().bool,onChange:o().func};const Ft=(0,k.Z)("common")(Ot);class qt extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleClick=this.handleClick.bind(this)}handleClick(){this.props.disabled||this.props.onClick()}render(){return n.createElement("button",{type:"button",disabled:this.props.disabled,className:"link cancel",onClick:this.handleClick},n.createElement(v.c,null,"Cancel"))}}qt.propTypes={disabled:o().bool,onClick:o().func};const Wt=(0,k.Z)("common")(qt);class Vt extends n.Component{constructor(e){super(e),this.infiniteTimerUpdateIntervalId=null,this.state=this.defaultState}get defaultState(){return{infiniteTimer:0}}componentDidMount(){this.startInfiniteTimerUpdateProgress()}componentWillUnmount(){this.resetInterval()}resetInterval(){this.infiniteTimerUpdateIntervalId&&(clearInterval(this.infiniteTimerUpdateIntervalId),this.infiniteTimerUpdateIntervalId=null)}startInfiniteTimerUpdateProgress(){this.infiniteTimerUpdateIntervalId=setInterval((()=>{const e=this.state.infiniteTimer+2;this.setState({infiniteTimer:e})}),500)}calculateInfiniteProgress(){return 100-100/Math.pow(1.1,this.state.infiniteTimer)}handleClose(){this.props.onClose()}render(){const e=this.calculateInfiniteProgress(),t={width:`${e}%`};return n.createElement(Te,{className:"loading-dialog",title:this.props.title,onClose:this.handleClose,disabled:!0},n.createElement("div",{className:"form-content"},n.createElement("label",null,n.createElement(v.c,null,"Take a deep breath and enjoy being in the present moment...")),n.createElement("div",{className:"progress-bar-wrapper"},n.createElement("span",{className:"progress-bar"},n.createElement("span",{className:"progress "+(100===e?"completed":""),style:t})))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"submit",disabled:!0,className:"processing"},"Submit",n.createElement(Re,{name:"spinner"}))))}}Vt.propTypes={onClose:o().func,title:o().string};const Bt=(0,k.Z)("common")(Vt),Gt="directorysync",Kt="mail",Ht="uniqueMember";class $t{constructor(e=[],t=""){if(!e||0===e?.length)return void this.setDefaut(t);const a=e.domains?.org_domain;this.openCredentials=!0,this.openDirectoryConfiguration=!1,this.openSynchronizationOptions=!1,this.source=e.source,this.authenticationType=a?.authentication_type||"basic",this.directoryType=a?.directory_type||"ad",this.connectionType=a?.connection_type||"plain",this.host=a?.hosts?.length>0?a?.hosts[0]:"",this.hostError=null,this.port=a?.port?.toString()||"389",this.portError=null,this.username=a?.username||"",this.password=a?.password||"",this.domain=a?.domain_name||"",this.domainError=null,this.baseDn=a?.base_dn||"",this.groupPath=e.group_path||"",this.userPath=e.user_path||"",this.groupCustomFilters=e.group_custom_filters||"",this.userCustomFilters=e.user_custom_filters||"",this.groupObjectClass=e.group_object_class||"",this.userObjectClass=e.user_object_class||"",this.useEmailPrefix=e.use_email_prefix_suffix||!1,this.emailPrefix=e.email_prefix||"",this.emailSuffix=e.email_suffix||"",this.fieldsMapping=$t.defaultFieldsMapping(e.fields_mapping),this.defaultAdmin=e.default_user||t,this.defaultGroupAdmin=e.default_group_admin_user||t,this.groupsParentGroup=e.groups_parent_group||"",this.usersParentGroup=e.users_parent_group||"",this.enabledUsersOnly=Boolean(e.enabled_users_only),this.createUsers=Boolean(e.sync_users_create),this.deleteUsers=Boolean(e.sync_users_delete),this.updateUsers=Boolean(e.sync_users_update),this.createGroups=Boolean(e.sync_groups_create),this.deleteGroups=Boolean(e.sync_groups_delete),this.updateGroups=Boolean(e.sync_groups_update),this.userDirectoryToggle=Boolean(this.port)&&Boolean(this.host)&&e?.enabled}setDefaut(e){this.openCredentials=!0,this.openDirectoryConfiguration=!1,this.openSynchronizationOptions=!1,this.source="db",this.authenticationType="basic",this.directoryType="ad",this.connectionType="plain",this.host="",this.hostError=null,this.port="389",this.portError=null,this.username="",this.password="",this.domain="",this.domainError=null,this.baseDn="",this.groupPath="",this.userPath="",this.groupCustomFilters="",this.userCustomFilters="",this.groupObjectClass="",this.userObjectClass="",this.useEmailPrefix=!1,this.emailPrefix="",this.emailSuffix="",this.fieldsMapping=$t.defaultFieldsMapping(),this.defaultAdmin=e,this.defaultGroupAdmin=e,this.groupsParentGroup="",this.usersParentGroup="",this.enabledUsersOnly=!1,this.createUsers=!0,this.deleteUsers=!0,this.updateUsers=!0,this.createGroups=!0,this.deleteGroups=!0,this.updateGroups=!0,this.userDirectoryToggle=!1}static defaultFieldsMapping(e={}){return{ad:{user:Object.assign({id:"objectGuid",firstname:"givenName",lastname:"sn",username:Kt,created:"whenCreated",modified:"whenChanged",groups:"memberOf",enabled:"userAccountControl"},e?.ad?.user),group:Object.assign({id:"objectGuid",name:"cn",created:"whenCreated",modified:"whenChanged",users:"member"},e?.ad?.group)},openldap:{user:Object.assign({id:"entryUuid",firstname:"givenname",lastname:"sn",username:"mail",created:"createtimestamp",modified:"modifytimestamp"},e?.openldap?.user),group:Object.assign({id:"entryUuid",name:"cn",created:"createtimestamp",modified:"modifytimestamp",users:Ht},e?.openldap?.group)}}}static get DEFAULT_AD_FIELDS_MAPPING_USER_USERNAME_VALUE(){return Kt}static get DEFAULT_OPENLDAP_FIELDS_MAPPING_GROUP_USERS_VALUE(){return Ht}}const Zt=$t,Yt=class{constructor(e){const t=e.directoryType,a=!e.authenticationType||"basic"===e.authenticationType;this.enabled=e.userDirectoryToggle,this.group_path=e.groupPath,this.user_path=e.userPath,this.group_custom_filters=e.groupCustomFilters,this.user_custom_filters=e.userCustomFilters,this.group_object_class="openldap"===t?e.groupObjectClass:"",this.user_object_class="openldap"===t?e.userObjectClass:"",this.use_email_prefix_suffix="openldap"===t&&e.useEmailPrefix,this.email_prefix="openldap"===t&&this.useEmailPrefix?e.emailPrefix:"",this.email_suffix="openldap"===t&&this.useEmailPrefix?e.emailSuffix:"",this.default_user=e.defaultAdmin,this.default_group_admin_user=e.defaultGroupAdmin,this.groups_parent_group=e.groupsParentGroup,this.users_parent_group=e.usersParentGroup,this.enabled_users_only=e.enabledUsersOnly,this.sync_users_create=e.createUsers,this.sync_users_delete=e.deleteUsers,this.sync_users_update=e.updateUsers,this.sync_groups_create=e.createGroups,this.sync_groups_delete=e.deleteGroups,this.sync_groups_update=e.updateGroups,this.fields_mapping=e.fieldsMapping,this.domains={org_domain:{connection_type:e.connectionType,authentication_type:e.authenticationType,directory_type:t,domain_name:e.domain,username:a?e.username:void 0,password:a?e.password:void 0,base_dn:e.baseDn,hosts:[e.host],port:parseInt(e.port,10)}}}};function Jt(){return Jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},setAdUserFieldsMappingSettings:()=>{},setOpenLdapGroupFieldsMappingSettings:()=>{},hadDisabledSettings:()=>{},getUsers:()=>{},hasSettingsChanges:()=>{},findUserDirectorySettings:()=>{},save:()=>{},delete:()=>{},test:()=>{},setProcessing:()=>{},isProcessing:()=>{},getErrors:()=>{},setError:()=>{},simulateUsers:()=>{},requestSynchronization:()=>{},mustOpenSynchronizePopUp:()=>{},synchronizeUsers:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},clearContext:()=>{}});class ea extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.userDirectoryService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName(`${Gt}`)}async findAll(){this.apiClientOptions.setResourceName(`${Gt}/settings`);const e=new at(this.apiClientOptions);return(await e.findAll()).body}async update(e){this.apiClientOptions.setResourceName(`${Gt}`);const t=new at(this.apiClientOptions);return(await t.update("settings",e)).body}async delete(){return this.apiClientOptions.setResourceName(`${Gt}`),new at(this.apiClientOptions).delete("settings")}async test(e){return this.apiClientOptions.setResourceName(`${Gt}/settings/test`),new at(this.apiClientOptions).create(e)}async simulate(){this.apiClientOptions.setResourceName(`${Gt}`);const e=new at(this.apiClientOptions);return(await e.get("synchronize/dry-run")).body}async synchronize(){this.apiClientOptions.setResourceName(`${Gt}/synchronize`);const e=new at(this.apiClientOptions);return(await e.create({})).body}async findUsers(){return this.apiClientOptions.setResourceName(`${Gt}/users`),new at(this.apiClientOptions).findAll()}}(e.context.getApiClientOptions()),this.userService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName("users")}async findAll(){return new at(this.apiClientOptions).findAll()}}(e.context.getApiClientOptions())}get defaultState(){return{users:[],errors:this.initErrors(),mustSynchronize:!1,currentSettings:null,settings:new Zt,submitted:!1,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),setAdUserFieldsMappingSettings:this.setAdUserFieldsMappingSettings.bind(this),setOpenLdapGroupFieldsMappingSettings:this.setOpenLdapGroupFieldsMappingSettings.bind(this),hadDisabledSettings:this.hadDisabledSettings.bind(this),findUserDirectorySettings:this.findUserDirectorySettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),setProcessing:this.setProcessing.bind(this),simulateUsers:this.simulateUsers.bind(this),synchronizeUsers:this.synchronizeUsers.bind(this),save:this.save.bind(this),delete:this.delete.bind(this),test:this.test.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),getUsers:this.getUsers.bind(this),requestSynchronization:this.requestSynchronization.bind(this),mustOpenSynchronizePopUp:this.mustOpenSynchronizePopUp.bind(this),clearContext:this.clearContext.bind(this)}}initErrors(){return{hostError:null,portError:null,domainError:null}}async findUserDirectorySettings(){this.setProcessing(!0);const e=await this.userDirectoryService.findAll(),t=await this.userService.findAll(),a=t.body.find((e=>this.props.context.loggedInUser.id===e.id)),n=new Zt(e,a.id);this.setState({users:this.sortUsers(t.body)}),this.setState({currentSettings:n}),this.setState({settings:Object.assign({},n)}),this.setProcessing(!1)}sortUsers(e){const t=e=>`${e.profile.first_name} ${e.profile.last_name}`;return e.sort(((e,a)=>t(e).localeCompare(t(a))))}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}requestSynchronization(e){this.setState({mustSynchronize:e})}mustOpenSynchronizePopUp(){return this.state.mustSynchronize}setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});this.isAdFieldsMappingUserUsernameResetNeeded(e,t)&&(a.fieldsMapping.ad.user.username=Zt.DEFAULT_AD_FIELDS_MAPPING_USER_USERNAME_VALUE,this.setError("fieldsMappingAdUserUsernameError",null)),this.isOpenLdapFieldsMappingGroupUsersResetNeeded(e,t)&&(a.fieldsMapping.openldap.group.users=Zt.DEFAULT_OPENLDAP_FIELDS_MAPPING_GROUP_USERS_VALUE,this.setError("fieldsMappingOpenLdapGroupUsersError",null)),this.setState({settings:a})}isAdFieldsMappingUserUsernameResetNeeded(e,t){return e===Qt&&"openldap"===t}isOpenLdapFieldsMappingGroupUsersResetNeeded(e,t){return e===Qt&&"ad"===t}setAdUserFieldsMappingSettings(e,t){const a=Object.assign({},this.state.settings);a.fieldsMapping.ad.user[e]=t,this.setState({settings:a})}setOpenLdapGroupFieldsMappingSettings(e,t){const a=Object.assign({},this.state.settings);a.fieldsMapping.openldap.group[e]=t,this.setState({settings:a})}hadDisabledSettings(){const e=this.getCurrentSettings();return Boolean(e?.port)&&Boolean(e?.host)&&!e?.userDirectoryToggle}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e})}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new Yt(this.state.settings);await this.userDirectoryService.update(e),await this.findUserDirectorySettings()}async delete(){this.setProcessing(!0),await this.userDirectoryService.delete(),await this.findUserDirectorySettings()}async test(){this.setProcessing(!0);const e=new Yt(this.state.settings),t=await this.userDirectoryService.test(e);return this.setProcessing(!1),t}async simulateUsers(){return this.userDirectoryService.simulate()}async synchronizeUsers(){return this.userDirectoryService.synchronize()}getErrors(){return this.state.errors}setError(e,t){const a=Object.assign({},this.state.errors,{[e]:t});this.setState({errors:a})}getUsers(){return this.state.users}setErrors(e,t=(()=>{})){const a=Object.assign({},this.state.errors,e);return this.setState({errors:a},t)}render(){return n.createElement(Xt.Provider,{value:this.state},this.props.children)}}ea.propTypes={context:o().any,children:o().any};const ta=I(ea);function aa(e){return class extends n.Component{render(){return n.createElement(Xt.Consumer,null,(t=>n.createElement(e,Jt({adminUserDirectoryContext:t},this.props))))}}}class na extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openFullReport:!1,userDirectorySimulateSynchronizeResult:null}}bindEventHandlers(){this.handleFullReportClicked=this.handleFullReportClicked.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSynchronize=this.handleSynchronize.bind(this)}async componentDidMount(){try{const e=await this.props.adminUserDirectoryContext.simulateUsers();this.setState({loading:!1,userDirectorySimulateSynchronizeResult:e})}catch(e){await this.handleError(e)}}async handleError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.handleClose()}handleFullReportClicked(){this.setState({openFullReport:!this.state.openFullReport})}handleClose(){this.props.onClose()}handleSynchronize(){this.props.adminUserDirectoryContext.requestSynchronization(!0),this.handleClose()}isLoading(){return this.state.loading}get users(){return this.state.userDirectorySimulateSynchronizeResult.users}get groups(){return this.state.userDirectorySimulateSynchronizeResult.groups}get usersSuccess(){return this.users.filter((e=>"success"===e.status))}get groupsSuccess(){return this.groups.filter((e=>"success"===e.status))}get usersWarning(){return this.users.filter((e=>"warning"===e.status))}get groupsWarning(){return this.groups.filter((e=>"warning"===e.status))}get usersError(){return this.users.filter((e=>"error"===e.status))}get groupsError(){return this.groups.filter((e=>"error"===e.status))}get usersIgnored(){return this.users.filter((e=>"ignore"===e.status))}get groupsIgnored(){return this.groups.filter((e=>"ignore"===e.status))}hasSuccessResource(){return this.usersSuccess.length>0||this.groupsSuccess.length>0}hasSuccessUserResource(){return this.usersSuccess.length>0}hasSuccessGroupResource(){return this.groupsSuccess.length>0}hasErrorOrIgnoreResource(){return this.usersError.length>0||this.groupsError.length>0||this.usersWarning.length>0||this.groupsWarning.length>0||this.usersIgnored.length>0||this.groupsIgnored.length>0}getFullReport(){let e="";return e=e.concat(this.getUsersFullReport()),e=e.concat(this.getGroupsFullReport()),e}getUsersFullReport(){if(!(this.usersSuccess.length>0||this.usersWarning.length>0||this.usersError.length>0||this.usersIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.props.t("Users")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.usersSuccess.length>0&&(e=e.concat(`\n${this.props.t("Success:")}\n`),this.usersSuccess.map(a)),this.usersWarning.length>0&&(e=e.concat(`\n${this.props.t("Warning:")}\n`),this.usersWarning.map(a)),this.usersError.length>0&&(e=e.concat(`\n${this.props.t("Errors:")}\n`),this.usersError.map(a)),this.usersIgnored.length>0&&(e=e.concat(`\n${this.props.t("Ignored:")}\n`),this.usersIgnored.map(a)),e.concat("\n")}getGroupsFullReport(){if(!(this.groupsSuccess.length>0||this.groupsWarning.length>0||this.groupsError.length>0||this.groupsIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.props.t("Groups")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.groupsSuccess.length>0&&(e=e.concat(`\n${this.props.t("Success:")}\n`),this.groupsSuccess.map(a)),this.groupsWarning.length>0&&(e=e.concat(`\n${this.props.t("Warning:")}\n`),this.groupsWarning.map(a)),this.groupsError.length>0&&(e=e.concat(`\n${this.props.t("Errors:")}\n`),this.groupsError.map(a)),this.groupsIgnored.length>0&&(e=e.concat(`\n${this.props.t("Ignored:")}\n`),this.groupsIgnored.map(a)),e}get translate(){return this.props.t}render(){return n.createElement("div",null,this.isLoading()&&n.createElement(Bt,{onClose:this.handleClose,title:this.props.t("Synchronize simulation")}),!this.isLoading()&&n.createElement(Te,{className:"ldap-simulate-synchronize-dialog",title:this.props.t("Synchronize simulation report"),onClose:this.handleClose,disabled:this.isLoading()},n.createElement("div",{className:"form-content",onSubmit:this.handleFormSubmit},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"The operation was successful."))),n.createElement("p",null),this.hasSuccessResource()&&n.createElement("p",{id:"resources-synchronize"},this.hasSuccessUserResource()&&n.createElement(n.Fragment,null,this.props.t("{{count}} user will be synchronized.",{count:this.usersSuccess.length})),this.hasSuccessUserResource()&&this.hasSuccessGroupResource()&&n.createElement("br",null),this.hasSuccessGroupResource()&&n.createElement(n.Fragment,null,this.props.t("{{count}} group will be synchronized.",{count:this.groupsSuccess.length}))),!this.hasSuccessResource()&&n.createElement("p",{id:"no-resources"}," ",n.createElement(v.c,null,"No resources will be synchronized.")," "),this.hasErrorOrIgnoreResource()&&n.createElement("p",{className:"error inline-error"},n.createElement(v.c,null,"Some resources will not be synchronized and will require your attention, see the full report.")),n.createElement("div",{className:"accordion operation-details "+(this.state.openFullReport?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleFullReportClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"Full report"),this.state.openFullReport&&n.createElement(Re,{name:"caret-down"}),!this.state.openFullReport&&n.createElement(Re,{name:"caret-right"}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.getFullReport()})))),n.createElement("p",null)),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.isLoading(),onClick:this.handleClose}),n.createElement("button",{type:"submit",disabled:this.isLoading(),className:"primary",onClick:this.handleSynchronize},n.createElement(v.c,null,"Synchronize")))))}}na.propTypes={onClose:o().func,dialogContext:o().object,actionFeedbackContext:o().any,adminUserDirectoryContext:o().object,t:o().func};const ia=d(aa((0,k.Z)("common")(na)));class sa extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openFullReport:!1,userDirectorySynchronizeResult:null}}bindEventHandlers(){this.handleFullReportClicked=this.handleFullReportClicked.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSynchronize=this.handleSynchronize.bind(this)}async componentDidMount(){try{const e=await this.props.adminUserDirectoryContext.synchronizeUsers();this.setState({loading:!1,userDirectorySynchronizeResult:e})}catch(e){await this.handleError(e)}}async handleError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.handleClose()}handleFullReportClicked(){this.setState({openFullReport:!this.state.openFullReport})}handleClose(){this.props.onClose()}handleSynchronize(){this.handleClose()}isLoading(){return this.state.loading}get users(){return this.state.userDirectorySynchronizeResult.users}get groups(){return this.state.userDirectorySynchronizeResult.groups}get usersSuccess(){return this.users.filter((e=>"success"===e.status))}get groupsSuccess(){return this.groups.filter((e=>"success"===e.status))}get usersWarning(){return this.users.filter((e=>"warning"===e.status))}get groupsWarning(){return this.groups.filter((e=>"warning"===e.status))}get usersError(){return this.users.filter((e=>"error"===e.status))}get groupsError(){return this.groups.filter((e=>"error"===e.status))}get usersIgnored(){return this.users.filter((e=>"ignore"===e.status))}get groupsIgnored(){return this.groups.filter((e=>"ignore"===e.status))}hasSuccessResource(){return this.usersSuccess.length>0||this.groupsSuccess.length>0}hasSuccessUserResource(){return this.usersSuccess.length>0}hasSuccessGroupResource(){return this.groupsSuccess.length>0}hasErrorOrIgnoreResource(){return this.usersError.length>0||this.groupsError.length>0||this.usersWarning.length>0||this.groupsWarning.length>0||this.usersIgnored.length>0||this.groupsIgnored.length>0}getFullReport(){let e="";return e=e.concat(this.getUsersFullReport()),e=e.concat(this.getGroupsFullReport()),e}getUsersFullReport(){if(!(this.usersSuccess.length>0||this.usersWarning.length>0||this.usersError.length>0||this.usersIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.translate("Users")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.usersSuccess.length>0&&(e=e.concat(`\n${this.translate("Success:")}\n`),this.usersSuccess.map(a)),this.usersWarning.length>0&&(e=e.concat(`\n${this.translate("Warning:")}\n`),this.usersWarning.map(a)),this.usersError.length>0&&(e=e.concat(`\n${this.translate("Errors:")}\n`),this.usersError.map(a)),this.usersIgnored.length>0&&(e=e.concat(`\n${this.translate("Ignored:")}\n`),this.usersIgnored.map(a)),e.concat("\n")}getGroupsFullReport(){if(!(this.groupsSuccess.length>0||this.groupsWarning.length>0||this.groupsError.length>0||this.groupsIgnored.length>0))return"";let e="";const t=`-----------------------------------------------\n${this.translate("Groups")}\n-----------------------------------------------\n`;e=e.concat(t);const a=t=>e=e.concat(`- ${t.message}\n`);return this.groupsSuccess.length>0&&(e=e.concat(`\n${this.translate("Success:")}\n`),this.groupsSuccess.map(a)),this.groupsWarning.length>0&&(e=e.concat(`\n${this.translate("Warning:")}\n`),this.groupsWarning.map(a)),this.groupsError.length>0&&(e=e.concat(`\n${this.translate("Errors:")}\n`),this.groupsError.map(a)),this.groupsIgnored.length>0&&(e=e.concat(`\n${this.translate("Ignored:")}\n`),this.groupsIgnored.map(a)),e}get translate(){return this.props.t}render(){return n.createElement("div",null,this.isLoading()&&n.createElement(Bt,{onClose:this.handleClose,title:this.translate("Synchronize")}),!this.isLoading()&&n.createElement(Te,{className:"ldap-simulate-synchronize-dialog",title:this.translate("Synchronize report"),onClose:this.handleClose,disabled:this.isLoading()},n.createElement("div",{className:"form-content",onSubmit:this.handleFormSubmit},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"The operation was successful."))),n.createElement("p",null),this.hasSuccessResource()&&n.createElement("p",{id:"resources-synchronize"},this.hasSuccessUserResource()&&n.createElement(n.Fragment,null,this.translate("{{count}} user has been synchronized.",{count:this.usersSuccess.length})),this.hasSuccessUserResource()&&this.hasSuccessGroupResource()&&n.createElement("br",null),this.hasSuccessGroupResource()&&n.createElement(n.Fragment,null,this.translate("{{count}} group has been synchronized.",{count:this.groupsSuccess.length}))),!this.hasSuccessResource()&&n.createElement("p",{id:"no-resources"}," ",n.createElement(v.c,null,"No resources have been synchronized.")," "),this.hasErrorOrIgnoreResource()&&n.createElement("p",{className:"error inline-error"},n.createElement(v.c,null,"Some resources will not be synchronized and will require your attention, see the full report.")),n.createElement("div",{className:"accordion operation-details "+(this.state.openFullReport?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleFullReportClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"Full report"),this.state.openFullReport&&n.createElement(Re,{name:"caret-down"}),!this.state.openFullReport&&n.createElement(Re,{name:"caret-right"}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.getFullReport()})))),n.createElement("p",null)),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{disabled:this.isLoading(),className:"primary",type:"button",onClick:this.handleClose},n.createElement(v.c,null,"Ok")))))}}sa.propTypes={onClose:o().func,actionFeedbackContext:o().any,adminUserDirectoryContext:o().object,t:o().func};const oa=d(aa((0,k.Z)("common")(sa)));class ra{constructor(e,t){this.context=e,this.translate=t}static getInstance(e,t){return this.instance||(this.instance=new ra(e,t)),this.instance}static killInstance(){this.instance=null}async validate(){const e={...this.validateHostInput(),...this.validatePortInput(),...this.validateDomainInput(),...this.validateFieldsMappingAdUserUsernameInput(),...this.validateOpenLdapFieldsMappingGroupUsersInput()};return await this.context.setErrors(e),0===Object.values(e).filter((e=>e)).length}validateHostInput(){const e=this.context.getSettings(),t=e.host?.trim(),a=t.length?null:this.translate("A host is required.");return this.context.setError("hostError",a),{hostError:a}}validatePortInput(){let e=null;const t=this.context.getSettings().port.trim();return t.length?Ct()("^[0-9]+").test(t)||(e=this.translate("Only numeric characters allowed.")):e=this.translate("A port is required."),this.context.setError("portError",e),{portError:e}}validateFieldsMappingAdUserUsernameInput(){const e=this.context.getSettings().fieldsMapping.ad.user.username;let t=null;return e&&""!==e.trim()?e.length>128&&(t=this.translate("The user username field mapping cannot exceed 128 characters.")):t=this.translate("The user username field mapping cannot be empty"),this.context.setError("fieldsMappingAdUserUsernameError",t),{fieldsMappingAdUserUsernameError:t}}validateOpenLdapFieldsMappingGroupUsersInput(){const e=this.context.getSettings().fieldsMapping.openldap.group.users;let t=null;return e&&""!==e.trim()?e.length>128&&(t=this.translate("The group users field mapping cannot exceed 128 characters.")):t=this.translate("The group users field mapping cannot be empty"),this.context.setError("fieldsMappingOpenLdapGroupUsersError",t),{fieldsMappingOpenLdapGroupUsersError:t}}validateDomainInput(){let e=null;return this.context.getSettings().domain.trim().length||(e=this.translate("A domain name is required.")),this.context.setError("domainError",e),{domainError:e}}}const la=ra;class ca extends n.Component{hasChildren(){return this.props.node.group.groups.length>0}displayUserName(e){return`${e.profile.first_name} ${e.profile.last_name}`}get node(){return this.props.node}render(){return n.createElement("ul",{key:this.node.id},"group"===this.node.type&&n.createElement("li",{className:"group"},this.node.group.name,n.createElement("ul",null,Object.values(this.node.group.users).map((e=>n.createElement("li",{className:"user",key:e.id},e.errors&&n.createElement("span",{className:"error"},e.directory_name),!e.errors&&n.createElement("span",null,this.displayUserName(e.user)," ",n.createElement("em",null,"(",e.user.username,")"))))),Object.values(this.node.group.groups).map((e=>n.createElement(ca,{key:`tree-${e.id}`,node:e}))))),"user"===this.node.type&&n.createElement("li",{className:"user"},this.node.errors&&n.createElement("span",{className:"error"},this.node.directory_name),!this.node.errors&&n.createElement("span",null,this.displayUserName(this.node.user)," ",n.createElement("em",null,"(",this.node.user.username,")"))))}}ca.propTypes={node:o().object};const ma=ca;class da extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindEventHandlers()}get defaultState(){return{loading:!0,openListGroupsUsers:!1,openStructureGroupsUsers:!1,openErrors:!1}}bindEventHandlers(){this.handleListGroupsUsersClicked=this.handleListGroupsUsersClicked.bind(this),this.handleStructureGroupsUsersClicked=this.handleStructureGroupsUsersClicked.bind(this),this.handleErrorsClicked=this.handleErrorsClicked.bind(this),this.handleClose=this.handleClose.bind(this)}componentDidMount(){this.setState({loading:!1})}handleListGroupsUsersClicked(){this.setState({openListGroupsUsers:!this.state.openListGroupsUsers})}handleStructureGroupsUsersClicked(){this.setState({openStructureGroupsUsers:!this.state.openStructureGroupsUsers})}handleErrorsClicked(){this.setState({openErrors:!this.state.openErrors})}handleClose(){this.props.onClose(),this.props.context.setContext({displayTestUserDirectoryDialogProps:null})}hasAllInputDisabled(){return this.state.loading}displayUserName(e){return`${e.profile.first_name} ${e.profile.last_name}`}get users(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.users}get groups(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.groups}get tree(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.tree}get errors(){return this.props.context.displayTestUserDirectoryDialogProps.userDirectoryTestResult.errors}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"ldap-test-settings-dialog",title:this.translate("Test settings report"),onClose:this.handleClose,disabled:this.hasAllInputDisabled()},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement("strong",null,n.createElement(v.c,null,"A connection could be established. Well done!"))),n.createElement("p",null),n.createElement("div",{className:"ldap-test-settings-report"},n.createElement("p",null,this.users.length>0&&n.createElement(n.Fragment,null,this.translate("{{count}} user has been found.",{count:this.users.length})),this.users.length>0&&this.groups.length>0&&n.createElement("br",null),this.groups.length>0&&n.createElement(n.Fragment,null,this.translate("{{count}} group has been found.",{count:this.groups.length}))),n.createElement("div",{className:"accordion directory-list "+(this.state.openListGroupsUsers?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleListGroupsUsersClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See list"),this.state.openListGroupsUsers&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openListGroupsUsers&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("table",null,n.createElement("tbody",null,n.createElement("tr",null,n.createElement("td",null,n.createElement(v.c,null,"Groups")),n.createElement("td",null,n.createElement(v.c,null,"Users"))),n.createElement("tr",null,n.createElement("td",null,this.groups.map((e=>e.errors&&n.createElement("div",{key:e.id},n.createElement("span",{className:"error"},e.directory_name))||n.createElement("div",{key:e.id},e.group.name)))),n.createElement("td",null,this.users.map((e=>e.errors&&n.createElement("div",{key:e.id},n.createElement("span",{className:"error"},e.directory_name))||n.createElement("div",{key:e.id},this.displayUserName(e.user)," ",n.createElement("em",null,"(",e.user.username,")")))))))))),n.createElement("div",{className:"accordion accordion-directory-structure "+(this.state.openStructureGroupsUsers?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleStructureGroupsUsersClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See structure"),this.state.openStructureGroupsUsers&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openStructureGroupsUsers&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"directory-structure"},n.createElement("ul",null,n.createElement("li",{className:"group"},"Root",Object.values(this.tree).map((e=>n.createElement(ma,{key:`tree-${e.id}`,node:e})))))))),this.errors.length>0&&n.createElement("div",null,n.createElement("p",{className:"directory-errors error"},this.translate("{{count}} entry had errors and will be ignored during synchronization.",{count:this.errors.length})),n.createElement("div",{className:"accordion accordion-directory-errors "+(this.state.openErrors?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleErrorsClicked},n.createElement("button",{type:"button",className:"link no-border"},n.createElement(v.c,null,"See error details"),this.state.openErrors&&n.createElement(Re,{name:"caret-down",baseline:!0}),!this.state.openErrors&&n.createElement(Re,{name:"caret-right",baseline:!0}))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"directory-errors"},n.createElement("textarea",{value:JSON.stringify(this.errors,null," "),readOnly:!0}))))))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("button",{type:"button",disabled:this.hasAllInputDisabled(),className:"primary",onClick:this.handleClose},n.createElement(v.c,null,"OK"))))}}da.propTypes={context:o().any,onClose:o().func,t:o().func};const ha=I((0,k.Z)("common")(da));class pa extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.state=this.defaultState,this.userDirectoryFormService=la.getInstance(this.props.adminUserDirectoryContext,this.props.t)}componentDidUpdate(){this.props.adminUserDirectoryContext.mustOpenSynchronizePopUp()&&(this.props.adminUserDirectoryContext.requestSynchronization(!1),this.handleSynchronizeClick())}async handleSaveClick(){this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle?await this.props.adminUserDirectoryContext.save():await this.props.adminUserDirectoryContext.delete(),this.handleSaveSuccess()}async handleFormSubmit(e){try{if(await this.userDirectoryFormService.validate())switch(e){case"save":await this.handleSaveClick();break;case"test":await this.handleTestClick()}}catch(e){this.handleSubmitError(e)}finally{this.props.adminUserDirectoryContext.setSubmitted(!0),this.props.adminUserDirectoryContext.setProcessing(!1)}}async handleTestClick(){const e={userDirectoryTestResult:(await this.props.adminUserDirectoryContext.test()).body};this.props.context.setContext({displayTestUserDirectoryDialogProps:e}),this.props.dialogContext.open(ha)}isSaveEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.hasSettingsChanges()}isTestEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle}isSynchronizeEnabled(){return!this.props.adminUserDirectoryContext.isProcessing()&&this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle&&this.props.adminUserDirectoryContext.getCurrentSettings().userDirectoryToggle}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleTestClick=this.handleTestClick.bind(this),this.handleSimulateSynchronizeClick=this.handleSimulateSynchronizeClick.bind(this),this.handleSynchronizeClick=this.handleSynchronizeClick.bind(this)}handleSimulateSynchronizeClick(){this.props.dialogContext.open(ia)}handleSynchronizeClick(){this.props.dialogContext.open(oa)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The user directory settings for the organization were updated."))}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:()=>this.handleFormSubmit("save")},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isTestEnabled(),onClick:()=>this.handleFormSubmit("test")},n.createElement(Re,{name:"plug"}),n.createElement("span",null,n.createElement(v.c,null,"Test settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSynchronizeEnabled(),onClick:this.handleSimulateSynchronizeClick},n.createElement(Re,{name:"magic-wand"}),n.createElement("span",null,n.createElement(v.c,null,"Simulate synchronize")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSynchronizeEnabled(),onClick:this.handleSynchronizeClick},n.createElement(Re,{name:"refresh"}),n.createElement("span",null,n.createElement(v.c,null,"Synchronize")))))))}}pa.propTypes={context:o().object,dialogContext:o().object,adminUserDirectoryContext:o().object,actionFeedbackContext:o().object,t:o().func};const ua=I(d(g(aa((0,k.Z)("common")(pa)))));class ga extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.userDirectoryFormService=la.getInstance(this.props.adminUserDirectoryContext,this.props.t),this.bindCallbacks()}get defaultState(){return{hasFieldFocus:!1}}componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(ua),this.props.adminUserDirectoryContext.findUserDirectorySettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminUserDirectoryContext.clearContext(),la.killInstance(),this.userDirectoryFormService=null}bindCallbacks(){this.handleCredentialTitleClicked=this.handleCredentialTitleClicked.bind(this),this.handleDirectoryConfigurationTitleClicked=this.handleDirectoryConfigurationTitleClicked.bind(this),this.handleSynchronizationOptionsTitleClicked=this.handleSynchronizationOptionsTitleClicked.bind(this),this.handleFieldFocus=this.handleFieldFocus.bind(this),this.handleFieldBlur=this.handleFieldBlur.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleAdUserFieldsMappingInputChange=this.handleAdUserFieldsMappingInputChange.bind(this),this.handleOpenLdapGroupFieldsMappingInputChange=this.handleOpenLdapGroupFieldsMappingInputChange.bind(this)}handleCredentialTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openCredentials",!e.openCredentials)}handleDirectoryConfigurationTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openDirectoryConfiguration",!e.openDirectoryConfiguration)}handleSynchronizationOptionsTitleClicked(){const e=this.props.adminUserDirectoryContext.getSettings();this.props.adminUserDirectoryContext.setSettings("openSynchronizationOptions",!e.openSynchronizationOptions)}handleInputChange(e){const t=e.target,a="checkbox"===t.type?t.checked:t.value,n=t.name;this.props.adminUserDirectoryContext.setSettings(n,a)}handleAdUserFieldsMappingInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminUserDirectoryContext.setAdUserFieldsMappingSettings(n,a)}handleOpenLdapGroupFieldsMappingInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminUserDirectoryContext.setOpenLdapGroupFieldsMappingSettings(n,a)}handleFieldFocus(){this.setState({hasFieldFocus:!0})}handleFieldBlur(){this.setState({hasFieldFocus:!1})}hasAllInputDisabled(){const e=this.props.adminUserDirectoryContext.getSettings();return e.processing||e.loading}isUserDirectoryChecked(){return this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle}isActiveDirectoryChecked(){return"ad"===this.props.adminUserDirectoryContext.getSettings().directoryType}isOpenLdapChecked(){return"openldap"===this.props.adminUserDirectoryContext.getSettings().directoryType}isUseEmailPrefixChecked(){return this.props.adminUserDirectoryContext.getSettings().useEmailPrefix}getUsersAllowedToBeDefaultAdmin(){const e=this.props.adminUserDirectoryContext.getUsers();if(null!==e){const t=e.filter((e=>!0===e.active&&"admin"===e.role.name));return t&&t.map((e=>({value:e.id,label:this.displayUser(e)})))}return[]}getUsersAllowedToBeDefaultGroupAdmin(){const e=this.props.adminUserDirectoryContext.getUsers();if(null!==e){const t=e.filter((e=>!0===e.active));return t&&t.map((e=>({value:e.id,label:this.displayUser(e)})))}return[]}displayUser(e){return`${e.profile.first_name} ${e.profile.last_name} (${e.username})`}shouldShowSourceWarningMessage(){const e=this.props.adminUserDirectoryContext;return"db"!==e?.getCurrentSettings()?.source&&e?.hasSettingsChanges()}get settingsSource(){return this.props.adminUserDirectoryContext?.getCurrentSettings()?.source}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}get connectionType(){return[{value:"plain",label:"ldap://"},{value:"ssl",label:"ldaps:// (ssl)"},{value:"tls",label:"ldaps:// (tls)"}]}get supportedAuthenticationMethod(){return[{value:"basic",label:this.props.t("Basic")},{value:"sasl",label:"SASL (EE)"}]}render(){const e=this.props.adminUserDirectoryContext.getSettings(),t=this.props.adminUserDirectoryContext.getErrors(),a=this.props.adminUserDirectoryContext.isSubmitted(),i=this.props.adminUserDirectoryContext.hadDisabledSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"ldap-settings col7 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userDirectoryToggle",onChange:this.handleInputChange,checked:e.userDirectoryToggle,disabled:this.hasAllInputDisabled(),id:"userDirectoryToggle"}),n.createElement("label",{htmlFor:"userDirectoryToggle"},n.createElement(v.c,null,"Users Directory")))),!this.isUserDirectoryChecked()&&n.createElement(n.Fragment,null,i&&n.createElement("div",null,n.createElement("div",{className:"message warning"},n.createElement(v.c,null,"The configuration has been disabled as it needs to be checked to make it correct before using it."))),!i&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"No Users Directory is configured. Enable it to synchronise your users and groups with passbolt."))),this.isUserDirectoryChecked()&&n.createElement(n.Fragment,null,this.shouldShowSourceWarningMessage()&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning:")," These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.")),n.createElement("p",{className:"description"},n.createElement(v.c,null,"A Users Directory is configured. The users and groups of passbolt will synchronize with it.")),n.createElement("div",{className:"accordion section-general "+(e.openCredentials?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleCredentialTitleClicked},e.openCredentials&&n.createElement(Re,{name:"caret-down"}),!e.openCredentials&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Credentials"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"radiolist required"},n.createElement("label",null,n.createElement(v.c,null,"Directory type")),n.createElement("div",{className:"input radio ad openldap form-element "},n.createElement("div",{className:"input radio"},n.createElement("input",{type:"radio",value:"ad",onChange:this.handleInputChange,name:"directoryType",checked:this.isActiveDirectoryChecked(),id:"directoryTypeAd",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"directoryTypeAd"},n.createElement(v.c,null,"Active Directory"))),n.createElement("div",{className:"input radio"},n.createElement("input",{type:"radio",value:"openldap",onChange:this.handleInputChange,name:"directoryType",checked:this.isOpenLdapChecked(),id:"directoryTypeOpenLdap",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"directoryTypeOpenLdap"},n.createElement(v.c,null,"Open Ldap"))))),n.createElement("div",{className:"input text required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Server url")),n.createElement("div",{className:`input text singleline connection_info ad openldap ${this.hasAllInputDisabled()?"disabled":""} ${this.state.hasFieldFocus?"no-focus":""}`},n.createElement("input",{id:"server-input",type:"text","aria-required":!0,className:"required host ad openldap form-element",name:"host",value:e.host,onChange:this.handleInputChange,placeholder:this.props.t("host"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"protocol",onBlur:this.handleFieldBlur,onFocus:this.handleFieldFocus},n.createElement(Ft,{className:"inline",name:"connectionType",items:this.connectionType,value:e.connectionType,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()})),n.createElement("div",{className:"port ad openldap"},n.createElement("input",{id:"port-input",type:"number","aria-required":!0,className:"required in-field form-element",name:"port",value:e.port,onChange:this.handleInputChange,onBlur:this.handleFieldBlur,onFocus:this.handleFieldFocus,disabled:this.hasAllInputDisabled()}))),t.hostError&&a&&n.createElement("div",{id:"server-input-feedback",className:"error-message"},t.hostError),t.portError&&a&&n.createElement("div",{id:"port-input-feedback",className:"error-message"},t.portError)),n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Authentication method")),n.createElement(Ft,{items:this.supportedAuthenticationMethod,id:"authentication-type-select",name:"authenticationType",value:e.authenticationType,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()})),"basic"===e.authenticationType&&n.createElement("div",{className:"singleline clearfix"},n.createElement("div",{className:"input text first-field ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Username")),n.createElement("input",{id:"username-input",type:"text",className:"fluid form-element",name:"username",value:e.username,onChange:this.handleInputChange,placeholder:this.props.t("Username"),disabled:this.hasAllInputDisabled()})),n.createElement("div",{className:"input text last-field ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Password")),n.createElement("input",{id:"password-input",className:"fluid form-element",name:"password",value:e.password,onChange:this.handleInputChange,placeholder:this.props.t("Password"),type:"password",disabled:this.hasAllInputDisabled()}))),n.createElement("div",{className:"input text required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Domain")),n.createElement("input",{id:"domain-name-input","aria-required":!0,type:"text",name:"domain",value:e.domain,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:"domain.ext",disabled:this.hasAllInputDisabled()}),t.domainError&&a&&n.createElement("div",{id:"domain-name-input-feedback",className:"error-message"},t.domainError)),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Base DN")),n.createElement("input",{id:"base-dn-input",type:"text",name:"baseDn",value:e.baseDn,onChange:this.handleInputChange,className:"fluid form-element",placeholder:"OU=OrgUsers,DC=mydomain,DC=local",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The base DN (default naming context) for the domain.")," ",n.createElement(v.c,null,"If this is empty then it will be queried from the RootDSE."))))),n.createElement("div",{className:"accordion section-directory-configuration "+(e.openDirectoryConfiguration?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDirectoryConfigurationTitleClicked},e.openDirectoryConfiguration&&n.createElement(Re,{name:"caret-down"}),!e.openDirectoryConfiguration&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Directory configuration"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group path")),n.createElement("input",{id:"group-path-input",type:"text","aria-required":!0,name:"groupPath",value:e.groupPath,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Group path"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Group path is used in addition to the base DN while searching groups.")," ",n.createElement(v.c,null,"Leave empty if users and groups are in the same DN."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User path")),n.createElement("input",{id:"user-path-input",type:"text","aria-required":!0,name:"userPath",value:e.userPath,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("User path"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"User path is used in addition to base DN while searching users."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group custom filters")),n.createElement("input",{id:"group-custom-filters-input",type:"text",name:"groupCustomFilters",value:e.groupCustomFilters,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Group custom filters"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Group custom filters are used in addition to the base DN and group path while searching groups.")," ",n.createElement(v.c,null,"Leave empty if no additional filter is required."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User custom filters")),n.createElement("input",{id:"user-custom-filters-input",type:"text",name:"userCustomFilters",value:e.userCustomFilters,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("User custom filters"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"User custom filters are used in addition to the base DN and user path while searching users.")," ",n.createElement(v.c,null,"Leave empty if no additional filter is required."))),this.isOpenLdapChecked()&&n.createElement("div",null,n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group object class")),n.createElement("input",{id:"group-object-class-input",type:"text","aria-required":!0,name:"groupObjectClass",value:e.groupObjectClass,onChange:this.handleInputChange,className:"required fluid",placeholder:"GroupObjectClass",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"For Openldap only. Defines which group object to use.")," (",n.createElement(v.c,null,"Default"),": groupOfUniqueNames)")),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User object class")),n.createElement("input",{id:"user-object-class-input",type:"text","aria-required":!0,name:"userObjectClass",value:e.userObjectClass,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:"UserObjectClass",disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"For Openldap only. Defines which user object to use.")," (",n.createElement(v.c,null,"Default"),": inetOrgPerson)")),n.createElement("div",{className:"input text openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Use email prefix / suffix?")),n.createElement("div",{className:"input toggle-switch openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"useEmailPrefix",value:e.useEmailPrefix,onChange:this.handleInputChange,id:"use-email-prefix-suffix-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"use-email-prefix-suffix-toggle-button"},n.createElement(v.c,null,"Build email based on a prefix and suffix?"))),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Use this option when user entries do not include an email address by default"))),this.isUseEmailPrefixChecked()&&n.createElement("div",{className:"singleline clearfix",id:"use-email-prefix-suffix-options"},n.createElement("div",{className:"input text first-field openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Email prefix")),n.createElement("input",{id:"email-prefix-input",type:"text","aria-required":!0,name:"emailPrefix",checked:e.emailPrefix,onChange:this.handleInputChange,className:"required fluid form-element",placeholder:this.props.t("Username"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The attribute you would like to use for the first part of the email (usually username)."))),n.createElement("div",{className:"input text last-field openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Email suffix")),n.createElement("input",{id:"email-suffix-input",type:"text","aria-required":!0,name:"emailSuffix",value:e.emailSuffix,onChange:this.handleInputChange,className:"required form-element",placeholder:this.props.t("@your-domain.com"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The domain name part of the email (@your-domain-name).")))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Group users field mapping")),n.createElement("input",{id:"field-mapping-openldap-group-users-input",type:"text","aria-required":!0,name:"users",value:e.fieldsMapping.openldap.group.users,onChange:this.handleOpenLdapGroupFieldsMappingInputChange,className:"fluid form-element",placeholder:this.props.t("Group users field mapping"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Directory group's users field to map to Passbolt group's field.")),t.fieldsMappingOpenLdapGroupUsersError&&a&&n.createElement("div",{id:"field-mapping-openldap-group-users-input-feedback",className:"error-message"},t.fieldsMappingOpenLdapGroupUsersError))),this.isActiveDirectoryChecked()&&n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"User username field mapping")),n.createElement("input",{id:"field-mapping-ad-user-username-input",type:"text","aria-required":!0,name:"username",value:e.fieldsMapping.ad.user.username,onChange:this.handleAdUserFieldsMappingInputChange,className:"fluid form-element",placeholder:this.props.t("User username field mapping"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Directory user's username field to map to Passbolt user's username field.")),t.fieldsMappingAdUserUsernameError&&a&&n.createElement("div",{id:"field-mapping-ad-user-username-input-feedback",className:"error-message"},t.fieldsMappingAdUserUsernameError)))),n.createElement("div",{className:"accordion section-sync-options "+(e.openSynchronizationOptions?"":"closed")},n.createElement("h4",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleSynchronizationOptionsTitleClicked},e.openSynchronizationOptions&&n.createElement(Re,{name:"caret-down"}),!e.openSynchronizationOptions&&n.createElement(Re,{name:"caret-right"}),n.createElement(v.c,null,"Synchronization options"))),n.createElement("div",{className:"accordion-content"},n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Default admin")),n.createElement(Ft,{items:this.getUsersAllowedToBeDefaultAdmin(),id:"default-user-select",name:"defaultAdmin",value:e.defaultAdmin,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),search:!0}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The default admin user is the user that will perform the operations for the the directory."))),n.createElement("div",{className:"select-wrapper input required ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Default group admin")),n.createElement(Ft,{items:this.getUsersAllowedToBeDefaultGroupAdmin(),id:"default-group-admin-user-select",name:"defaultGroupAdmin",value:e.defaultGroupAdmin,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),search:!0}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"The default group manager is the user that will be the group manager of newly created groups."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Groups parent group")),n.createElement("input",{id:"groups-parent-group-input",type:"text",name:"groupsParentGroup",value:e.groupsParentGroup,onChange:this.handleInputChange,className:"fluid form-element",placeholder:this.props.t("Groups parent group"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Synchronize only the groups which are members of this group."))),n.createElement("div",{className:"input text ad openldap "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Users parent group")),n.createElement("input",{id:"users-parent-group-input",type:"text",name:"usersParentGroup",value:e.usersParentGroup,onChange:this.handleInputChange,className:"fluid form-element",placeholder:this.props.t("Users parent group"),disabled:this.hasAllInputDisabled()}),n.createElement("div",{className:"help-message"},n.createElement(v.c,null,"Synchronize only the users which are members of this group."))),this.isActiveDirectoryChecked()&&n.createElement("div",{className:"input text clearfix ad "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Enabled users only")),n.createElement("div",{className:"input toggle-switch ad form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"enabledUsersOnly",checked:e.enabledUsersOnly,onChange:this.handleInputChange,id:"enabled-users-only-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"enabled-users-only-toggle-button"},n.createElement(v.c,null,"Only synchronize enabled users (AD)")))),n.createElement("div",{className:"input text clearfix ad openldap"},n.createElement("label",null,n.createElement(v.c,null,"Sync operations")),n.createElement("div",{className:"col6"},n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"createUsers",checked:e.createUsers,onChange:this.handleInputChange,id:"sync-users-create-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-create-toggle-button"},n.createElement(v.c,null,"Create users"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"deleteUsers",checked:e.deleteUsers,onChange:this.handleInputChange,id:"sync-users-delete-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-delete-toggle-button"},n.createElement(v.c,null,"Delete users"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"updateUsers",checked:e.updateUsers,onChange:this.handleInputChange,id:"sync-users-update-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-users-update-toggle-button"},n.createElement(v.c,null,"Update users")))),n.createElement("div",{className:"col6 last"},n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"createGroups",checked:e.createGroups,onChange:this.handleInputChange,id:"sync-groups-create-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-create-toggle-button"},n.createElement(v.c,null,"Create groups"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"deleteGroups",checked:e.deleteGroups,onChange:this.handleInputChange,id:"sync-groups-delete-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-delete-toggle-button"},n.createElement(v.c,null,"Delete groups"))),n.createElement("div",{className:"input toggle-switch ad openldap form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"updateGroups",checked:e.updateGroups,onChange:this.handleInputChange,id:"sync-groups-update-toggle-button",disabled:this.hasAllInputDisabled()}),n.createElement("label",{className:"text",htmlFor:"sync-groups-update-toggle-button"},n.createElement(v.c,null,"Update groups"))))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"user-directory-settings-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need help?")),n.createElement("p",null,n.createElement(v.c,null,"Check out our ldap configuration guide.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/ldap",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}ga.propTypes={adminUserDirectoryContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const ba=aa(O((0,k.Z)("common")(ga))),fa=class{constructor(e={}){this.hasDatabaseSetting="sources_database"in e&&e.sources_database,this.hasFileConfigSetting="sources_file"in e&&e.sources_file,this.passwordCreate=!("send_password_create"in e)||e.send_password_create,this.passwordShare=!("send_password_share"in e)||e.send_password_share,this.passwordUpdate=!("send_password_update"in e)||e.send_password_update,this.passwordDelete=!("send_password_delete"in e)||e.send_password_delete,this.folderCreate=!("send_folder_create"in e)||e.send_folder_create,this.folderUpdate=!("send_folder_update"in e)||e.send_folder_update,this.folderDelete=!("send_folder_delete"in e)||e.send_folder_delete,this.folderShare=!("send_folder_share"in e)||e.send_folder_share,this.commentAdd=!("send_comment_add"in e)||e.send_comment_add,this.groupDelete=!("send_group_delete"in e)||e.send_group_delete,this.groupUserAdd=!("send_group_user_add"in e)||e.send_group_user_add,this.groupUserDelete=!("send_group_user_delete"in e)||e.send_group_user_delete,this.groupUserUpdate=!("send_group_user_update"in e)||e.send_group_user_update,this.groupManagerUpdate=!("send_group_manager_update"in e)||e.send_group_manager_update,this.groupManagerRequestAddUser=!("send_group_manager_requestAddUser"in e)||e.send_group_manager_requestAddUser,this.userCreate=!("send_user_create"in e)||e.send_user_create,this.userRecover=!("send_user_recover"in e)||e.send_user_recover,this.userRecoverComplete=!("send_user_recoverComplete"in e)||e.send_user_recoverComplete,this.userRecoverAbortAdmin=!("send_admin_user_recover_abort"in e)||e.send_admin_user_recover_abort,this.userRecoverCompleteAdmin=!("send_admin_user_recover_complete"in e)||e.send_admin_user_recover_complete,this.userSetupCompleteAdmin=!("send_admin_user_setup_completed"in e)||e.send_admin_user_setup_completed,this.showDescription=!("show_description"in e)||e.show_description,this.showSecret=!("show_secret"in e)||e.show_secret,this.showUri=!("show_uri"in e)||e.show_uri,this.showUsername=!("show_username"in e)||e.show_username,this.showComment=!("show_comment"in e)||e.show_comment,this.accountRecoveryRequestUser=!("send_accountRecovery_request_user"in e)||e.send_accountRecovery_request_user,this.accountRecoveryRequestAdmin=!("send_accountRecovery_request_admin"in e)||e.send_accountRecovery_request_admin,this.accountRecoveryRequestGuessing=!("send_accountRecovery_request_guessing"in e)||e.send_accountRecovery_request_guessing,this.accountRecoveryRequestUserApproved=!("send_accountRecovery_response_user_approved"in e)||e.send_accountRecovery_response_user_approved,this.accountRecoveryRequestUserRejected=!("send_accountRecovery_response_user_rejected"in e)||e.send_accountRecovery_response_user_rejected,this.accountRecoveryRequestCreatedAmin=!("send_accountRecovery_response_created_admin"in e)||e.send_accountRecovery_response_created_admin,this.accountRecoveryRequestCreatedAllAdmins=!("send_accountRecovery_response_created_allAdmins"in e)||e.send_accountRecovery_response_created_allAdmins,this.accountRecoveryRequestPolicyUpdate=!("send_accountRecovery_policy_update"in e)||e.send_accountRecovery_policy_update,this.passwordExpiryExpiredUser=!("send_password_expire"in e)||e.send_password_expire}};function ya(){return ya=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findEmailNotificationSettings:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{}});class ka extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.emailNotificationService=new class{constructor(e){e.setResourceName("settings/emails/notifications"),this.apiClient=new at(e)}async find(){return(await this.apiClient.findAll()).body}async save(e){return(await this.apiClient.create(e)).body}}(t)}get defaultState(){return{currentSettings:null,settings:new fa,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findEmailNotificationSettings:this.findEmailNotificationSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}async findEmailNotificationSettings(){this.setProcessing(!0);const e=await this.emailNotificationService.find(),t=new fa(e);this.setState({currentSettings:t}),this.setState({settings:Object.assign({},t)}),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}setSettings(e,t){const a=Object.assign({},this.state.settings,{[e]:t});this.setState({settings:a})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}async save(){this.setProcessing(!0);const e=new class{constructor(e={}){this.sources_database="hasDatabaseSetting"in e&&e.hasDatabaseSetting,this.sources_file="hasFileConfigSetting"in e&&e.hasFileConfigSetting,this.send_password_create=!("passwordCreate"in e)||e.passwordCreate,this.send_password_share=!("passwordShare"in e)||e.passwordShare,this.send_password_update=!("passwordUpdate"in e)||e.passwordUpdate,this.send_password_delete=!("passwordDelete"in e)||e.passwordDelete,this.send_folder_create=!("folderCreate"in e)||e.folderCreate,this.send_folder_update=!("folderUpdate"in e)||e.folderUpdate,this.send_folder_delete=!("folderDelete"in e)||e.folderDelete,this.send_folder_share=!("folderShare"in e)||e.folderShare,this.send_comment_add=!("commentAdd"in e)||e.commentAdd,this.send_group_delete=!("groupDelete"in e)||e.groupDelete,this.send_group_user_add=!("groupUserAdd"in e)||e.groupUserAdd,this.send_group_user_delete=!("groupUserDelete"in e)||e.groupUserDelete,this.send_group_user_update=!("groupUserUpdate"in e)||e.groupUserUpdate,this.send_group_manager_update=!("groupManagerUpdate"in e)||e.groupManagerUpdate,this.send_group_manager_requestAddUser=!("groupManagerRequestAddUser"in e)||e.groupManagerRequestAddUser,this.send_user_create=!("userCreate"in e)||e.userCreate,this.send_user_recover=!("userRecover"in e)||e.userRecover,this.send_user_recoverComplete=!("userRecoverComplete"in e)||e.userRecoverComplete,this.send_admin_user_setup_completed=!("userSetupCompleteAdmin"in e)||e.userSetupCompleteAdmin,this.send_admin_user_recover_abort=!("userRecoverAbortAdmin"in e)||e.userRecoverAbortAdmin,this.send_admin_user_recover_complete=!("userRecoverCompleteAdmin"in e)||e.userRecoverCompleteAdmin,this.send_accountRecovery_request_user=!("accountRecoveryRequestUser"in e)||e.accountRecoveryRequestUser,this.send_accountRecovery_request_admin=!("accountRecoveryRequestAdmin"in e)||e.accountRecoveryRequestAdmin,this.send_accountRecovery_request_guessing=!("accountRecoveryRequestGuessing"in e)||e.accountRecoveryRequestGuessing,this.send_accountRecovery_response_user_approved=!("accountRecoveryRequestUserApproved"in e)||e.accountRecoveryRequestUserApproved,this.send_accountRecovery_response_user_rejected=!("accountRecoveryRequestUserRejected"in e)||e.accountRecoveryRequestUserRejected,this.send_accountRecovery_response_created_admin=!("accountRecoveryRequestCreatedAmin"in e)||e.accountRecoveryRequestCreatedAmin,this.send_accountRecovery_response_created_allAdmins=!("accountRecoveryRequestCreatedAllAdmins"in e)||e.accountRecoveryRequestCreatedAllAdmins,this.send_accountRecovery_policy_update=!("accountRecoveryRequestPolicyUpdate"in e)||e.accountRecoveryRequestPolicyUpdate,this.show_description=!("showDescription"in e)||e.showDescription,this.show_secret=!("showSecret"in e)||e.showSecret,this.show_uri=!("showUri"in e)||e.showUri,this.show_username=!("showUsername"in e)||e.showUsername,this.show_comment=!("showComment"in e)||e.showComment,this.send_password_expire=!("passwordExpiryExpiredUser"in e)||e.passwordExpiryExpiredUser}}(this.state.settings);await this.emailNotificationService.save(e),await this.findEmailNotificationSettings()}render(){return n.createElement(va.Provider,{value:this.state},this.props.children)}}ka.propTypes={context:o().any,children:o().any};const Ea=I(ka);function wa(e){return class extends n.Component{render(){return n.createElement(va.Consumer,null,(t=>n.createElement(e,ya({adminEmailNotificationContext:t},this.props))))}}}class Ca extends n.Component{constructor(e){super(e),this.bindCallbacks()}async handleSaveClick(){try{await this.props.adminEmailNotificationContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminEmailNotificationContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminEmailNotificationContext.isProcessing()&&this.props.adminEmailNotificationContext.hasSettingsChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The email notification settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Ca.propTypes={adminEmailNotificationContext:o().object,actionFeedbackContext:o().object,t:o().func};const Sa=wa(d((0,k.Z)("common")(Ca)));class xa extends n.Component{constructor(e){super(e),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Sa),this.props.adminEmailNotificationContext.findEmailNotificationSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminEmailNotificationContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){const t=e.target.checked,a=e.target.name;this.props.adminEmailNotificationContext.setSettings(a,t)}hasAllInputDisabled(){return this.props.adminEmailNotificationContext.isProcessing()}hasDatabaseSetting(){return this.props.adminEmailNotificationContext.getSettings().hasDatabaseSetting}hasFileConfigSetting(){return this.props.adminEmailNotificationContext.getSettings().hasFileConfigSetting}canUseFolders(){return this.props.context.siteSettings.canIUse("folders")}canUseAccountRecovery(){return this.props.context.siteSettings.canIUse("accountRecovery")}canUsePasswordExpiry(){return this.props.context.siteSettings.canIUse("passwordExpiry")||this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}canUsePasswordExpiryAdvancedSettings(){return this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}get settingsSource(){return this.hasDatabaseSetting()?"db":this.hasFileConfigSetting()?"file":"env"}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}render(){const e=this.props.adminEmailNotificationContext.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"email-notification-settings col8 main-column"},e&&this.hasDatabaseSetting()&&this.hasFileConfigSetting()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Settings have been found in your database as well as in your passbolt.php (or environment variables).")," ",n.createElement(v.c,null,"The settings displayed in the form below are the one stored in your database and have precedence over others."))),e&&!this.hasDatabaseSetting()&&this.hasFileConfigSetting()&&n.createElement("div",{className:"warning message",id:"email-notification-fileconfig-exists-banner"},n.createElement("p",null,n.createElement(v.c,null,"You seem to have Email Notification Settings defined in your passbolt.php (or via environment variables).")," ",n.createElement(v.c,null,"Submitting the form will overwrite those settings with the ones you choose in the form below."))),n.createElement("h3",null,n.createElement(v.c,null,"Email delivery")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose which email notifications will be sent.")),n.createElement("div",{className:"section"},n.createElement("div",{className:"password-section"},n.createElement("label",null,n.createElement(v.c,null,"Passwords")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordCreate,id:"send-password-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-create-toggle-button"},n.createElement(v.c,null,"When a password is created, notify its creator."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordUpdate,id:"send-password-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-update-toggle-button"},n.createElement(v.c,null,"When a password is updated, notify the users who have access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordDelete,id:"send-password-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-delete-toggle-button"},n.createElement(v.c,null,"When a password is deleted, notify the users who had access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordShare",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordShare,id:"send-password-share-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-password-share-toggle-button"},n.createElement(v.c,null,"When a password is shared, notify the users who gain access to it.")))),this.canUseFolders()&&n.createElement("div",{className:"folder-section"},n.createElement("label",null,n.createElement(v.c,null,"Folders")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderCreate,id:"send-folder-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-create-toggle-button"},n.createElement(v.c,null,"When a folder is created, notify its creator."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderUpdate,id:"send-folder-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-update-toggle-button"},n.createElement(v.c,null,"When a folder is updated, notify the users who have access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderDelete,id:"send-folder-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-delete-toggle-button"},n.createElement(v.c,null,"When a folder is deleted, notify the users who had access to it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"folderShare",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.folderShare,id:"send-folder-share-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-folder-share-toggle-button"},n.createElement(v.c,null,"When a folder is shared, notify the users who gain access to it."))))),n.createElement("div",{className:"section"},n.createElement("div",{className:"comment-section"},n.createElement("label",null,n.createElement(v.c,null,"Comments")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"commentAdd",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.commentAdd,id:"send-comment-add-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-comment-add-toggle-button"},n.createElement(v.c,null,"When a comment is posted on a password, notify the users who have access to this password."))))),n.createElement("div",{className:"section"},n.createElement("div",{className:"group-section"},n.createElement("label",null,n.createElement(v.c,null,"Group membership")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupDelete,id:"send-group-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-delete-toggle-button"},n.createElement(v.c,null,"When a group is deleted, notify the users who were members of it."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserAdd",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserAdd,id:"send-group-user-add-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-add-toggle-button"},n.createElement(v.c,null,"When users are added to a group, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserDelete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserDelete,id:"send-group-user-delete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-delete-toggle-button"},n.createElement(v.c,null,"When users are removed from a group, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupUserUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupUserUpdate,id:"send-group-user-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-user-update-toggle-button"},n.createElement(v.c,null,"When user roles change in a group, notify the corresponding users.")))),n.createElement("div",{className:"group-admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Group manager")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupManagerUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupManagerUpdate,id:"send-group-manager-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-manager-update-toggle-button"},n.createElement(v.c,null,"When members of a group change, notify the group manager(s)."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"groupManagerRequestAddUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.groupManagerRequestAddUser,id:"send-group-manager-request-add-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-group-manager-request-add-user-toggle-button"},n.createElement(v.c,null,"When group managers are requested to add users to a group, notify them."))))),n.createElement("h3",null,n.createElement(v.c,null,"Registration & Recovery")),n.createElement("div",{className:"section"},n.createElement("div",{className:"admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Admin")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userSetupCompleteAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userSetupCompleteAdmin,id:"user-setup-complete-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-setup-complete-admin-toggle-button"},n.createElement(v.c,null,"When a user completed a setup, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverCompleteAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverCompleteAdmin,id:"user-recover-complete-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-complete-admin-toggle-button"},n.createElement(v.c,null,"When a user completed a recover, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverAbortAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverAbortAdmin,id:"user-recover-abort-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-abort-admin-toggle-button"},n.createElement(v.c,null,"When a user aborted a recover, notify all the administrators.")))),n.createElement("div",{className:"user-section"},n.createElement("label",null,n.createElement(v.c,null,"User")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userCreate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userCreate,id:"send-user-create-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-user-create-toggle-button"},n.createElement(v.c,null,"When new users are invited to passbolt, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecover",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecover,id:"send-user-recover-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"send-user-recover-toggle-button"},n.createElement(v.c,null,"When users try to recover their account, notify them."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"userRecoverComplete",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.userRecoverComplete,id:"user-recover-complete-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"user-recover-complete-toggle-button"},n.createElement(v.c,null,"When users completed the recover of their account, notify them."))))),this.canUseAccountRecovery()&&n.createElement(n.Fragment,null,n.createElement("h3",null,n.createElement(v.c,null,"Account recovery")),n.createElement("div",{className:"section"},n.createElement("div",{className:"admin-section"},n.createElement("label",null,n.createElement(v.c,null,"Admin")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestAdmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestAdmin,id:"account-recovery-request-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-request-admin-toggle-button"},n.createElement(v.c,null,"When an account recovery is requested, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestPolicyUpdate",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestPolicyUpdate,id:"account-recovery-policy-update-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-policy-update-toggle-button"},n.createElement(v.c,null,"When an account recovery policy is updated, notify all the administrators."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestCreatedAmin",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestCreatedAmin,id:"account-recovery-response-created-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-created-admin-toggle-button"},n.createElement(v.c,null,"When an administrator answered to an account recovery request, notify the administrator at the origin of the action."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestCreatedAllAdmins",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestCreatedAllAdmins,id:"account-recovery-response-created-all-admin-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-created-all-admin-toggle-button"},n.createElement(v.c,null,"When an administrator answered to an account recovery request, notify all the administrators.")))),n.createElement("div",{className:"user-section"},n.createElement("label",null,n.createElement(v.c,null,"User")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUser,id:"account-recovery-request-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-request-user-toggle-button"},n.createElement(v.c,null,"When an account recovery is requested, notify the user."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUserApproved",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUserApproved,id:"account-recovery-response-user-approved-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-user-approved-toggle-button"},n.createElement(v.c,null,"When an account recovery is approved, notify the user."))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"accountRecoveryRequestUserRejected",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.accountRecoveryRequestUserRejected,id:"account-recovery-response-user-rejected-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"account-recovery-response-user-rejected-toggle-button"},n.createElement(v.c,null,"When an account recovery is rejected, notify the user.")))))),this.canUsePasswordExpiry()&&n.createElement(n.Fragment,null,n.createElement("h3",null,n.createElement(v.c,null,"Password expiry")),n.createElement("div",{className:"section"},n.createElement("div",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordExpiryExpiredUser",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.passwordExpiryExpiredUser,id:"password-expiry-expired-user-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"password-expiry-expired-user-toggle-button"},n.createElement(v.c,null,"When a password is expired, notify the owners to change it.")))))),n.createElement("h3",null,n.createElement(v.c,null,"Email content visibility")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can adjust the composition of the emails, e.g. which information will be included in the notification.")),n.createElement("div",{className:"section"},n.createElement("div",{className:"password-section"},n.createElement("label",null,n.createElement(v.c,null,"Passwords")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showUsername",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showUsername,id:"show-username-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-username-toggle-button"},n.createElement(v.c,null,"Username"))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showUri",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showUri,id:"show-uri-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-uri-toggle-button"},n.createElement(v.c,null,"URI"))),n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showSecret",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showSecret,id:"show-secret-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-secret-toggle-button"},n.createElement(v.c,null,"Encrypted secret"))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showDescription",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showDescription,id:"show-description-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-description-toggle-button"},n.createElement(v.c,null,"Description")))),n.createElement("div",{className:"comment-section"},n.createElement("label",null,n.createElement(v.c,null,"Comments")),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"showComment",disabled:this.hasAllInputDisabled(),onChange:this.handleInputChange,checked:e.showComment,id:"show-comment-toggle-button"}),n.createElement("label",{className:"text",htmlFor:"show-comment-toggle-button"},n.createElement(v.c,null,"Comment content")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"email-notifications-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about email notification, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/notification/email",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}xa.propTypes={context:o().any,administrationWorkspaceContext:o().object,adminEmailNotificationContext:o().object,t:o().func};const Na=I(wa(O((0,k.Z)("common")(xa))));class _a extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createReferences()}bindCallbacks(){this.handleChangeEvent=this.handleChangeEvent.bind(this),this.handleSubmitButtonFocus=this.handleSubmitButtonFocus.bind(this),this.handleSubmitButtonBlur=this.handleSubmitButtonBlur.bind(this),this.handleOnSubmitEvent=this.handleOnSubmitEvent.bind(this)}get defaultState(){return{hasSubmitButtonFocus:!1}}createReferences(){this.searchInputRef=n.createRef()}handleChangeEvent(e){const t=e.target.value;this.props.onSearch&&this.props.onSearch(t)}handleSubmitButtonFocus(){this.setState({hasSubmitButtonFocus:!0})}handleSubmitButtonBlur(){this.setState({hasSubmitButtonFocus:!1})}handleOnSubmitEvent(e){if(e.preventDefault(),this.props.onSearch){const e=this.searchInputRef.current.value;this.props.onSearch(e)}}render(){return n.createElement("div",{className:"col2 search-wrapper"},n.createElement("form",{className:"search",onSubmit:this.handleOnSubmitEvent},n.createElement("div",{className:`input search required ${this.state.hasSubmitButtonFocus?"no-focus":""} ${this.props.disabled?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Search")),n.createElement("input",{ref:this.searchInputRef,className:"required",type:"search",disabled:this.props.disabled?"disabled":"",onChange:this.handleChangeEvent,placeholder:this.props.placeholder||this.props.t("Search"),value:this.props.value}),n.createElement("div",{className:"search-button-wrapper"},n.createElement("button",{className:"button button-transparent",value:this.props.t("Search"),onBlur:this.handleSubmitButtonBlur,onFocus:this.handleSubmitButtonFocus,type:"submit",disabled:this.props.disabled?"disabled":""},n.createElement(Re,{name:"search"}),n.createElement("span",{className:"visuallyhidden"},n.createElement(v.c,null,"Search")))))))}}_a.propTypes={disabled:o().bool,onSearch:o().func,placeholder:o().string,value:o().string,t:o().func},_a.defaultProps={disabled:!1};const Ra=(0,k.Z)("common")(_a);var Ia=a(3188);class Aa extends n.Component{render(){return n.createElement("div",{className:"illustration icon-feedback"},n.createElement("div",{className:this.props.name}))}}Aa.defaultProps={},Aa.propTypes={name:o().string};const Pa=Aa;class Da extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.getClassName=this.getClassName.bind(this)}getClassName(){let e="button primary";return this.props.warning&&(e+=" warning"),this.props.disabled&&(e+=" disabled"),this.props.processing&&(e+=" processing"),this.props.big&&(e+=" big"),this.props.medium&&(e+=" medium"),this.props.fullWidth&&(e+=" full-width"),e}render(){return n.createElement("button",{type:"submit",className:this.getClassName(),disabled:this.props.disabled},this.props.value||n.createElement(v.c,null,"Save"),this.props.processing&&n.createElement(Re,{name:"spinner"}))}}Da.defaultProps={warning:!1},Da.propTypes={processing:o().bool,disabled:o().bool,value:o().string,warning:o().bool,big:o().bool,medium:o().bool,fullWidth:o().bool};const La=(0,k.Z)("common")(Da),Ta=class{constructor(e){this.customerId=e?.customer_id||"",this.subscriptionId=e?"subscription_id"in e?e.subscription_id:"N/A":"",this.users=e?.users||null,this.email=e?"email"in e?e.email:"N/A":"",this.expiry=e?.expiry||null,this.created=e?.created||null,this.data=e?.data||null}};function Ua(){return Ua=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findSubscriptionKey:()=>{},isProcessing:()=>{},setProcessing:()=>{},getActiveUsers:()=>{},clearContext:()=>{}});class za extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{subscription:new Ta,processing:!0,getSubscription:this.getSubscription.bind(this),findSubscriptionKey:this.findSubscriptionKey.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),getActiveUsers:this.getActiveUsers.bind(this),clearContext:this.clearContext.bind(this)}}async findSubscriptionKey(){this.setProcessing(!0);let e=new Ta;try{const t=await this.props.context.onGetSubscriptionKeyRequested();e=new Ta(t)}catch(t){"PassboltSubscriptionError"===t.name&&(e=new Ta(t.subscription))}finally{this.setState({subscription:e}),this.setProcessing(!1)}}async getActiveUsers(){return(await this.props.context.port.request("passbolt.users.get-all")).filter((e=>e.active)).length}getSubscription(){return this.state.subscription}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}clearContext(){const{subscription:e,processing:t}=this.defaultState;this.setState({subscription:e,processing:t})}render(){return n.createElement(ja.Provider,{value:this.state},this.props.children)}}function Ma(e){return class extends n.Component{render(){return n.createElement(ja.Consumer,null,(t=>n.createElement(e,Ua({adminSubcriptionContext:t},this.props))))}}}za.propTypes={context:o().any,children:o().any},I(za);class Oa extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.initEventHandlers(),this.createInputRef()}getDefaultState(){return{selectedFile:null,key:"",keyError:"",processing:!1,hasBeenValidated:!1}}initEventHandlers(){this.handleCloseClick=this.handleCloseClick.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleKeyInputKeyUp=this.handleKeyInputKeyUp.bind(this),this.handleSelectSubscriptionKeyFile=this.handleSelectSubscriptionKeyFile.bind(this),this.handleSelectFile=this.handleSelectFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef()}componentDidMount(){this.setState({key:this.props.context.editSubscriptionKey.key||""})}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleKeyInputKeyUp(){if(this.state.hasAlreadyBeenValidated){const e=this.validateNameInput();this.setState(e)}}handleCloseClick(){this.props.context.setContext({editSubscriptionKey:null}),this.props.onClose()}handleSelectFile(){this.fileUploaderRef.current.click()}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}async handleSelectSubscriptionKeyFile(e){const[t]=e.target.files,a=await this.readSubscriptionKeyFile(t);this.setState({key:a,selectedFile:t}),this.state.hasBeenValidated&&await this.validate()}readSubscriptionKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async save(){if(this.state.processing)return;if(await this.setState({hasBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();const e={data:this.state.key};try{await this.props.administrationWorkspaceContext.onUpdateSubscriptionKeyRequested(e),await this.handleSaveSuccess(),await this.props.adminSubcriptionContext.findSubscriptionKey()}catch(e){await this.toggleProcessing(),this.handleSaveError(e),this.focusFieldError()}}handleValidateError(){this.focusFieldError()}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.translate("The subscription key has been updated successfully.")),this.props.administrationWorkspaceContext.onMustRefreshSubscriptionKey(),this.props.context.setContext({editSubscriptionKey:null,refreshSubscriptionAnnouncement:!0}),this.props.onClose()}async handleSaveError(e){if("PassboltSubscriptionError"===e.name)this.setState({keyError:e.message});else if("EntityValidationError"===e.name)this.setState({keyError:this.translate("The subscription key is invalid.")});else if("PassboltApiFetchError"===e.name&&e.data&&400===e.data.code)this.setState({keyError:e.message});else{console.error(e);const t={error:e};this.props.dialogContext.open(je,t)}}focusFieldError(){this.state.keyError&&this.keyInputRef.current.focus()}validateKeyInput(){const e=this.state.key.trim();let t="";return e.length||(t=this.translate("A subscription key is required.")),new Promise((e=>{this.setState({keyError:t},e)}))}async validate(){return this.setState({keyError:""}),await this.validateKeyInput(),""===this.state.keyError}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Edit subscription key"),onClose:this.handleCloseClick,disabled:this.state.processing,className:"edit-subscription-dialog"},n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("div",{className:`input textarea required ${this.state.keyError?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",{htmlFor:"edit-tag-form-name"},n.createElement(v.c,null,"Subscription key")),n.createElement("textarea",{id:"edit-subscription-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required full_report",required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("input",{type:"file",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectSubscriptionKeyFile}),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No key file selected"),value:this.selectedFilename}),n.createElement("button",{type:"button",className:"button primary",onClick:this.handleSelectFile,disabled:this.hasAllInputDisabled()},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseClick}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Save")}))))}}Oa.propTypes={context:o().any,onClose:o().func,actionFeedbackContext:o().any,adminSubcriptionContext:o().object,dialogContext:o().any,administrationWorkspaceContext:o().any,t:o().func};const Fa=I(Ma(O(d(g((0,k.Z)("common")(Oa))))));class qa{constructor(e){this.context=e.context,this.dialogContext=e.dialogContext,this.subscriptionContext=e.adminSubcriptionContext}static getInstance(e){return this.instance||(this.instance=new qa(e)),this.instance}static killInstance(){this.instance=null}async editSubscription(){const e={key:this.subscriptionContext.getSubscription().data};this.context.setContext({editSubscriptionKey:e}),this.dialogContext.open(Fa)}}const Wa=qa;class Va extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.subscriptionActionService=Wa.getInstance(this.props)}bindCallbacks(){this.handleEditSubscriptionClick=this.handleEditSubscriptionClick.bind(this)}handleEditSubscriptionClick(){this.subscriptionActionService.editSubscription()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",onClick:this.handleEditSubscriptionClick},n.createElement(Re,{name:"edit"}),n.createElement("span",null,n.createElement(v.c,null,"Update key")))))))}}Va.propTypes={context:o().object,dialogContext:o().object,adminSubscriptionContext:o().object,actionFeedbackContext:o().object,t:o().func};const Ba=d(g(Ma((0,k.Z)("common")(Va)))),Ga=(e,t,a)=>{if(null===e)return"n/a";if("Infinity"===e)return t("Never");const n=Ia.ou.fromISO(e),i=n.diffNow().toMillis();return i>-1e3&&i<0?t("Just now"):n.toRelative({locale:a})};class Ka extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.subscriptionActionService=Wa.getInstance(this.props)}get defaultState(){return{activeUsers:null}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Ba),this.findActiveUsers(),await this.findSubscriptionKey()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSubcriptionContext.clearContext(),Wa.killInstance(),this.mfaFormService=null}bindCallbacks(){this.handleRenewKey=this.handleRenewKey.bind(this),this.handleUpdateKey=this.handleUpdateKey.bind(this)}async findActiveUsers(){const e=await this.props.adminSubcriptionContext.getActiveUsers();this.setState({activeUsers:e})}async findSubscriptionKey(){this.props.adminSubcriptionContext.findSubscriptionKey()}handleRenewKey(){const e=this.props.adminSubcriptionContext.getSubscription();this.hasLimitUsersExceeded()?this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/qty?subscription_id=${e.subscriptionId}&customer_id=${e.customerId}`):(this.hasSubscriptionKeyExpired()||this.hasSubscriptionKeyGoingToExpire())&&this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/renew?subscription_id=${e.subscriptionId}&customer_id=${e.customerId}`)}handleUpdateKey(){this.subscriptionActionService.editSubscription()}hasSubscriptionKeyExpired(){return Ia.ou.fromISO(this.props.adminSubcriptionContext.getSubscription().expiry){},getLocale:()=>{},supportedLocales:()=>{},setLocale:()=>{},hasLocaleChanges:()=>{},findLocale:()=>{},save:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{}});class Ya extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.internalisationService=new class{constructor(e){e.setResourceName("locale/settings"),this.apiClient=new at(e)}async save(e){return(await this.apiClient.create(e)).body}}(t)}get defaultState(){return{currentLocale:null,locale:"en-UK",processing:!0,getCurrentLocale:this.getCurrentLocale.bind(this),getLocale:this.getLocale.bind(this),setLocale:this.setLocale.bind(this),findLocale:this.findLocale.bind(this),hasLocaleChanges:this.hasLocaleChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}findLocale(){this.setProcessing(!0);const e=this.props.context.siteSettings.locale;this.setState({currentLocale:e}),this.setState({locale:e}),this.setProcessing(!1)}getCurrentLocale(){return this.state.currentLocale}getLocale(){return this.state.locale}async setLocale(e){await this.setState({locale:e})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasLocaleChanges(){return this.state.locale!==this.state.currentLocale}clearContext(){const{currentLocale:e,locale:t,processing:a}=this.defaultState;this.setState({currentLocale:e,locale:t,processing:a})}async save(){this.setProcessing(!0),await this.internalisationService.save({value:this.state.locale}),this.props.context.onRefreshLocaleRequested(this.state.locale),this.findLocale()}render(){return n.createElement(Za.Provider,{value:this.state},this.props.children)}}Ya.propTypes={context:o().any,children:o().any};const Ja=I(Ya);function Qa(e){return class extends n.Component{render(){return n.createElement(Za.Consumer,null,(t=>n.createElement(e,$a({adminInternationalizationContext:t},this.props))))}}}class Xa extends n.Component{constructor(e){super(e),this.bindCallbacks()}async handleSaveClick(){try{await this.props.adminInternationalizationContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminInternationalizationContext.setProcessing(!1)}}isSaveEnabled(){return!this.props.adminInternationalizationContext.isProcessing()&&this.props.adminInternationalizationContext.hasLocaleChanges()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The internationalization settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async handleError(e){await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Xa.propTypes={context:o().object,adminInternationalizationContext:o().object,actionFeedbackContext:o().object,t:o().func};const en=Qa(d((0,k.Z)("common")(Xa)));class tn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(en),this.props.adminInternationalizationContext.findLocale()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminInternationalizationContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e){this.props.adminInternationalizationContext.setLocale(e.target.value)}get supportedLocales(){return this.props.context.siteSettings.supportedLocales?this.props.context.siteSettings.supportedLocales.map((e=>({value:e.locale,label:e.label}))):[]}render(){const e=this.props.adminInternationalizationContext.getLocale();return n.createElement("div",{className:"row"},n.createElement("div",{className:"internationalisation-settings col7 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Internationalisation")),n.createElement("form",{className:"form"},n.createElement("div",{className:"select-wrapper input"},n.createElement("label",{htmlFor:"app-locale-input"},n.createElement(v.c,null,"Language")),n.createElement(Ft,{className:"medium",id:"locale-input",name:"locale",items:this.supportedLocales,value:e,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"The default language of the organisation."))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Want to contribute?")),n.createElement("p",null,n.createElement(v.c,null,"Your language is missing or you discovered an error in the translation, help us to improve passbolt.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/contribute/translation",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}),n.createElement("span",null,n.createElement(v.c,null,"Contribute"))))))}}tn.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminInternationalizationContext:o().object,t:o().func};const an=I(Qa(O((0,k.Z)("common")(tn))));function nn(){return nn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getKeyInfo:()=>{},changePolicy:()=>{},changePublicKey:()=>{},hasPolicyChanges:()=>{},resetChanges:()=>{},downloadPrivateKey:()=>{},save:()=>{}});class on extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{currentPolicy:null,policyChanges:{},findAccountRecoveryPolicy:this.findAccountRecoveryPolicy.bind(this),getKeyInfo:this.getKeyInfo.bind(this),changePolicy:this.changePolicy.bind(this),changePublicKey:this.changePublicKey.bind(this),hasPolicyChanges:this.hasPolicyChanges.bind(this),resetChanges:this.resetChanges.bind(this),downloadPrivateKey:this.downloadPrivateKey.bind(this),save:this.save.bind(this)}}async findAccountRecoveryPolicy(){if(!this.props.context.siteSettings.canIUse("accountRecovery"))return;const e=await this.props.context.port.request("passbolt.account-recovery.get-organization-policy");this.setState({currentPolicy:e})}async changePolicy(e){const t=this.state.policyChanges;e===this.state.currentPolicy?.policy?delete t.policy:t.policy=e,"disabled"===e&&delete t.publicKey,await this.setState({policyChanges:t})}async changePublicKey(e){const t={...this.state.policyChanges,publicKey:e};await this.setState({policyChanges:t})}hasPolicyChanges(){return Boolean(this.state.policyChanges?.publicKey)||Boolean(this.state.policyChanges?.policy)}async getKeyInfo(e){return e?this.props.context.port.request("passbolt.keyring.get-key-info",e):null}async resetChanges(){await this.setState({policyChanges:{}})}async downloadPrivateKey(e){await this.props.context.port.request("passbolt.account-recovery.download-organization-generated-key",e)}async save(e){const t=this.buildPolicySaveDto(),a=await this.props.context.port.request("passbolt.account-recovery.save-organization-policy",t,e);this.setState({currentPolicy:a,policyChanges:{}}),this.props.accountRecoveryContext.reloadAccountRecoveryPolicy()}buildPolicySaveDto(){const e={};return this.state.policyChanges.policy&&(e.policy=this.state.policyChanges.policy),this.state.policyChanges.publicKey&&(e.account_recovery_organization_public_key={armored_key:this.state.policyChanges.publicKey}),e}render(){return n.createElement(sn.Provider,{value:this.state},this.props.children)}}function rn(e){return class extends n.Component{render(){return n.createElement(sn.Consumer,null,(t=>n.createElement(e,nn({adminAccountRecoveryContext:t},this.props))))}}}function ln(){return ln=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},stop:()=>{}});class mn extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{workflows:[],start:(e,t)=>{const a=(0,r.Z)();return this.setState({workflows:[...this.state.workflows,{key:a,Workflow:e,workflowProps:t}]}),a},stop:async e=>await this.setState({workflows:this.state.workflows.filter((t=>e!==t.key))})}}render(){return n.createElement(cn.Provider,{value:this.state},this.props.children)}}mn.displayName="WorkflowContextProvider",mn.propTypes={children:o().any};class dn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createInputRef()}get defaultState(){return{processing:!1,key:"",keyError:"",password:"",passwordError:"",passwordWarning:"",hasAlreadyBeenValidated:!1,selectedFile:null}}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleCloseClick=this.handleCloseClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleKeyInputKeyUp=this.handleKeyInputKeyUp.bind(this),this.handlePasswordInputKeyUp=this.handlePasswordInputKeyUp.bind(this),this.handleSelectFile=this.handleSelectFile.bind(this),this.handleSelectOrganizationKeyFile=this.handleSelectOrganizationKeyFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef(),this.passwordInputRef=n.createRef()}handleKeyInputKeyUp(){if(this.state.hasAlreadyBeenValidated){const e=this.validateKeyInput();this.setState(e)}}async handleSelectOrganizationKeyFile(e){const[t]=e.target.files,a=await this.readOrganizationKeyFile(t);await this.fillOrganizationKey(a),this.setState({selectedFile:t}),this.state.hasAlreadyBeenValidated&&await this.validate()}readOrganizationKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async fillOrganizationKey(e){await this.setState({key:e})}validateKeyInput(){const e=this.state.key.trim();let t="";return e.length||(t=this.translate("An organization key is required.")),new Promise((e=>{this.setState({keyError:t},e)}))}focusFirstFieldError(){this.state.keyError?this.keyInputRef.current.focus():this.state.passwordError&&this.passwordInputRef.current.focus()}handlePasswordInputKeyUp(){if(this.state.hasAlreadyBeenValidated)this.setState({passwordError:""});else{const e=this.state.password.length>=4096,t=this.translate("this is the maximum size for this field, make sure your data was not truncated"),a=e?t:"";this.setState({passwordWarning:a})}}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.setState({[n]:a})}handleSelectFile(){this.fileUploaderRef.current.click()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}async save(){if(this.setState({hasAlreadyBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();const e={armored_key:this.state.key,passphrase:this.state.password};try{await this.props.context.port.request("passbolt.account-recovery.validate-organization-private-key",e),await this.props.onSubmit(e),await this.toggleProcessing(),this.props.onClose()}catch(e){await this.handleSubmitError(e),await this.toggleProcessing()}}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&("WrongOrganizationRecoveryKeyError"===e.name?this.setState({expectedFingerprintError:e.expectedFingerprint}):"InvalidMasterPasswordError"===e.name?this.setState({passwordError:this.translate("This is not a valid passphrase.")}):"BadSignatureMessageGpgKeyError"===e.name||"GpgKeyError"===e.name?this.setState({keyError:e.message}):(console.error("Uncaught uncontrolled error"),this.onUnexpectedError(e)))}onUnexpectedError(e){const t={error:e};this.props.dialogContext.open(je,t)}handleValidateError(){this.focusFirstFieldError()}async validate(){return this.setState({keyError:"",passwordError:"",expectedFingerprintError:""}),await this.validateKeyInput(),""===this.state.keyError&&""===this.state.passwordError}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}handleCloseClick(){this.props.onClose()}formatFingerprint(e){if(!e)return n.createElement(n.Fragment,null);const t=e.toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Organization Recovery Key"),onClose:this.handleCloseClick,disabled:this.state.processing,className:"provide-organization-recover-key-dialog"},n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content provide-organization-key"},n.createElement("div",{className:"input textarea required "+(this.state.keyError||this.state.expectedFingerprintError?"error":"")},n.createElement("label",{htmlFor:"organization-recover-form-key"},n.createElement(v.c,null,"Enter the private key used by your organization for account recovery")),n.createElement("textarea",{id:"organization-recover-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required",placeholder:this.translate("Paste the OpenPGP Private key here"),required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file"},n.createElement("input",{type:"file",id:"dialog-import-private-key",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectOrganizationKeyFile}),n.createElement("label",{htmlFor:"dialog-import-private-key"},n.createElement(v.c,null,"Select a file to import")),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No file selected"),defaultValue:this.selectedFilename}),n.createElement("button",{className:"button primary",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.handleSelectFile},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError),this.state.expectedFingerprintError&&n.createElement("div",{className:"key error-message"},n.createElement(v.c,null,"Error, this is not the current organization recovery key."),n.createElement("br",null),n.createElement(v.c,null,"Expected fingerprint:"),n.createElement("br",null),n.createElement("br",null),n.createElement("span",{className:"fingerprint"},this.formatFingerprint(this.state.expectedFingerprintError)))),n.createElement("div",{className:"input-password-wrapper input "+(this.state.passwordError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase"),this.state.passwordWarning&&n.createElement(Re,{name:"exclamation"})),n.createElement(It,{id:"generate-organization-key-form-password",name:"password",placeholder:this.translate("Passphrase"),autoComplete:"new-password",onKeyUp:this.handlePasswordInputKeyUp,value:this.state.password,securityToken:this.props.context.userSettings.getSecurityToken(),preview:!0,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),inputRef:this.passwordInputRef}),this.state.passwordError&&n.createElement("div",{className:"password error-message"},this.state.passwordError),this.state.passwordWarning&&n.createElement("div",{className:"password warning-message"},n.createElement("strong",null,n.createElement(v.c,null,"Warning:"))," ",this.state.passwordWarning))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseClick}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Submit")}))))}}dn.propTypes={context:o().any.isRequired,onClose:o().func,onSubmit:o().func,actionFeedbackContext:o().any,dialogContext:o().object,t:o().func};const hn=I(g((0,k.Z)("common")(dn)));class pn extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(),this.bindCallbacks()}getDefaultState(){return{processing:!1}}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async toggleProcessing(){await this.setState({processing:!this.state.processing})}get isProcessing(){return this.state.processing}async handleSubmit(e){e.preventDefault(),await this.toggleProcessing();try{await this.props.onSubmit(),this.props.onClose()}catch(e){if(await this.toggleProcessing(),"UserAbortsOperationError"!==e.name)throw console.error("Uncaught uncontrolled error"),e}}formatFingerprint(e){const t=(e=e||"").toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}formatUserIds(e){return(e=e||[]).map(((e,t)=>n.createElement(n.Fragment,{key:t},e.name,"<",e.email,">",n.createElement("br",null))))}formatDate(e){return Ia.ou.fromJSDate(new Date(e)).setLocale(this.props.context.locale).toLocaleString(Ia.ou.DATETIME_FULL)}get translate(){return this.props.t}render(){return n.createElement(Te,{title:this.translate("Save Settings Summary"),onClose:this.handleClose,disabled:this.state.processing,className:"save-recovery-account-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},this.props.policy&&n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"New Account Recovery Policy")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"accountPolicy"},n.createElement("span",{className:"name"},{mandatory:n.createElement(v.c,null,"Prompt"),"opt-out":n.createElement(v.c,null,"Optional, Opt-out"),"opt-in":n.createElement(v.c,null,"Optional, Opt-in"),disabled:n.createElement(v.c,null,"Disable")}[this.props.policy]),n.createElement("span",{className:"info"},{mandatory:n.createElement(n.Fragment,null,n.createElement(v.c,null,"Every user is required to provide a copy of their private key and passphrase during setup."),n.createElement("br",null),n.createElement(v.c,null,"Warning: You should inform your users not to store personal passwords.")),"opt-out":n.createElement(v.c,null,"Every user will be prompted to provide a copy of their private key and passphrase by default during the setup, but they can opt out."),"opt-in":n.createElement(v.c,null,"Every user can decide to provide a copy of their private key and passphrase by default during the setup, but they can opt in."),disabled:n.createElement(n.Fragment,null,n.createElement(v.c,null,"Backup of the private key and passphrase will not be stored. This is the safest option."),n.createElement("br",null),n.createElement(v.c,null,"Warning: If users lose their private key and passphrase they will not be able to recover their account."))}[this.props.policy]))))),this.props.keyInfo&&n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"New Organization Recovery Key")),n.createElement("div",{className:"recovery-key-details"},n.createElement("table",{className:"table-info recovery-key"},n.createElement("tbody",null,n.createElement("tr",{className:"user-ids"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Uid")),n.createElement("td",{className:"value"},this.formatUserIds(this.props.keyInfo.user_ids))),n.createElement("tr",{className:"fingerprint"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Fingerprint")),n.createElement("td",{className:"value"},this.formatFingerprint(this.props.keyInfo.fingerprint))),n.createElement("tr",{className:"algorithm"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Algorithm")),n.createElement("td",{className:"value"},this.props.keyInfo.algorithm)),n.createElement("tr",{className:"key-length"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Key length")),n.createElement("td",{className:"value"},this.props.keyInfo.length)),n.createElement("tr",{className:"created"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Created")),n.createElement("td",{className:"value"},this.formatDate(this.props.keyInfo.created))),n.createElement("tr",{className:"expires"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Expires")),n.createElement("td",{className:"value"},Ga(this.props.keyInfo.expires,this.props.t,this.props.context.locale)))))))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,"Please review carefully this configuration as it will not be trivial to change this later.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://help.passbolt.com/configure/account-recovery",className:"button button-left "+(this.isProcessing?"disabled":"")},n.createElement(v.c,null,"Learn more")),n.createElement(Wt,{onClick:this.handleClose,disabled:this.isProcessing}),n.createElement(La,{value:this.translate("Save"),disabled:this.isProcessing,processing:this.isProcessing,warning:!0}))))}}pn.propTypes={context:o().any,onClose:o().func,onSubmit:o().func,policy:o().string,keyInfo:o().object,t:o().func};const un=I((0,k.Z)("common")(pn));class gn extends n.Component{constructor(e){super(e),this.bindCallbacks()}componentDidMount(){this.displayConfirmSummaryDialog()}bindCallbacks(){this.handleCloseDialog=this.handleCloseDialog.bind(this),this.handleConfirmSave=this.handleConfirmSave.bind(this),this.handleSave=this.handleSave.bind(this),this.handleError=this.handleError.bind(this)}async displayConfirmSummaryDialog(){this.props.dialogContext.open(un,{policy:this.props.adminAccountRecoveryContext.policyChanges?.policy,keyInfo:await this.getNewOrganizationKeyInfo(),onClose:this.handleCloseDialog,onSubmit:this.handleConfirmSave})}getNewOrganizationKeyInfo(){const e=this.props.adminAccountRecoveryContext.policyChanges?.publicKey;return e?this.props.adminAccountRecoveryContext.getKeyInfo(e):null}displayProvideAccountRecoveryOrganizationKeyDialog(){this.props.dialogContext.open(hn,{onClose:this.handleCloseDialog,onSubmit:this.handleSave})}handleCloseDialog(){this.props.onStop()}async handleConfirmSave(){Boolean(this.props.adminAccountRecoveryContext.currentPolicy?.account_recovery_organization_public_key)?this.displayProvideAccountRecoveryOrganizationKeyDialog():await this.handleSave()}async handleSave(e=null){try{await this.props.adminAccountRecoveryContext.save(e),await this.props.actionFeedbackContext.displaySuccess(this.translate("The organization recovery policy has been updated successfully")),this.props.onStop()}catch(e){this.handleError(e)}}handleError(e){if(["UserAbortsOperationError","WrongOrganizationRecoveryKeyError","InvalidMasterPasswordError","BadSignatureMessageGpgKeyError","GpgKeyError"].includes(e.name))throw e;"PassboltApiFetchError"===e.name&&e?.data?.body?.account_recovery_organization_public_key?.fingerprint?.isNotAccountRecoveryOrganizationPublicKeyFingerprintRule?this.props.dialogContext.open(je,{error:new Error(this.translate("The new organization recovery key should not be a formerly used organization recovery key."))}):this.props.dialogContext.open(je,{error:e}),this.props.onStop()}get translate(){return this.props.t}render(){return n.createElement(n.Fragment,null)}}gn.propTypes={dialogContext:o().any,adminAccountRecoveryContext:o().any,actionFeedbackContext:o().object,context:o().object,onStop:o().func.isRequired,t:o().func};const bn=I(g(d(rn((0,k.Z)("common")(gn)))));class fn extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleEditSubscriptionClick=this.handleEditSubscriptionClick.bind(this)}handleSaveClick(){this.props.workflowContext.start(bn,{})}handleEditSubscriptionClick(){this.props.adminAccountRecoveryContext.resetChanges()}isSaveEnabled(){if(!this.props.adminAccountRecoveryContext.hasPolicyChanges())return!1;const e=this.props.adminAccountRecoveryContext.policyChanges,t=this.props.adminAccountRecoveryContext.currentPolicy;if(e?.policy===Ve.POLICY_DISABLED)return!0;const a=e.publicKey||t.account_recovery_organization_public_key?.armored_key;return!(!Boolean(e.policy)||!Boolean(a))||t.policy!==Ve.POLICY_DISABLED&&Boolean(e.publicKey)}isResetEnabled(){return this.props.adminAccountRecoveryContext.hasPolicyChanges()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isResetEnabled(),onClick:this.handleEditSubscriptionClick},n.createElement(Re,{name:"edit"}),n.createElement("span",null,n.createElement(v.c,null,"Reset settings")))))))}}fn.propTypes={adminAccountRecoveryContext:o().object,workflowContext:o().any};const yn=function(e){return class extends n.Component{render(){return n.createElement(cn.Consumer,null,(t=>n.createElement(e,ln({workflowContext:t},this.props))))}}}(rn((0,k.Z)("common")(fn)));class vn extends n.Component{constructor(e){super(e),this.bindCallback()}bindCallback(){this.handleClick=this.handleClick.bind(this)}handleClick(){this.props.onClick(this.props.name)}render(){return n.createElement("li",{className:"tab "+(this.props.isActive?"active":"")},n.createElement("button",{type:"button",className:"tab-link",onClick:this.handleClick},this.props.name))}}vn.propTypes={name:o().string,type:o().string,isActive:o().bool,onClick:o().func,children:o().any};const kn=vn;class En extends n.Component{constructor(e){super(e),this.state=this.getDefaultState(e),this.bindCallback()}getDefaultState(e){return{activeTabName:e.activeTabName}}bindCallback(){this.handleTabClick=this.handleTabClick.bind(this)}handleTabClick(e){this.setState({activeTabName:e.name}),"function"==typeof e.onClick&&e.onClick()}render(){return n.createElement("div",{className:"tabs"},n.createElement("ul",{className:"tabs-nav tabs-nav--bordered"},this.props.children.map((({key:e,props:t})=>n.createElement(kn,{key:e,name:t.name,onClick:()=>this.handleTabClick(t),isActive:t.name===this.state.activeTabName})))),n.createElement("div",{className:"tabs-active-content"},this.props.children.find((e=>e.props.name===this.state.activeTabName)).props.children))}}En.propTypes={activeTabName:o().string,children:o().any};const wn=En;class Cn extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createInputRef()}get defaultState(){return{processing:!1,key:"",keyError:"",hasAlreadyBeenValidated:!1,selectedFile:null}}bindCallbacks(){this.handleSelectFile=this.handleSelectFile.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleSelectOrganizationKeyFile=this.handleSelectOrganizationKeyFile.bind(this)}createInputRef(){this.keyInputRef=n.createRef(),this.fileUploaderRef=n.createRef()}async handleSelectOrganizationKeyFile(e){const[t]=e.target.files,a=await this.readOrganizationKeyFile(t);this.setState({key:a,selectedFile:t})}readOrganizationKeyFile(e){const t=new FileReader;return new Promise(((a,n)=>{t.onloadend=()=>{try{a(t.result)}catch(e){n(e)}},t.readAsText(e)}))}async validateKeyInput(){const e=this.state.key.trim();return""===e?Promise.reject(new Error(this.translate("The key can't be empty."))):await this.props.context.port.request("passbolt.account-recovery.validate-organization-key",e)}async validate(){return this.setState({keyError:""}),await this.validateKeyInput().then((()=>!0)).catch((e=>(this.setState({keyError:e.message}),!1)))}handleInputChange(e){const t=e.target;this.setState({[t.name]:t.value})}handleSelectFile(){this.fileUploaderRef.current.click()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||await this.save()}async save(){if(await this.setState({hasAlreadyBeenValidated:!0}),await this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void await this.toggleProcessing();await this.props.onUpdateOrganizationKey(this.state.key.trim())}handleValidateError(){this.focusFieldError()}focusFieldError(){this.state.keyError&&this.keyInputRef.current.focus()}async toggleProcessing(){await this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}get translate(){return this.props.t}get selectedFilename(){return this.state.selectedFile?this.state.selectedFile.name:""}render(){return n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content import-organization-key"},n.createElement("div",{className:"input textarea required "+(this.state.keyError?"error":"")},n.createElement("label",{htmlFor:"organization-recover-form-key"},n.createElement(v.c,null,"Import an OpenPGP Public key")),n.createElement("textarea",{id:"organization-recover-form-key",name:"key",value:this.state.key,onKeyUp:this.handleKeyInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.keyInputRef,className:"required",placeholder:this.translate("Add Open PGP Public key"),required:"required",autoComplete:"off",autoFocus:!0})),n.createElement("div",{className:"input file"},n.createElement("input",{type:"file",id:"dialog-import-private-key",ref:this.fileUploaderRef,disabled:this.hasAllInputDisabled(),onChange:this.handleSelectOrganizationKeyFile}),n.createElement("label",{htmlFor:"dialog-import-private-key"},n.createElement(v.c,null,"Select a file to import")),n.createElement("div",{className:"input-file-inline"},n.createElement("input",{type:"text",disabled:!0,placeholder:this.translate("No file selected"),defaultValue:this.selectedFilename}),n.createElement("button",{className:"button primary",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.handleSelectFile},n.createElement("span",null,n.createElement(v.c,null,"Choose a file")))),this.state.keyError&&n.createElement("div",{className:"key error-message"},this.state.keyError))),!this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"message notice"},n.createElement(Re,{baseline:!0,name:"info-circle"}),n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"Learn how to ",n.createElement("a",{href:"https://help.passbolt.com/configure/account-recovery",target:"_blank",rel:"noopener noreferrer"},"generate a key separately."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.onClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Apply")})))}}Cn.propTypes={context:o().object,onUpdateOrganizationKey:o().func,onClose:o().func,t:o().func};const Sn=I((0,k.Z)("common")(Cn));var xn=a(9496),Nn=a.n(xn);const _n={"en-UK":["abdominal","acclimate","accompany","activator","acuteness","aerospace","affecting","affection","affidavit","affiliate","afflicted","afterglow","afterlife","aftermath","aftermost","afternoon","aggregate","agonizing","agreeable","agreeably","agreement","alabaster","albatross","algorithm","alienable","alongside","amazingly","ambiguity","ambiguous","ambitious","ambulance","amendable","amendment","amplifier","amusement","anaerobic","anatomist","angelfish","angriness","anguished","animating","animation","animosity","announcer","answering","antarctic","anthology","antiquely","antiquity","antitoxic","antitrust","antiviral","antivirus","appealing","appeasing","appendage","appetizer","appliance","applicant","appointee","appraisal","appraiser","apprehend","arbitrary","arbitrate","armadillo","arrogance","ascension","ascertain","asparagus","astrology","astronaut","astronomy","atrocious","attendant","attention","attentive","attractor","attribute","audacious","augmented","authentic","autograph","automaker","automated","automatic","autopilot","available","avalanche","backboard","backboned","backfield","backlands","backlight","backpedal","backshift","backspace","backstage","backtrack","backwater","bacterium","bagginess","balancing","bannister","barometer","barracuda","barricade","bartender","basically","battalion","battering","blanching","blandness","blaspheme","blasphemy","blatantly","blunderer","bodacious","boogeyman","boogieman","boondocks","borrowing","botanical","boundless","bountiful","breeching","brilliant","briskness","broadband","broadcast","broadness","broadside","broadways","bronchial","brownnose","brutishly","buccaneer","bucktooth","buckwheat","bulginess","bulldozer","bullfight","bunkhouse","cabdriver","calculate","calibrate","camcorder","canopener","capillary","capricorn","captivate","captivity","cardboard","cardstock","carefully","caregiver","caretaker","carnation","carnivore","carpenter","carpentry","carrousel","cartridge","cartwheel","catatonic","catchable","cathedral","cattishly","caucasian","causation","cauterize","celestial","certainly","certainty","certified","challenge","chamomile","chaperone","character","charbroil","chemicals","cherisher","chihuahua","childcare","childhood","childless","childlike","chokehold","circulate","clamshell","clergyman","clubhouse","clustered","coagulant","coastland","coastline","cofounder","cognition","cognitive","coherence","collected","collector","collision","commodity","commodore","commotion","commuting","compacted","compacter","compactly","compactor","companion","component","composite","composure","comprised","computing","concerned","concierge","condiment","condition","conducive","conductor","confidant","confident","confiding","configure","confining","confusing","confusion","congenial","congested","conjoined","connected","connector","consensus","consoling","consonant","constable","constrain","constrict","construct","consuming","container","contented","contently","contusion","copartner","cornbread","cornfield","cornflake","cornstalk","corporate","corroding","corrosive","cosmetics","cosponsor","countable","countdown","countless","crabgrass","craftsman","craftwork","cranberry","craziness","creamlike","creatable","crestless","crispness","crudeness","cruelness","crummiest","crunching","crushable","cubbyhole","culminate","cultivate","cupbearer","curliness","curvature","custodian","customary","customize","cytoplasm","cytoplast","dandelion","daredevil","darkening","darwinism","dastardly","deafening","dealmaker","debatable","decathlon","deceiving","deception","deceptive","decidable","decimeter","decompose","decorated","decorator","dedicator","defection","defective","defendant","defensive","deflation","deflected","deflector","degrading","dehydrate","delegator","delicious","delighted","delirious","deliverer","demanding","demeaning","democracy","demystify","denatured","deodorant","deodorize","departure","depletion","depravity","deprecate","desecrate","deserving","designate","designing","deskbound","destitute","detection","detective","detention","detergent","detonator","deviation","devotedly","devouring","dexterity","dexterous","diagnoses","diagnosis","diaphragm","dictation","difficult","diffusion","diffusive","diligence","dinginess","direction","directive","directory","dirtiness","disbelief","discharge","discourse","disengage","disfigure","disinfect","disliking","dislocate","dismantle","disparate","disparity","dispersal","dispersed","disperser","displease","disregard","dividable","divisible","divisibly","dizziness","dollhouse","doorframe","dormitory","dragonfly","dragonish","drainable","drainpipe","dramatize","dreadlock","dreamboat","dreamland","dreamless","dreamlike","drinkable","drop-down","dubiously","duplicate","duplicity","dwindling","earthlike","earthling","earthworm","eastbound","eastcoast","eccentric","ecologist","economist","ecosphere","ecosystem","education","effective","efficient","eggbeater","egomaniac","egotistic","elaborate","eldercare","electable","elevating","elevation","eliminate","elongated","eloquence","elsewhere","embattled","embellish","embroider","emergency","emphasize","empirical","emptiness","enactment","enchanted","enchilada","enclosure","encounter","encourage","endearing","endocrine","endorphin","endowment","endurable","endurance","energetic","engraving","enigmatic","enjoyable","enjoyably","enjoyment","enlarging","enlighten","entangled","entertain","entourage","enunciate","epidermal","epidermis","epileptic","equipment","equivocal","eradicate","ergonomic","escalator","escapable","esophagus","espionage","essential","establish","estimator","estranged","ethically","euphemism","evaluator","evaporate","everglade","evergreen","everybody","evolution","excavator","exceeding","exception","excitable","excluding","exclusion","exclusive","excretion","excretory","excursion","excusable","excusably","exemplary","exemplify","exemption","exerciser","exfoliate","exonerate","expansion","expansive","expectant","expedited","expediter","expensive","expletive","exploring","exposable","expulsion","exquisite","extending","extenuate","extortion","extradite","extrovert","extruding","exuberant","facecloth","faceplate","facsimile","factsheet","fanciness","fantasize","fantastic","favorable","favorably","ferocious","festivity","fidgeting","financial","finishing","flagstick","flagstone","flammable","flashback","flashbulb","flashcard","flattered","flatterer","flavorful","flavoring","footboard","footprint","fragility","fragrance","fraternal","freemason","freestyle","freezable","frequency","frightful","frigidity","frivolous","frostbite","frostlike","frugality","frustrate","gainfully","gallantly","gallstone","galvanize","gathering","gentleman","geography","geologist","geometric","geriatric","germicide","germinate","germproof","gestation","gibberish","giddiness","gigahertz","gladiator","glamorous","glandular","glorified","glorifier","glutinous","goldsmith","goofiness","graceless","gradation","gradually","grappling","gratified","gratitude","graveness","graveyard","gravitate","greedless","greyhound","grievance","grimacing","griminess","grumbling","guacamole","guileless","gumminess","habitable","hamburger","hamstring","handbrake","handclasp","handcraft","handiness","handiwork","handlebar","handprint","handsfree","handshake","handstand","handwoven","handwrite","hankering","haphazard","happening","happiness","hardcover","hardening","hardiness","hardwired","harmonica","harmonics","harmonize","hastiness","hatchback","hatchling","headboard","headcount","headdress","headfirst","headphone","headpiece","headscarf","headstand","headstone","heaviness","heftiness","hemstitch","herbicide","hesitancy","humiliate","humongous","humorless","hunchback","hundredth","hurricane","huskiness","hydration","hydroxide","hyperlink","hypertext","hypnotism","hypnotist","hypnotize","hypocrisy","hypocrite","ibuprofen","idealness","identical","illicitly","imaginary","imitation","immersion","immorally","immovable","immovably","impatient","impending","imperfect","implement","implicate","implosion","implosive","important","impotence","impotency","imprecise","impromptu","improving","improvise","imprudent","impulsive","irregular","irritable","irritably","isolating","isolation","italicize","itinerary","jackknife","jailbreak","jailhouse","jaywalker","jeeringly","jockstrap","jolliness","joylessly","jubilance","judgingly","judiciary","juiciness","justifier","kilometer","kinswoman","laborious","landowner","landscape","landslide","lankiness","legislate","legwarmer","lethargic","levitator","liability","librarian","limelight","litigator","livestock","lubricant","lubricate","luckiness","lucrative","ludicrous","luminance","lumpiness","lunchroom","lunchtime","luridness","lustfully","lustiness","luxurious","lyrically","machinist","magnesium","magnetism","magnetize","magnifier","magnitude","majorette","makeshift","malformed","mammogram","mandatory","manhandle","manicotti","manifesto","manliness","marauding","margarine","margarita","marmalade","marshland","marsupial","marvelous","masculine","matchbook","matchless","maternity","matriarch","matrimony","mayflower","modulator","moistness","molecular","monastery","moneybags","moneyless","moneywise","monologue","monstrous","moodiness","moonlight","moonscape","moonshine","moonstone","morbidity","mortality","mortician","mortified","mothproof","motivator","motocross","mountable","mousiness","moustache","multitask","multitude","mummified","municipal","murkiness","murmuring","mushiness","muskiness","mustiness","mutilated","mutilator","mystified","nanometer","nastiness","navigator","nebulizer","neglector","negligent","negotiate","neurology","ninetieth","numerator","nuttiness","obedience","oblivious","obnoxious","obscurity","observant","observing","obsession","obsessive","obstinate","obtrusive","occultist","occupancy","onslaught","operating","operation","operative","oppressed","oppressor","opulently","outnumber","outplayed","outskirts","outsource","outspoken","overblown","overboard","overbuilt","overcrowd","overdraft","overdrawn","overdress","overdrive","overeager","overeater","overexert","overgrown","overjoyed","overlabor","overlying","overnight","overplant","overpower","overprice","overreach","overreact","overshoot","oversight","oversized","oversleep","overspend","overstate","overstock","overstuff","oversweet","overthrow","overvalue","overwrite","oxidation","oxidizing","pacemaker","palatable","palpitate","panhandle","panoramic","pantomime","pantyhose","paparazzi","parachute","paragraph","paralegal","paralyses","paralysis","paramedic","parameter","paramount","parasitic","parchment","partition","partridge","passenger","passivism","patchwork","paternity","patriarch","patronage","patronize","pavestone","pediatric","pedometer","penholder","penniless","pentagram","percolate","perennial","perfected","perfectly","periscope","perkiness","perpetual","perplexed","persecute","persevere","persuaded","persuader","pessimism","pessimist","pesticide","petroleum","petticoat","pettiness","phonebook","phoniness","phosphate","plausible","plausibly","playgroup","playhouse","playmaker","plaything","plentiful","plexiglas","plutonium","pointless","polyester","polygraph","porcupine","portfolio","postnasal","powdering","prankster","preaching","precision","predefine","preflight","preformed","pregnancy","preheated","prelaunch","preoccupy","preschool","prescribe","preseason","president","presuming","pretended","pretender","prevalent","prewashed","primarily","privatize","proactive","probation","probiotic","procedure","procreate","profanity","professed","professor","profusely","prognosis","projector","prolonged","promenade","prominent","promotion","pronounce","proofread","propeller","proponent","protector","prototype","protozoan","providing","provoking","provolone","proximity","prudishly","publisher","pulmonary","pulverize","punctuate","punctured","pureblood","purgatory","purposely","pursuable","pushchair","pushiness","pyromania","qualified","qualifier","quartered","quarterly","quickness","quicksand","quickstep","quintuple","quizzical","quotation","radiantly","radiation","rancidity","ravishing","reacquire","reanalyze","reappoint","reapprove","rearrange","rebalance","recapture","recharger","recipient","reclining","reclusive","recognize","recollect","reconcile","reconfirm","reconvene","rectangle","rectified","recycling","reexamine","referable","reference","refinance","reflected","reflector","reformist","refueling","refurbish","refurnish","refutable","registrar","regretful","regulator","rehydrate","reimburse","reiterate","rejoicing","relapsing","relatable","relenting","relieving","reluctant","remindful","remission","remodeler","removable","rendering","rendition","renewable","renewably","renovator","repackage","repacking","repayment","repossess","repressed","reprimand","reprocess","reproduce","reprogram","reptilian","repugnant","repulsion","repulsive","repurpose","reputable","reputably","requisite","reshuffle","residence","residency","resilient","resistant","resisting","resurface","resurrect","retaining","retaliate","retention","retrieval","retriever","reverence","reversing","reversion","revisable","revivable","revocable","revolving","riverbank","riverboat","riverside","rockiness","rockslide","roundness","roundworm","runaround","sacrament","sacrifice","saddlebag","safeguard","safehouse","salvaging","salvation","sanctuary","sandblast","sandpaper","sandstone","sandstorm","sanitizer","sappiness","sarcastic","sasquatch","satirical","satisfied","sauciness","saxophone","scapegoat","scarecrow","scariness","scavenger","schematic","schilling","scientist","scorebook","scorecard","scoreless","scoundrel","scrambled","scrambler","scrimmage","scrounger","sculpture","secluding","seclusion","sectional","selection","selective","semicolon","semifinal","semisweet","sensation","sensitive","sensitize","sensually","september","sequester","serotonin","sevenfold","seventeen","shadiness","shakiness","sharpener","sharpness","shiftless","shininess","shivering","shortcake","shorthand","shortlist","shortness","shortwave","showpiece","showplace","shredding","shrubbery","shuffling","silliness","similarly","simmering","sincerity","situation","sixtyfold","skedaddle","skintight","skyrocket","slackness","slapstick","sliceable","slideshow","slighting","slingshot","slouching","smartness","smilingly","smokeless","smokiness","smuggling","snowboard","snowbound","snowdrift","snowfield","snowflake","snowiness","snowstorm","spearfish","spearhead","spearmint","spectacle","spectator","speculate","spellbind","spendable","spherical","spiritism","spiritual","splashing","spokesman","spotlight","sprinkled","sprinkler","squatting","squealing","squeamish","squeezing","squishier","stability","stabilize","stainable","stainless","stalemate","staleness","starboard","stargazer","starlight","startling","statistic","statutory","steadfast","steadying","steerable","steersman","stegosaur","sterility","sterilize","sternness","stiffness","stillness","stimulant","stimulate","stipulate","stonewall","stoneware","stonework","stoplight","stoppable","stopwatch","storeroom","storewide","straggler","straining","strangely","strategic","strenuous","strongbox","strongman","structure","stumbling","stylishly","subarctic","subatomic","subdivide","subheader","submarine","submersed","submitter","subscribe","subscript","subsector","subsiding","subsidize","substance","subsystem","subwoofer","succulent","suffering","suffocate","sulphuric","superbowl","superglue","superhero","supernova","supervise","supremacy","surcharge","surfacing","surfboard","surrender","surrogate","surviving","sustained","sustainer","swaddling","swampland","swiftness","swimmable","symphonic","synthesis","synthetic","tableware","tackiness","taekwondo","tarantula","tastiness","theatrics","thesaurus","thickness","thirstily","thirsting","threefold","throbbing","throwaway","throwback","thwarting","tightness","tightrope","tinderbox","tiptoeing","tradition","trailside","transform","translate","transpire","transport","transpose","trapezoid","treachery","treadmill","trembling","tribesman","tributary","trickster","trifocals","trimester","troubling","trustable","trustless","turbulent","twentieth","twiddling","twistable","ultimatum","umbilical","unabashed","unadorned","unadvised","unaligned","unaltered","unarmored","unashamed","unaudited","unbalance","unblended","unblessed","unbounded","unbraided","unbuckled","uncertain","unchanged","uncharted","unclaimed","unclamped","unclothed","uncolored","uncorrupt","uncounted","uncrushed","uncurious","undamaged","undaunted","undecided","undefined","undercoat","undercook","underdone","underfeed","underfoot","undergrad","underhand","underline","underling","undermine","undermost","underpaid","underpass","underrate","undertake","undertone","undertook","underwear","underwent","underwire","undesired","undiluted","undivided","undrafted","undrilled","uneatable","unelected","unengaged","unethical","unexpired","unexposed","unfailing","unfeeling","unfitting","unfixable","unfocused","unfounded","unfrosted","ungreased","unguarded","unhappily","unhealthy","unhearing","unhelpful","unhitched","uniformed","uniformly","unimpeded","uninjured","uninstall","uninsured","uninvited","unisexual","universal","unknotted","unknowing","unlearned","unleveled","unlighted","unlikable","unlimited","unlivable","unlocking","unlovable","unluckily","unmanaged","unmasking","unmatched","unmindful","unmixable","unmovable","unnamable","unnatural","unnerving","unnoticed","unopposed","unpainted","unpiloted","unplanned","unplanted","unpleased","unpledged","unpopular","unraveled","unreached","unreeling","unrefined","unrelated","unretired","unrevised","unrivaled","unroasted","unruffled","unscathed","unscented","unsecured","unselfish","unsettled","unshackle","unsheathe","unshipped","unsightly","unskilled","unspoiled","unstaffed","unstamped","unsterile","unstirred","unstopped","unstuffed","unstylish","untainted","untangled","untoasted","untouched","untracked","untrained","untreated","untrimmed","unvarying","unveiling","unvisited","unwarlike","unwatched","unwelcome","unwilling","unwitting","unwomanly","unworldly","unworried","unwrapped","unwritten","upcountry","uplifting","urologist","uselessly","vagrantly","vagueness","valuables","vaporizer","vehicular","veneering","ventricle","verbalize","vertebrae","viability","viewpoint","vindicate","violation","viscosity","vivacious","vividness","wackiness","washbasin","washboard","washcloth","washhouse","washstand","whimsical","wieldable","wikipedia","willfully","willpower","wolverine","womanhood","womankind","womanless","womanlike","worrisome","worsening","worshiper","wrongdoer","wrongness","yesterday","zestfully","zigzagged","zookeeper","zoologist","abnormal","abrasion","abrasive","abruptly","absentee","absently","absinthe","absolute","abstract","accuracy","accurate","accustom","achiness","acquaint","activate","activism","activist","activity","aeration","aerobics","affected","affluent","aflutter","agnostic","agreeing","alienate","alkaline","alkalize","almighty","alphabet","although","altitude","aluminum","amaretto","ambiance","ambition","amicably","ammonium","amniotic","amperage","amusable","anaconda","aneurism","animator","annotate","annoying","annually","anointer","anteater","antelope","antennae","antibody","antidote","antihero","antiques","antirust","anyplace","anything","anywhere","appendix","appetite","applause","approach","approval","aptitude","aqueduct","ardently","arguable","arguably","armchair","arrogant","aspirate","astonish","atlantic","atonable","attendee","attitude","atypical","audacity","audience","audition","autistic","avenging","aversion","aviation","babbling","backache","backdrop","backfire","backhand","backlash","backless","backpack","backrest","backroom","backside","backslid","backspin","backstab","backtalk","backward","backwash","backyard","bacteria","baffling","baguette","bakeshop","balsamic","banister","bankable","bankbook","banknote","bankroll","barbecue","bargraph","baritone","barrette","barstool","barterer","battered","blatancy","blighted","blinking","blissful","blizzard","bloating","bloomers","blooming","blustery","boastful","boasting","bondless","bonehead","boneless","bonelike","bootlace","borrower","botanist","bottling","bouncing","bounding","breeches","breeding","brethren","broiling","bronzing","browbeat","browsing","bruising","brunette","brussels","bubbling","buckshot","buckskin","buddhism","buddhist","bullfrog","bullhorn","bullring","bullseye","bullwhip","bunkmate","busybody","cadillac","calamari","calamity","calculus","camisole","campfire","campsite","canister","cannabis","capacity","cardigan","cardinal","careless","carmaker","carnival","cartload","cassette","casually","casualty","catacomb","catalyst","catalyze","catapult","cataract","catching","catering","catfight","cathouse","cautious","cavalier","celibacy","celibate","ceramics","ceremony","cesarean","cesspool","chaffing","champion","chaplain","charcoal","charging","charting","chastise","chastity","chatroom","chatting","cheating","chewable","childish","chirping","chitchat","chivalry","chloride","chlorine","choosing","chowtime","cilantro","cinnamon","circling","circular","citation","clambake","clanking","clapping","clarinet","clavicle","clerical","climatic","clinking","closable","clothing","clubbing","clumsily","coasting","coauthor","coeditor","cogwheel","coherent","cohesive","coleslaw","coliseum","collapse","colonial","colonist","colonize","colossal","commence","commerce","composed","composer","compound","compress","computer","conceded","conclude","concrete","condense","confetti","confider","confined","conflict","confound","confront","confused","congrats","congress","conjuror","constant","consumer","contempt","contents","contrite","cornball","cornhusk","cornmeal","coronary","corporal","corridor","cosigner","counting","covenant","coveting","coziness","crabbing","crablike","crabmeat","cradling","craftily","crawfish","crawlers","crawling","crayfish","creasing","creation","creative","creature","credible","credibly","crescent","cresting","crewless","crewmate","cringing","crisping","criteria","crumpled","cruncher","crusader","crushing","cucumber","cufflink","culinary","culpable","cultural","customer","cylinder","daffodil","daintily","dallying","dandruff","dangling","daringly","darkened","darkness","darkroom","datebook","daughter","daunting","daybreak","daydream","daylight","dazzling","deafness","debating","debtless","deceased","deceiver","december","decipher","declared","decrease","dedicate","deepness","defacing","defender","deferral","deferred","defiance","defiling","definite","deflator","deforest","degraded","degrease","dejected","delegate","deletion","delicacy","delicate","delirium","delivery","delusion","demeanor","democrat","demotion","deniable","departed","deplored","depraved","deputize","deranged","designed","designer","deskwork","desolate","destruct","detached","detector","detonate","detoxify","deviancy","deviator","devotion","devourer","devoutly","diabetes","diabetic","diabolic","diameter","dictator","diffused","diffuser","dilation","diligent","diminish","directed","directly","direness","disabled","disagree","disallow","disarray","disaster","disburse","disclose","discolor","discount","discover","disgrace","dislodge","disloyal","dismount","disorder","dispatch","dispense","displace","disposal","disprove","dissuade","distance","distaste","distinct","distract","distress","district","distrust","dividend","dividers","dividing","divinely","divinity","division","divisive","divorcee","doctrine","document","domelike","domestic","dominion","dominoes","donation","doorbell","doorknob","doornail","doorpost","doorstep","doorstop","doubling","dragging","dragster","drainage","dramatic","dreadful","dreamily","drearily","drilling","drinking","dripping","drivable","driveway","dropkick","drowsily","duckbill","duckling","ducktail","dullness","dumpling","dumpster","duration","dwelling","dynamite","dyslexia","dyslexic","earphone","earpiece","earplugs","easiness","eastward","economic","edginess","educated","educator","eggplant","eggshell","election","elective","elephant","elevator","eligible","eligibly","elliptic","eloquent","embezzle","embolism","emission","emoticon","empathic","emphases","emphasis","emphatic","employed","employee","employer","emporium","encircle","encroach","endanger","endeared","endpoint","enduring","energize","enforced","enforcer","engaging","engraved","engraver","enjoying","enlarged","enlisted","enquirer","entering","enticing","entrench","entryway","envelope","enviable","enviably","envision","epidemic","epidural","epilepsy","epilogue","epiphany","equation","erasable","escalate","escapade","escapist","escargot","espresso","esteemed","estimate","estrogen","eternity","evacuate","evaluate","everyday","everyone","evidence","excavate","exchange","exciting","existing","exorcism","exorcist","expenses","expiring","explicit","exponent","exporter","exposure","extended","exterior","external","fabulous","facebook","facedown","faceless","facelift","facility","familiar","famished","fastball","fastness","favoring","favorite","felt-tip","feminine","feminism","feminist","feminize","fernlike","ferocity","festival","fiddling","fidelity","fiftieth","figurine","filtrate","finalist","finalize","fineness","finished","finisher","fiscally","flagpole","flagship","flanking","flannels","flashily","flashing","flatfoot","flatness","flattery","flatware","flatworm","flavored","flaxseed","flogging","flounder","flypaper","follicle","fondling","fondness","football","footbath","footgear","foothill","foothold","footless","footnote","footpath","footrest","footsore","footwear","footwork","founding","fountain","fraction","fracture","fragment","fragrant","freckled","freckles","freebase","freefall","freehand","freeload","freeness","freeware","freewill","freezing","frenzied","frequent","friction","frighten","frigidly","frostily","frosting","fructose","frugally","galleria","gambling","gangrene","gatherer","gauntlet","generous","genetics","geologic","geometry","geranium","germless","gigabyte","gigantic","giggling","giveaway","glancing","glaucoma","gleaming","gloating","gloomily","glorious","glowworm","goatskin","goldfish","goldmine","goofball","gorgeous","graceful","gracious","gradient","graduate","graffiti","grafting","granddad","grandkid","grandson","granular","gratuity","greasily","greedily","greeting","grieving","grievous","grinning","groggily","grooving","grudging","grueling","grumpily","guidable","guidance","gullible","gurgling","gyration","habitant","habitual","handball","handbook","handcart","handclap","handcuff","handgrip","handheld","handling","handmade","handpick","handrail","handwash","handwork","handyman","hangnail","hangover","happiest","hardcopy","hardcore","harddisk","hardened","hardener","hardhead","hardness","hardship","hardware","hardwood","harmless","hatchery","hatching","hazelnut","haziness","headache","headband","headgear","headlamp","headless","headlock","headrest","headroom","headsman","headwear","helpless","helpline","henchman","heritage","hesitant","hesitate","hexagram","huddling","humbling","humility","humorist","humorous","humpback","hungrily","huntress","huntsman","hydrated","hydrogen","hypnoses","hypnosis","hypnotic","idealism","idealist","idealize","identify","identity","ideology","ignition","illusion","illusive","imagines","imbecile","immature","imminent","immobile","immodest","immortal","immunity","immunize","impaired","impeding","imperial","implicit","impolite","importer","imposing","impotent","imprison","improper","impurity","irrigate","irritant","irritate","islamist","isolated","jailbird","jalapeno","jaundice","jingling","jokester","jokingly","joyfully","joystick","jubilant","judicial","juggling","junction","juncture","junkyard","justness","juvenile","kangaroo","keenness","kerchief","kerosene","kilobyte","kilogram","kilowatt","kindling","kindness","kissable","knapsack","knickers","laboring","labrador","ladylike","landfall","landfill","landlady","landless","landline","landlord","landmark","landmass","landmine","landside","language","latitude","latticed","lavender","laxative","laziness","lecturer","leggings","lethargy","leverage","levitate","licorice","ligament","likeness","likewise","limpness","linguini","linguist","linoleum","litigate","luckless","lukewarm","luminous","lunchbox","luncheon","lushness","lustrous","lyricism","lyricist","macarena","macaroni","magazine","magician","magnetic","magnolia","mahogany","majestic","majority","makeover","managing","mandarin","mandolin","manicure","manpower","marathon","marbling","marigold","maritime","massager","matchbox","matching","material","maternal","maturely","maturing","maturity","maverick","maximize","mobility","mobilize","modified","moisture","molasses","molecule","molehill","monetary","monetize","mongoose","monkhood","monogamy","monogram","monopoly","monorail","monotone","monotype","monoxide","monsieur","monument","moonbeam","moonlike","moonrise","moonwalk","morality","morbidly","morphine","morphing","mortally","mortuary","mothball","motivate","mountain","mounting","mournful","mulberry","multiple","multiply","mumbling","munchkin","muscular","mushroom","mutation","national","nativity","naturist","nautical","navigate","nearness","neatness","negation","negative","negligee","neurosis","neurotic","nickname","nicotine","nineteen","nintendo","numbness","numerate","numerous","nuptials","nutrient","nutshell","obedient","obituary","obligate","oblivion","observer","obsessed","obsolete","obstacle","obstruct","occupant","occupier","ointment","olympics","omission","omnivore","oncoming","onlooker","onscreen","operable","operator","opponent","opposing","opposite","outboard","outbound","outbreak","outburst","outclass","outdated","outdoors","outfield","outflank","outgoing","outhouse","outlying","outmatch","outreach","outright","outscore","outshine","outshoot","outsider","outsmart","outtakes","outthink","outweigh","overarch","overbill","overbite","overbook","overcast","overcoat","overcome","overcook","overfeed","overfill","overflow","overfull","overhand","overhang","overhaul","overhead","overhear","overheat","overhung","overkill","overlaid","overload","overlook","overlord","overpass","overplay","overrate","override","overripe","overrule","overshot","oversold","overstay","overstep","overtake","overtime","overtone","overture","overturn","overview","oxymoron","pacifier","pacifism","pacifist","paddling","palpable","pampered","pamperer","pamphlet","pancreas","pandemic","panorama","parabola","parakeet","paralyze","parasail","parasite","parmesan","passable","passably","passcode","passerby","passover","passport","password","pastrami","paternal","patience","pavement","pavilion","paycheck","payphone","peculiar","peddling","pedicure","pedigree","pegboard","penalize","penknife","pentagon","perceive","perjurer","peroxide","petition","phrasing","placidly","platform","platinum","platonic","platypus","playable","playback","playlist","playmate","playroom","playtime","pleading","plethora","plunging","pointing","politely","popsicle","populace","populate","porridge","portable","porthole","portside","possible","possibly","postcard","pouncing","powdered","praising","prancing","prankish","preacher","preamble","precinct","predator","pregnant","premiere","premises","prenatal","preorder","pretense","previous","prideful","princess","pristine","probable","probably","proclaim","procurer","prodigal","profound","progress","prologue","promoter","prompter","promptly","proofing","properly","property","proposal","protegee","protract","protrude","provable","provided","provider","province","prowling","punctual","punisher","purchase","purebred","pureness","purifier","purplish","pursuant","purveyor","pushcart","pushover","puzzling","quadrant","quaintly","quarters","quotable","radiance","radiated","radiator","railroad","rambling","reabsorb","reaction","reactive","reaffirm","reappear","rearview","reassign","reassure","reattach","reburial","rebuttal","reckless","recliner","recovery","recreate","recycled","recycler","reemerge","refinery","refining","refinish","reforest","reformat","reformed","reformer","refreeze","refusing","register","registry","regulate","rekindle","relation","relative","reliable","reliably","reliance","relocate","remedial","remember","reminder","removing","renderer","renegade","renounce","renovate","rentable","reoccupy","repaying","repeated","repeater","rephrase","reporter","reproach","resample","research","reselect","reseller","resemble","resident","residual","resigned","resolute","resolved","resonant","resonate","resource","resubmit","resupply","retainer","retiring","retorted","reusable","reverend","reversal","revision","reviving","revolver","richness","riddance","ripeness","ripening","rippling","riverbed","riveting","robotics","rockband","rockfish","rocklike","rockstar","roulette","rounding","roundish","rumbling","sabotage","saddling","safeness","salaried","salutary","sampling","sanction","sanctity","sandbank","sandfish","sandworm","sanitary","satiable","saturate","saturday","scalding","scallion","scalping","scanning","scarcity","scarring","schedule","scheming","schnapps","scolding","scorpion","scouring","scouting","scowling","scrabble","scraggly","scribble","scribing","scrubbed","scrubber","scrutiny","sculptor","secluded","securely","security","sedation","sedative","sediment","seducing","selected","selector","semantic","semester","semisoft","senorita","sensuous","sequence","serrated","sessions","settling","severity","shakable","shamrock","shelving","shifting","shoplift","shopping","shoptalk","shortage","shortcut","showcase","showdown","showgirl","showroom","shrapnel","shredder","shrewdly","shrouded","shucking","siberian","silenced","silencer","simplify","singular","sinister","situated","sixtieth","sizzling","skeletal","skeleton","skillful","skimming","skimpily","skincare","skinhead","skinless","skinning","skipping","skirmish","skydiver","skylight","slacking","slapping","slashing","slighted","slightly","slimness","slinging","slobbery","sloppily","smashing","smelting","smuggler","smugness","sneezing","snipping","snowbird","snowdrop","snowfall","snowless","snowplow","snowshoe","snowsuit","snugness","spearman","specimen","speckled","spectrum","spelling","spending","spinning","spinster","spirited","splashed","splatter","splendid","splendor","splicing","splinter","splotchy","spoilage","spoiling","spookily","sporting","spotless","spotting","spyglass","squabble","squander","squatted","squatter","squealer","squeegee","squiggle","squiggly","stagnant","stagnate","staining","stalling","stallion","stapling","stardust","starfish","starless","starring","starship","starting","starving","steadier","steadily","steering","sterling","stifling","stimulus","stingily","stinging","stingray","stinking","stoppage","stopping","storable","stowaway","straddle","strained","strainer","stranger","strangle","strategy","strength","stricken","striking","striving","stroller","strongly","struggle","stubborn","stuffing","stunning","sturdily","stylized","subduing","subfloor","subgroup","sublease","sublevel","submerge","subpanel","subprime","subsonic","subtitle","subtotal","subtract","sufferer","suffrage","suitable","suitably","suitcase","sulphate","superior","superjet","superman","supermom","supplier","sureness","surgical","surprise","surround","survival","survivor","suspense","swapping","swimming","swimsuit","swimwear","swinging","sycamore","sympathy","symphony","syndrome","synopses","synopsis","tableful","tackling","tactical","tactless","talisman","tameness","tapeless","tapering","tapestry","tartness","tattered","tattling","theology","theorize","thespian","thieving","thievish","thinness","thinning","thirteen","thousand","threaten","thriving","throttle","throwing","thumping","thursday","tidiness","tightwad","tingling","tinkling","tinsmith","traction","trailing","tranquil","transfer","trapdoor","trapping","traverse","travesty","treading","trespass","triangle","tribunal","trickery","trickily","tricking","tricolor","tricycle","trillion","trimming","trimness","tripping","trolling","trombone","tropical","trousers","trustful","trusting","tubeless","tumbling","turbofan","turbojet","tweezers","twilight","twisting","ultimate","umbrella","unafraid","unbeaten","unbiased","unbitten","unbolted","unbridle","unbroken","unbundle","unburned","unbutton","uncapped","uncaring","uncoated","uncoiled","uncombed","uncommon","uncooked","uncouple","uncurled","underage","underarm","undercut","underdog","underfed","underpay","undertow","underuse","undocked","undusted","unearned","uneasily","unedited","unending","unenvied","unfasten","unfilled","unfitted","unflawed","unframed","unfreeze","unfrozen","unfunded","unglazed","ungloved","ungraded","unguided","unharmed","unheated","unhidden","unicycle","uniquely","unissued","universe","unjustly","unlawful","unleaded","unlinked","unlisted","unloaded","unloader","unlocked","unlovely","unloving","unmanned","unmapped","unmarked","unmasked","unmolded","unmoving","unneeded","unopened","unpadded","unpaired","unpeeled","unpicked","unpinned","unplowed","unproven","unranked","unrented","unrigged","unrushed","unsaddle","unsalted","unsavory","unsealed","unseated","unseeing","unseemly","unselect","unshaken","unshaved","unshaven","unsigned","unsliced","unsmooth","unsocial","unsoiled","unsolved","unsorted","unspoken","unstable","unsteady","unstitch","unsubtle","unsubtly","unsuited","untagged","untapped","unthawed","unthread","untimely","untitled","unturned","unusable","unvalued","unvaried","unveiled","unvented","unviable","unwanted","unwashed","unwieldy","unworthy","upcoming","upheaval","uplifted","uprising","upstairs","upstream","upstroke","upturned","urethane","vacation","vagabond","vagrancy","vanquish","variable","variably","vascular","vaseline","vastness","velocity","vendetta","vengeful","venomous","verbally","vertical","vexingly","vicinity","viewable","viewless","vigorous","vineyard","violator","virtuous","viselike","visiting","vitality","vitalize","vitamins","vocalist","vocalize","vocation","volatile","washable","washbowl","washroom","waviness","whacking","whenever","whisking","whomever","whooping","wildcard","wildfire","wildfowl","wildland","wildlife","wildness","winnings","wireless","wisplike","wobbling","wreckage","wrecking","wrongful","yearbook","yearling","yearning","zeppelin","abdomen","abiding","ability","abreast","abridge","absence","absolve","abstain","acclaim","account","acetone","acquire","acrobat","acronym","actress","acutely","aerosol","affront","ageless","agility","agonize","aground","alfalfa","algebra","almanac","alright","amenity","amiable","ammonia","amnesty","amplify","amusing","anagram","anatomy","anchovy","ancient","android","angelic","angling","angrily","angular","animate","annuity","another","antacid","anthill","antonym","anybody","anymore","anytime","apostle","appease","applaud","applied","approve","apricot","armband","armhole","armless","armoire","armored","armrest","arousal","arrange","arrival","ashamed","aspirin","astound","astride","atrophy","attempt","auction","audible","audibly","average","aviator","awkward","backing","backlit","backlog","badland","badness","baggage","bagging","bagpipe","balance","balcony","banking","banshee","barbell","barcode","barista","barmaid","barrack","barrier","battery","batting","bazooka","blabber","bladder","blaming","blazing","blemish","blinked","blinker","bloated","blooper","blubber","blurred","boaster","bobbing","bobsled","bobtail","bolster","bonanza","bonding","bonfire","booting","bootleg","borough","boxlike","breeder","brewery","brewing","bridged","brigade","brisket","briskly","bristle","brittle","broaden","broadly","broiler","brought","budding","buffalo","buffing","buffoon","bulldog","bullion","bullish","bullpen","bunkbed","busload","cabbage","caboose","cadmium","cahoots","calcium","caliber","caloric","calorie","calzone","camping","candied","canning","canteen","capable","capably","capital","capitol","capsize","capsule","caption","captive","capture","caramel","caravan","cardiac","carless","carload","carnage","carpool","carport","carried","cartoon","carving","carwash","cascade","catalog","catcall","catcher","caterer","catfish","catlike","cattail","catwalk","causing","caution","cavalry","certify","chalice","chamber","channel","chapped","chapter","charger","chariot","charity","charred","charter","chasing","chatter","cheddar","chemist","chevron","chewing","choking","chooser","chowder","citable","citadel","citizen","clapped","clapper","clarify","clarity","clatter","cleaver","clicker","climate","clobber","cloning","closure","clothes","clubbed","clutter","coastal","coaster","cobbler","coconut","coexist","collage","collide","comfort","commend","comment","commode","commute","company","compare","compile","compost","comrade","concave","conceal","concept","concert","concise","condone","conduit","confess","confirm","conform","conical","conjure","consent","console","consult","contact","contend","contest","context","contort","contour","control","convene","convent","copilot","copious","corncob","coroner","correct","corrode","corsage","cottage","country","courier","coveted","coyness","crafter","cranial","cranium","craving","crazily","creamed","creamer","crested","crevice","crewman","cricket","crimson","crinkle","crinkly","crisped","crisply","critter","crouton","crowbar","crucial","crudely","cruelly","cruelty","crumpet","crunchy","crushed","crusher","cryptic","crystal","cubical","cubicle","culprit","culture","cupcake","cupping","curable","curator","curling","cursive","curtain","custard","custody","customs","cycling","cyclist","dancing","darkish","darling","dawdler","daycare","daylong","dayroom","daytime","dazzler","dealing","debrief","decency","decibel","decimal","decline","default","defense","defiant","deflate","defraud","defrost","delouse","density","dentist","denture","deplete","depress","deprive","derived","deserve","desktop","despair","despise","despite","destiny","detract","devalue","deviant","deviate","devious","devotee","diagram","dictate","dimness","dingbat","diocese","dioxide","diploma","dipping","disband","discard","discern","discuss","disdain","disjoin","dislike","dismiss","disobey","display","dispose","dispute","disrupt","distant","distill","distort","divided","dolphin","donated","donator","doorman","doormat","doorway","drained","drainer","drapery","drastic","dreaded","dribble","driller","driving","drizzle","drizzly","dropbox","droplet","dropout","dropper","duchess","ducking","dumping","durable","durably","dutiful","dwelled","dweller","dwindle","dynamic","dynasty","earache","eardrum","earflap","earlobe","earmark","earmuff","earring","earshot","earthen","earthly","easeful","easiest","eatable","eclipse","ecology","economy","edition","effects","egotism","elastic","elderly","elevate","elitism","ellipse","elusive","embargo","embassy","emblaze","emerald","emotion","empathy","emperor","empower","emptier","enclose","encrust","encrypt","endless","endnote","endorse","engaged","engorge","engross","enhance","enjoyer","enslave","ensnare","entitle","entrust","entwine","envious","episode","equator","equinox","erasure","erratic","esquire","essence","etching","eternal","ethanol","evacuee","evasion","evasive","evident","exalted","example","exclaim","exclude","exhaust","expanse","explain","explode","exploit","explore","express","extinct","extrude","faceted","faction","factoid","factual","faculty","failing","falsify","fanatic","fancied","fanfare","fanning","fantasy","fascism","fasting","favored","federal","fencing","ferment","festive","fiction","fidgety","fifteen","figment","filling","finally","finance","finicky","finless","finlike","flaccid","flagman","flakily","flanked","flaring","flatbed","flatten","flattop","fleshed","florist","flyable","flyaway","flyover","footage","footing","footman","footpad","footsie","founder","fragile","framing","frantic","fraying","freebee","freebie","freedom","freeing","freeway","freight","fretful","fretted","frisbee","fritter","frosted","gaining","gallery","gallows","gangway","garbage","garland","garment","garnish","gauging","generic","gentile","geology","gestate","gesture","getaway","getting","giddily","gimmick","gizzard","glacial","glacier","glamour","glaring","glazing","gleeful","gliding","glimmer","glimpse","glisten","glitter","gloater","glorify","glowing","glucose","glutton","goggles","goliath","gondola","gosling","grading","grafted","grandly","grandma","grandpa","granite","granola","grapple","gratify","grating","gravity","grazing","greeter","grimace","gristle","grouped","growing","gruffly","grumble","grumbly","guiding","gumball","gumdrop","gumming","gutless","guzzler","habitat","hacking","hacksaw","haggler","halogen","hammock","hamster","handbag","handful","handgun","handled","handler","handoff","handsaw","handset","hangout","happier","happily","hardhat","harmful","harmony","harness","harpist","harvest","hastily","hatchet","hatless","heading","headset","headway","heavily","heaving","hedging","helpful","helping","hemlock","heroics","heroism","herring","herself","hexagon","humming","hunting","hurling","hurried","husband","hydrant","iciness","ideally","imaging","imitate","immerse","impeach","implant","implode","impound","imprint","improve","impulse","islamic","isotope","issuing","italics","jackpot","janitor","january","jarring","jasmine","jawless","jawline","jaybird","jellied","jitters","jittery","jogging","joining","joyride","jugular","jujitsu","jukebox","juniper","junkman","justice","justify","karaoke","kindred","kinetic","kinfolk","kinship","kinsman","kissing","kitchen","kleenex","krypton","labored","laborer","ladybug","lagging","landing","lantern","lapping","latrine","launder","laundry","legible","legibly","legroom","legwork","leotard","letdown","lettuce","liberty","library","licking","lifting","liftoff","limeade","limping","linseed","liquefy","liqueur","livable","lividly","luckily","lullaby","lumping","lumpish","lustily","machine","magenta","magical","magnify","majesty","mammary","manager","manatee","mandate","manhole","manhood","manhunt","mankind","manlike","manmade","mannish","marbled","marbles","marital","married","marxism","mashing","massive","mastiff","matador","matcher","maximum","moaning","mobster","modular","moisten","mollusk","mongrel","monitor","monsoon","monthly","moocher","moonlit","morally","mortify","mounted","mourner","movable","mullets","mummify","mundane","mushily","mustang","mustard","mutable","myspace","mystify","napping","nastily","natural","nearest","nemeses","nemesis","nervous","neutron","nuclear","nucleus","nullify","numbing","numeral","numeric","nursery","nursing","nurture","nutcase","nutlike","obliged","obscure","obvious","octagon","october","octopus","ominous","onboard","ongoing","onshore","onstage","opacity","operate","opossum","osmosis","outback","outcast","outcome","outgrow","outlast","outline","outlook","outmost","outpost","outpour","outrage","outrank","outsell","outward","overact","overall","overbid","overdue","overfed","overlap","overlay","overpay","overrun","overtly","overuse","oxidant","oxidize","pacific","padding","padlock","pajamas","pampers","pancake","panning","panther","paprika","papyrus","paradox","parched","parking","parkway","parsley","parsnip","partake","parting","partner","passage","passing","passion","passive","pastime","pasture","patient","patriot","payable","payback","payment","payroll","pelican","penalty","pendant","pending","pennant","pension","percent","perfume","perjury","petunia","phantom","phoenix","phonics","placard","placate","planner","plaster","plastic","plating","platter","playful","playing","playoff","playpen","playset","pliable","plunder","plywood","pointed","pointer","polygon","polymer","popcorn","popular","portion","postage","postbox","posting","posture","postwar","pouring","powdery","pranker","praying","preachy","precise","precook","predict","preface","pregame","prelude","premium","prepaid","preplan","preshow","presoak","presume","preteen","pretext","pretzel","prevail","prevent","preview","primary","primate","privacy","private","probing","problem","process","prodigy","produce","product","profane","profile","progeny","program","propose","prorate","proving","provoke","prowess","prowler","pruning","psychic","pulsate","pungent","purging","puritan","pursuit","pushing","pushpin","putdown","pyramid","quaking","qualify","quality","quantum","quarrel","quartet","quicken","quickly","quintet","ragweed","railcar","railing","railway","ranging","ranking","ransack","ranting","rasping","ravioli","reactor","reapply","reawake","rebirth","rebound","rebuild","rebuilt","recital","reclaim","recluse","recolor","recount","rectify","reenact","reenter","reentry","referee","refined","refocus","refract","refrain","refresh","refried","refusal","regalia","regally","regress","regroup","regular","reissue","rejoice","relapse","related","relearn","release","reliant","relieve","relight","remarry","rematch","remnant","remorse","removal","removed","remover","renewal","renewed","reoccur","reorder","repaint","replace","replica","reprint","reprise","reptile","request","require","reroute","rescuer","reshape","reshoot","residue","respect","rethink","retinal","retired","retiree","retouch","retrace","retract","retrain","retread","retreat","retrial","retying","reunion","reunite","reveler","revenge","revenue","revered","reverse","revisit","revival","reviver","rewrite","ribcage","rickety","ricotta","rifling","rigging","rimless","rinsing","ripcord","ripping","riptide","risotto","ritalin","riveter","roaming","robbing","rocking","rotting","rotunda","roundup","routine","routing","rubbing","rubdown","rummage","rundown","running","rupture","sabbath","saddled","sadness","saffron","sagging","salvage","sandbag","sandbar","sandbox","sanding","sandlot","sandpit","sapling","sarcasm","sardine","satchel","satisfy","savanna","savings","scabbed","scalded","scaling","scallop","scandal","scanner","scarily","scholar","science","scooter","scoring","scoured","scratch","scrawny","scrooge","scruffy","scrunch","scuttle","secrecy","secular","segment","seismic","seizing","seltzer","seminar","senator","serpent","service","serving","setback","setting","seventh","seventy","shadily","shading","shakily","shaking","shallot","shallow","shampoo","shaping","sharper","sharpie","sharply","shelter","shifter","shimmer","shindig","shingle","shining","shopper","shorten","shorter","shortly","showbiz","showing","showman","showoff","shrivel","shudder","shuffle","siamese","sibling","sighing","silicon","sincere","singing","sinless","sinuous","sitting","sixfold","sixteen","sixties","sizable","sizably","skating","skeptic","skilled","skillet","skimmed","skimmer","skipper","skittle","skyline","skyward","slacked","slacker","slander","slashed","slather","slicing","sliding","sloping","slouchy","smartly","smasher","smashup","smitten","smoking","smolder","smother","snagged","snaking","snippet","snooper","snoring","snorkel","snowcap","snowman","snuggle","species","specked","speller","spender","spinach","spindle","spinner","spinout","spirits","splashy","splurge","spoiled","spoiler","sponsor","spotted","spotter","spousal","sputter","squeeze","squishy","stadium","staging","stained","stamina","stammer","stardom","staring","starlet","starlit","starter","startle","startup","starved","stature","statute","staunch","stellar","stencil","sterile","sternum","stiffen","stiffly","stimuli","stinger","stipend","stoning","stopped","stopper","storage","stowing","stratus","stretch","strudel","stubbed","stubble","stubbly","student","studied","stuffed","stumble","stunned","stunner","styling","stylist","subdued","subject","sublime","subplot","subside","subsidy","subsoil","subtext","subtype","subzero","suction","suffice","suggest","sulfate","sulfide","sulfite","support","supreme","surface","surgery","surging","surname","surpass","surplus","surreal","survive","suspect","suspend","swagger","swifter","swiftly","swimmer","swinger","swizzle","swooned","symptom","synapse","synergy","t-shirt","tabasco","tabloid","tacking","tactful","tactics","tactile","tadpole","tainted","tannery","tanning","tantrum","tapered","tapioca","tapping","tarnish","tasting","theater","thermal","thermos","thicken","thicket","thimble","thinner","thirsty","thrower","thyself","tidings","tighten","tightly","tigress","timothy","tinfoil","tinwork","tipping","tracing","tractor","trading","traffic","tragedy","traitor","trapeze","trapped","trapper","treason","trekker","tremble","tribune","tribute","triceps","trickle","trident","trilogy","trimmer","trinity","triumph","trivial","trodden","tropics","trouble","truffle","trustee","tubular","tucking","tuesday","tuition","turbine","turmoil","twiddle","twisted","twister","twitter","unaired","unawake","unaware","unbaked","unblock","unboxed","uncanny","unchain","uncheck","uncivil","unclasp","uncloak","uncouth","uncover","uncross","uncrown","uncured","undated","undergo","undoing","undress","undying","unearth","uneaten","unequal","unfazed","unfiled","unfixed","ungodly","unhappy","unheard","unhinge","unicorn","unified","unifier","unkempt","unknown","unlaced","unlatch","unleash","unlined","unloved","unlucky","unmixed","unmoral","unmoved","unnamed","unnerve","unpaved","unquote","unrated","unrobed","unsaved","unscrew","unstuck","unsworn","untaken","untamed","untaxed","untimed","untried","untruth","untwist","untying","unusual","unvocal","unweave","unwired","unwound","unwoven","upchuck","upfront","upgrade","upright","upriver","upscale","upstage","upstart","upstate","upswing","uptight","uranium","urgency","urology","useable","utensil","utility","utilize","vacancy","vaguely","valiant","vanilla","vantage","variety","various","varmint","varnish","varsity","varying","vending","venture","verbose","verdict","version","vertigo","veteran","victory","viewing","village","villain","vintage","violate","virtual","viscous","visible","visibly","visitor","vitally","vividly","vocally","voicing","voltage","volumes","voucher","walmart","wannabe","wanting","washday","washing","washout","washtub","wasting","whoever","whoopee","wielder","wildcat","willing","wincing","winking","wistful","womanly","worried","worrier","wrangle","wrecker","wriggle","wriggly","wrinkle","wrinkly","writing","written","wronged","wrongly","wrought","yanking","yapping","yelling","yiddish","zealous","zipfile","zipping","zoology","abacus","ablaze","abroad","absurd","accent","aching","acting","action","active","affair","affirm","afford","aflame","afloat","afraid","agency","agenda","aghast","agreed","aliens","almost","alumni","always","ambush","amends","amount","amulet","amused","amuser","anchor","anemia","anemic","angled","angler","angles","animal","anthem","antics","antler","anyhow","anyone","anyway","apache","appear","armful","arming","armory","around","arrest","arrive","ascend","ascent","asleep","aspect","aspire","astute","atrium","attach","attain","attest","attire","august","author","autism","avatar","avenge","avenue","awaken","awhile","awning","babble","babied","baboon","backed","backer","backup","badass","baffle","bagful","bagged","baggie","bakery","baking","bamboo","banana","banish","banked","banker","banner","banter","barbed","barber","barley","barman","barrel","basics","basket","batboy","battle","bauble","blazer","bleach","blinks","blouse","bluish","blurry","bobbed","bobble","bobcat","bogged","boggle","bonded","bonnet","bonsai","booted","bootie","boring","botany","bottle","bottom","bounce","bouncy","bovine","boxcar","boxing","breach","breath","breeze","breezy","bright","broken","broker","bronco","bronze","browse","brunch","bubble","bubbly","bucked","bucket","buckle","budget","buffed","buffer","bulgur","bundle","bungee","bunion","busboy","busily","cabana","cabbie","cackle","cactus","caddie","camera","camper","campus","canary","cancel","candle","canine","canned","cannon","cannot","canola","canopy","canyon","capped","carbon","carded","caress","caring","carrot","cartel","carton","casing","casino","casket","catchy","catnap","catnip","catsup","cattle","caucus","causal","caviar","cavity","celery","celtic","cement","census","chance","change","chaste","chatty","cheese","cheesy","cherub","chewer","chirpy","choice","choosy","chosen","chrome","chubby","chummy","cinema","circle","circus","citric","citrus","clammy","clamor","clause","clench","clever","client","clinic","clique","clover","clumsy","clunky","clutch","cobalt","cobweb","coerce","coffee","collar","collie","colony","coming","common","compel","comply","concur","copied","copier","coping","copper","cornea","corned","corner","corral","corset","cortex","cosmic","cosmos","cotton","county","cozily","cradle","crafty","crayon","crazed","crease","create","credit","creole","cringe","crispy","crouch","crummy","crying","cuddle","cuddly","cupped","curdle","curfew","curing","curled","curler","cursor","curtly","curtsy","cussed","cyclic","cymbal","dagger","dainty","dander","danger","dangle","dating","daybed","deacon","dealer","debate","debtor","debunk","decade","deceit","decent","decode","decree","deduce","deduct","deepen","deeply","deface","defame","defeat","defile","define","deftly","defuse","degree","delete","deluge","deluxe","demise","demote","denial","denote","dental","depict","deploy","deport","depose","deputy","derail","detail","detest","device","diaper","dicing","dilute","dimmed","dimmer","dimple","dinghy","dining","dinner","dipped","dipper","disarm","dismay","disown","diving","doable","docile","dollar","dollop","domain","doodle","dorsal","dosage","dotted","douche","dreamt","dreamy","dreary","drench","drippy","driven","driver","drudge","dubbed","duffel","dugout","duller","duplex","duress","during","earful","earthy","earwig","easily","easing","easter","eatery","eating","eclair","edging","editor","effort","egging","eggnog","either","elated","eldest","eleven","elixir","embark","emblem","embody","emboss","enable","enamel","encode","encore","ending","energy","engine","engulf","enrage","enrich","enroll","ensure","entail","entire","entity","entomb","entrap","entree","enzyme","equate","equity","erased","eraser","errand","errant","eskimo","estate","ethics","evolve","excess","excuse","exhale","exhume","exodus","expand","expend","expert","expire","expose","extent","extras","fabric","facial","facing","factor","fading","falcon","family","famine","faster","faucet","fedora","feeble","feisty","feline","fender","ferret","ferris","fervor","fester","fiddle","figure","filing","filled","filler","filter","finale","finite","flashy","flatly","fleshy","flight","flinch","floral","flying","follow","fondly","fondue","footer","fossil","foster","frayed","freely","french","frenzy","friday","fridge","friend","fringe","frolic","frosty","frozen","frying","galley","gallon","galore","gaming","gander","gangly","garage","garden","gargle","garlic","garnet","garter","gating","gazing","geiger","gender","gently","gerbil","giblet","giggle","giggly","gigolo","gilled","girdle","giving","gladly","glance","glider","glitch","glitzy","gloomy","gluten","gnarly","google","gopher","gorged","gossip","gothic","gotten","graded","grader","granny","gravel","graves","greedy","grinch","groggy","groove","groovy","ground","grower","grudge","grunge","gurgle","gutter","hacked","hacker","halved","halves","hamlet","hamper","handed","hangup","hankie","harbor","hardly","hassle","hatbox","hatred","hazard","hazily","hazing","headed","header","helium","helmet","helper","herald","herbal","hermit","hubcap","huddle","humble","humbly","hummus","humped","humvee","hunger","hungry","hunter","hurdle","hurled","hurler","hurray","husked","hybrid","hyphen","idiocy","ignore","iguana","impale","impart","impish","impose","impure","iodine","iodize","iphone","itunes","jackal","jacket","jailer","jargon","jersey","jester","jigsaw","jingle","jockey","jogger","jovial","joyous","juggle","jumble","junior","junkie","jurist","justly","karate","keenly","kennel","kettle","kimono","kindle","kindly","kisser","kitten","kosher","ladder","ladies","lagged","lagoon","landed","lapdog","lapped","laptop","lather","latter","launch","laurel","lavish","lazily","legacy","legend","legged","legume","length","lesser","letter","levers","liable","lifter","likely","liking","lining","linked","liquid","litmus","litter","little","lively","living","lizard","lugged","lumber","lunacy","lushly","luster","luxury","lyrics","maggot","maimed","making","mammal","manger","mangle","manila","manned","mantis","mantra","manual","margin","marina","marine","marlin","maroon","marrow","marshy","mascot","mashed","masses","mating","matrix","matron","matted","matter","mayday","moaner","mobile","mocker","mockup","modify","module","monday","mooing","mooned","morale","mosaic","motion","motive","moving","mowing","mulled","mumble","muppet","museum","musket","muster","mutate","mutiny","mutual","muzzle","myself","naming","napkin","napped","narrow","native","nature","nearby","nearly","neatly","nebula","nectar","negate","nephew","neuron","neuter","nibble","nimble","nimbly","nuclei","nugget","number","numbly","nutmeg","nuzzle","object","oblong","obtain","obtuse","occupy","ocelot","octane","online","onward","oppose","outage","outbid","outfit","outing","outlet","output","outwit","oxford","oxygen","oyster","pacify","padded","paddle","paging","palace","paltry","panama","pantry","papaya","parade","parcel","pardon","parish","parlor","parole","parrot","parted","partly","pasted","pastel","pastor","patchy","patrol","pauper","paving","pawing","payday","paying","pebble","pebbly","pectin","pellet","pelvis","pencil","penpal","perish","pester","petite","petted","phobia","phoney","phrase","plasma","plated","player","pledge","plenty","plural","pointy","poison","poking","police","policy","polish","poncho","poplar","popper","porous","portal","portly","posing","possum","postal","posted","poster","pounce","powwow","prance","prayer","precut","prefix","prelaw","prepay","preppy","preset","pretty","prewar","primal","primer","prison","prissy","pronto","proofs","proton","proved","proven","prozac","public","pucker","pueblo","pumice","pummel","puppet","purely","purify","purist","purity","purple","pusher","pushup","puzzle","python","quarry","quench","quiver","racing","racism","racoon","radial","radish","raffle","ragged","raging","raider","raisin","raking","ramble","ramrod","random","ranged","ranger","ranked","rarity","rascal","ravage","ravine","raving","reason","rebate","reboot","reborn","rebuff","recall","recant","recast","recede","recent","recess","recite","recoil","recopy","record","recoup","rectal","refill","reflex","reflux","refold","refund","refuse","refute","regain","reggae","regime","region","reheat","rehire","rejoin","relish","relive","reload","relock","remake","remark","remedy","remold","remote","rename","rental","rented","renter","reopen","repair","repave","repeal","repent","replay","repose","repost","resale","reseal","resend","resent","resize","resort","result","resume","retail","retake","retold","retool","return","retype","reveal","reverb","revert","revise","revoke","revolt","reward","rewash","rewind","rewire","reword","rework","rewrap","ribbon","riches","richly","ridden","riding","rimmed","ripple","rising","roamer","robust","rocker","rocket","roping","roster","rotten","roving","rubbed","rubber","rubble","ruckus","rudder","ruined","rumble","runner","runway","sacred","sadden","safari","safely","salami","salary","saline","saloon","salute","sample","sandal","sanded","savage","savior","scabby","scarce","scared","scenic","scheme","scorch","scored","scorer","scotch","scouts","screen","scribe","script","scroll","scurvy","second","secret","sector","sedate","seduce","seldom","senate","senior","septic","septum","sequel","series","sermon","sesame","settle","shabby","shaded","shadow","shanty","sheath","shelve","sherry","shield","shifty","shimmy","shorts","shorty","shower","shrank","shriek","shrill","shrimp","shrine","shrink","shrubs","shrunk","siding","sierra","siesta","silent","silica","silver","simile","simple","simply","singer","single","sinner","sister","sitcom","sitter","sizing","sizzle","skater","sketch","skewed","skewer","skiing","skinny","slacks","sleeve","sliced","slicer","slider","slinky","sliver","slogan","sloped","sloppy","sludge","smoked","smooth","smudge","smudgy","smugly","snazzy","sneeze","snitch","snooze","snugly","specks","speech","sphere","sphinx","spider","spiffy","spinal","spiral","spleen","splice","spoils","spoken","sponge","spongy","spooky","sports","sporty","spotty","spouse","sprain","sprang","sprawl","spring","sprint","sprite","sprout","spruce","sprung","squall","squash","squeak","squint","squire","squirt","stable","staple","starch","starry","static","statue","status","stench","stereo","stifle","stingy","stinky","stitch","stooge","streak","stream","street","stress","strewn","strict","stride","strife","strike","strive","strobe","strode","struck","strung","stucco","studio","stuffy","stupor","sturdy","stylus","sublet","subpar","subtly","suburb","subway","sudden","sudoku","suffix","suitor","sulfur","sullen","sultry","supper","supply","surely","surfer","survey","swerve","switch","swivel","swoosh","system","tables","tablet","tackle","taking","talcum","tamale","tamper","tanned","target","tarmac","tartar","tartly","tassel","tattle","tattoo","tavern","thesis","thinly","thirty","thrash","thread","thrift","thrill","thrive","throat","throng","tidbit","tiling","timing","tingle","tingly","tinker","tinsel","tipoff","tipped","tipper","tiptop","tiring","tissue","trance","travel","treble","tremor","trench","triage","tricky","trifle","tripod","trophy","trough","trowel","trunks","tumble","turban","turkey","turret","turtle","twelve","twenty","twisty","twitch","tycoon","umpire","unable","unbend","unbent","unclad","unclip","unclog","uncork","undead","undone","unease","uneasy","uneven","unfair","unfold","unglue","unholy","unhook","unison","unkind","unless","unmade","unpack","unpaid","unplug","unread","unreal","unrest","unripe","unroll","unruly","unsafe","unsaid","unseen","unsent","unsnap","unsold","unsure","untidy","untold","untrue","unused","unwary","unwell","unwind","unworn","upbeat","update","upheld","uphill","uphold","upload","uproar","uproot","upside","uptake","uptown","upward","upwind","urchin","urgent","urging","usable","utmost","utopia","vacant","vacate","valium","valley","vanish","vanity","varied","vastly","veggie","velcro","velvet","vendor","verify","versus","vessel","viable","viewer","violet","violin","vision","volley","voting","voyage","waffle","waggle","waking","walnut","walrus","wanted","wasabi","washed","washer","waving","whacky","whinny","whoops","widely","widget","wilder","wildly","willed","willow","winner","winter","wiring","wisdom","wizard","wobble","wobbly","wooing","wreath","wrench","yearly","yippee","yogurt","yonder","zodiac","zombie","zoning","abide","acorn","affix","afoot","agent","agile","aging","agony","ahead","alarm","album","alias","alibi","alike","alive","aloft","aloha","alone","aloof","amaze","amber","amigo","amino","amiss","among","ample","amply","amuck","anger","anime","ankle","annex","antsy","anvil","aorta","apple","apply","april","apron","aptly","arena","argue","arise","armed","aroma","arose","array","arson","ashen","ashes","aside","askew","atlas","attic","audio","avert","avoid","await","award","aware","awoke","bacon","badge","badly","bagel","baggy","baked","balmy","banjo","barge","basil","basin","basis","batch","baton","blade","blame","blank","blast","bleak","bleep","blend","bless","blimp","bling","blitz","bluff","blunt","blurb","blurt","blush","bogus","boned","boney","bonus","booth","boots","boozy","borax","botch","boxer","briar","bribe","brick","bride","bring","brink","brook","broom","brunt","brush","brute","buddy","buggy","bulge","bully","bunch","bunny","cable","cache","cacti","caddy","cadet","cameo","canal","candy","canon","carat","cargo","carol","carry","carve","catty","cause","cedar","chafe","chain","chair","chant","chaos","chaps","charm","chase","cheek","cheer","chemo","chess","chest","chevy","chewy","chief","chili","chill","chimp","chive","chomp","chuck","chump","chunk","churn","chute","cider","cinch","civic","civil","claim","clamp","clang","clash","clasp","class","clean","clear","cleat","cleft","clerk","cling","cloak","clock","clone","cloud","clump","coach","cocoa","comfy","comic","comma","conch","coral","corny","couch","cough","could","cover","cramp","crane","crank","crate","crave","crazy","creed","creme","crepe","crept","cried","crier","crimp","croak","crock","crook","croon","cross","crowd","crown","crumb","crust","cupid","curly","curry","curse","curve","curvy","cushy","cycle","daily","dairy","daisy","dance","dandy","dares","dealt","debit","debug","decaf","decal","decay","decoy","defog","deity","delay","delta","denim","dense","depth","derby","deuce","diary","dimly","diner","dingo","dingy","ditch","ditto","ditzy","dizzy","dodge","dodgy","doily","doing","dolly","donor","donut","doozy","dowry","drank","dress","dried","drier","drift","drone","drool","droop","drove","drown","ducky","duvet","dwarf","dweeb","eagle","early","easel","eaten","ebony","ebook","ecard","eject","elbow","elite","elope","elude","elves","email","ember","emcee","emote","empty","ended","envoy","equal","error","erupt","essay","ether","evade","evict","evoke","exact","exert","exile","expel","fable","false","fancy","feast","femur","fence","ferry","fetal","fetch","fever","fiber","fifth","fifty","filth","finch","finer","flail","flaky","flame","flask","flick","flier","fling","flint","flirt","float","flock","floss","flyer","folic","foyer","frail","frame","frays","fresh","fried","frill","frisk","front","froth","frown","fruit","gaffe","gains","gamma","gauze","gecko","genre","gents","getup","giant","giddy","gills","given","giver","gizmo","glade","glare","glass","glory","gloss","glove","going","gonad","gooey","goofy","grain","grant","grape","graph","grasp","grass","gravy","green","grief","grill","grime","grimy","groin","groom","grope","grout","grove","growl","grunt","guide","guise","gully","gummy","gusto","gusty","haiku","hanky","happy","hardy","harsh","haste","hasty","haunt","haven","heave","hedge","hefty","hence","henna","herbs","hertz","human","humid","hurry","icing","idiom","igloo","image","imply","irate","issue","ivory","jaunt","jawed","jelly","jiffy","jimmy","jolly","judge","juice","juicy","jumbo","juror","kabob","karma","kebab","kitty","knelt","knoll","koala","kooky","kudos","ladle","lance","lanky","lapel","large","lasso","latch","legal","lemon","level","lilac","lilly","limes","limit","lingo","lived","liver","lucid","lunar","lurch","lusty","lying","macaw","magma","maker","mango","mangy","manly","manor","march","mardi","marry","mauve","maybe","mocha","molar","moody","morse","mossy","motor","motto","mouse","mousy","mouth","movie","mower","mulch","mumbo","mummy","mumps","mural","murky","mushy","music","musky","musty","nacho","nanny","nappy","nervy","never","niece","nifty","ninja","ninth","nutty","nylon","oasis","ocean","olive","omega","onion","onset","opium","other","otter","ought","ounce","outer","ovary","ozone","paced","pagan","pager","panda","panic","pants","paper","parka","party","pasta","pasty","patio","paver","payee","payer","pecan","penny","perch","perky","pesky","petal","petri","petty","phony","photo","plank","plant","plaza","pleat","pluck","poach","poise","poker","polar","polio","polka","poppy","poser","pouch","pound","power","press","pried","primp","print","prior","prism","prize","probe","prone","prong","props","proud","proxy","prude","prune","pulse","punch","pupil","puppy","purge","purse","pushy","quack","quail","quake","qualm","query","quiet","quill","quilt","quirk","quote","rabid","radar","radio","rally","ranch","rants","raven","reach","rebel","rehab","relax","relay","relic","remix","reply","rerun","reset","retry","reuse","rhyme","rigid","rigor","rinse","ritzy","rival","roast","robin","rocky","rogue","roman","rover","royal","rumor","runny","rural","sadly","saggy","saint","salad","salon","salsa","sandy","santa","sappy","sassy","satin","saucy","sauna","saved","savor","scale","scant","scarf","scary","scion","scoff","scone","scoop","scope","scorn","scrap","scuba","scuff","sedan","sepia","serve","setup","shack","shady","shaft","shaky","shale","shame","shank","shape","share","shawl","sheep","sheet","shelf","shell","shine","shiny","shirt","shock","shone","shore","shout","shove","shown","showy","shrug","shush","silly","siren","sixth","skied","skier","skies","skirt","skype","slain","slang","slate","sleek","sleep","sleet","slept","slick","slimy","slurp","slush","small","smell","smile","smirk","smite","smith","smock","smoky","snack","snare","snarl","sneak","sneer","snide","sniff","snore","snort","snout","snowy","snuff","speak","speed","spent","spied","spill","spilt","spiny","spoof","spool","spoon","spore","spout","spray","spree","sprig","squad","squid","stack","staff","stage","stamp","stand","stank","stark","stash","state","stays","steam","steed","steep","stick","stilt","stock","stoic","stoke","stole","stomp","stony","stood","stool","stoop","storm","stout","stove","straw","stray","strep","strum","strut","stuck","study","stump","stung","stunt","suave","sugar","suing","sushi","swarm","swear","sweat","sweep","swell","swept","swipe","swirl","swoop","swore","sworn","swung","syrup","tabby","tacky","talon","tamer","tarot","taste","tasty","taunt","thank","theft","theme","these","thigh","thing","think","thong","thorn","those","thumb","tiara","tibia","tidal","tiger","timid","trace","track","trade","train","traps","trash","treat","trend","trial","tried","trout","truce","truck","trump","truth","tubby","tulip","tummy","tutor","tweak","tweed","tweet","twerp","twice","twine","twins","twirl","tying","udder","ultra","uncle","uncut","unify","union","unlit","untie","until","unwed","unzip","upper","urban","usage","usher","usual","utter","valid","value","vegan","venue","venus","verse","vibes","video","viper","viral","virus","visor","vista","vixen","voice","voter","vowed","vowel","wafer","waged","wager","wages","wagon","waltz","watch","water","wharf","wheat","whiff","whiny","whole","widen","widow","width","wince","wired","wispy","woozy","worry","worst","wound","woven","wrath","wrist","xerox","yahoo","yeast","yield","yo-yo","yodel","yummy","zebra","zesty","zippy","able","acid","acre","acts","afar","aged","ahoy","aide","aids","ajar","aloe","alto","amid","anew","aqua","area","army","ashy","atom","atop","avid","awry","axis","barn","bash","bath","bats","blah","blip","blob","blog","blot","boat","body","boil","bolt","bony","book","boss","both","boxy","brim","bulb","bulk","bunt","bush","bust","buzz","cage","cake","calm","cane","cape","case","cash","chef","chip","chop","chug","city","clad","claw","clay","clip","coat","coil","coke","cola","cold","colt","coma","come","cone","cope","copy","cork","cost","cozy","crib","crop","crux","cube","cure","cusp","darn","dart","dash","data","dawn","dean","deck","deed","deem","defy","deny","dial","dice","dill","dime","dish","disk","dock","dole","dork","dose","dove","down","doze","drab","draw","drew","drum","duct","dude","duke","duly","dupe","dusk","dust","duty","each","eats","ebay","echo","edge","edgy","emit","envy","epic","even","evil","exes","exit","fade","fall","fame","fang","feed","feel","film","five","flap","fled","flip","flop","foam","foil","folk","font","food","fool","from","gala","game","gave","gawk","gear","geek","gift","glue","gnat","goal","goes","golf","gone","gong","good","goon","gore","gory","gout","gown","grab","gray","grew","grid","grip","grit","grub","gulf","gulp","guru","gush","guts","half","halt","hash","hate","hazy","heap","heat","huff","hula","hulk","hull","hunk","hurt","hush","icky","icon","idly","ipad","ipod","iron","item","java","jaws","jazz","jeep","jinx","john","jolt","judo","july","jump","june","jury","keep","kelp","kept","kick","kiln","kilt","king","kite","kiwi","knee","kung","lair","lake","lard","lark","lash","last","late","lazy","left","lego","lend","lens","lent","life","lily","limb","line","lint","lion","lisp","list","lung","lure","lurk","mace","malt","mama","many","math","mold","most","move","much","muck","mule","mute","mutt","myth","nail","name","nape","navy","neon","nerd","nest","next","oboe","ogle","oink","okay","omen","omit","only","onto","onyx","oops","ooze","oozy","opal","open","ouch","oval","oven","palm","pang","path","pelt","perm","peso","plod","plop","plot","plow","ploy","plug","plus","poem","poet","pogo","polo","pond","pony","pope","pork","posh","pout","pull","pulp","puma","punk","purr","putt","quit","race","rack","raft","rage","rake","ramp","rare","rash","ream","rely","reps","rice","ride","rift","rind","rink","riot","rise","risk","robe","romp","rope","rosy","ruby","rule","runt","ruse","rush","rust","saga","sage","said","sake","salt","same","sank","sash","scam","self","send","shed","ship","shun","shut","sift","silk","silo","silt","size","skid","slab","slam","slaw","sled","slip","slit","slot","slug","slum","smog","snap","snub","spew","spry","spud","spur","stem","step","stew","stir","such","suds","sulk","swab","swan","sway","taco","take","tall","tank","taps","task","that","thaw","thee","thud","thus","tidy","tile","till","tilt","tint","tiny","tray","tree","trio","turf","tusk","tutu","twig","tyke","unit","upon","used","user","veal","very","vest","veto","vice","visa","void","wake","walk","wand","wasp","wavy","wham","wick","wife","wifi","wilt","wimp","wind","wing","wipe","wiry","wise","wish","wolf","womb","woof","wool","word","work","xbox","yard","yarn","yeah","yelp","yoga","yoyo","zero","zips","zone","zoom","aim","art","bok","cod","cut","dab","dad","dig","dry","duh","duo","eel","elf","elk","elm","emu","fax","fit","foe","fog","fox","gab","gag","gap","gas","gem","guy","had","hug","hut","ice","icy","ion","irk","ivy","jab","jam","jet","job","jot","keg","lid","lip","map","mom","mop","mud","mug","nag","net","oaf","oak","oat","oil","old","opt","owl","pep","pod","pox","pry","pug","rug","rut","say","shy","sip","sly","tag","try","tug","tux","wad","why","wok","wow","yam","yen","yin","zap","zen","zit"]};var Rn=a(323),In=a.n(Rn);const An=[{id:"not_available",label:"n/a",strength:0},{id:"very-weak",label:"Very weak",strength:1},{id:"weak",label:"Weak",strength:60},{id:"fair",label:"Fair",strength:80},{id:"strong",label:"Strong",strength:112},{id:"very-strong",label:"Very strong",strength:128}],Pn={mask_upper:{label:"A-Z",characters:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},mask_lower:{label:"a-z",characters:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},mask_digit:{label:"0-9",characters:["0","1","2","3","4","5","6","7","8","9"]},mask_char1:{label:"# $ % & @ ^ ~",characters:["#","$","%","&","@","^","~"]},mask_parenthesis:{label:"{ [ ( | ) ] }",characters:["{","(","[","|","]",")","}"]},mask_char2:{label:". , : ;",characters:[".",",",":",";"]},mask_char3:{label:"' \" `",characters:["'",'"',"`"]},mask_char4:{label:"/ \\ _ -",characters:["/","\\","_","-"]},mask_char5:{label:"< * + ! ? =",characters:["<","*","+","!","?","="]},mask_emoji:{label:"😘",characters:["😀","😁","😂","😃","😄","😅","😆","😇","😈","😉","😊","😋","😌","😍","😎","😏","😐","😑","😒","😓","😔","😕","😖","😗","😘","😙","😚","😛","😜","😝","😞","😟","😠","😡","😢","😣","😤","😥","😦","😧","😨","😩","😪","😫","😬","😭","😮","😯","😰","😱","😲","😳","😴","😵","😶","😷","😸","😹","😺","😻","😼","😽","😾","😿","🙀","🙁","🙂","🙃","🙄","🙅","🙆","🙇","🙈","🙉","🙊","🙋","🙌","🙍","🙎","🙏"]}},Dn=["O","l","|","I","0","1"],Ln=e=>{const t=Object.entries(Pn).filter((([t])=>e[t])).reduce(((e,[t])=>[...e,...Pn[t].characters]),[]).filter((t=>!e.exclude_look_alike_chars||!Dn.includes(t)));return zn(e.length,t.length)},Tn=(e="")=>{const t=(new(In())).splitGraphemes(e);let a=0;for(const[e]of Object.entries(Pn)){const n=Pn[e];t.some((e=>n.characters.includes(e)))&&(a+=n.characters.length)}return zn(t.length,a)},Un=(e=0,t="")=>{const a=_n["en-UK"];return zn(e,128*t.length+a.length+3)},jn=(e=0)=>An.reduce(((t,a)=>t?a.strength>t.strength&&e>=a.strength?a:t:a));function zn(e,t){return e&&t?e*(Math.log(t)/Math.log(2)):0}const Mn=function(e){const t={isPassphrase:!1};if(!e)return t;const a=_n["en-UK"].reduce(((e,t)=>{const a=e.remainingSecret.replace(new RegExp(t,"g"),""),n=(e.remainingSecret.length-a.length)/t.length;return{numberReplacement:e.numberReplacement+n,remainingSecret:a}}),{numberReplacement:0,remainingSecret:e.toLowerCase()}),n=a.remainingSecret,i=a.numberReplacement-1;if(1===i)return-1===e.indexOf(n)||e.startsWith(n)||e.endsWith(n)?t:{numberWords:2,separator:n,isPassphrase:!0};if(0==n.length)return{numberWords:a.numberReplacement,separator:"",isPassphrase:!0};if(n.length%i!=0)return t;const s=n.length/i,o=n.substring(0,s),r=String(o).replace(/([-()\[\]{}+?*.$\^|,:#t.split(".").reduce(((e,t)=>void 0===e?e:e[t]),e),Bn=(e,t)=>{if(void 0===e||"string"!=typeof e||!e.length)return!1;if((t=t||{}).whitelistedProtocols&&!Array.isArray(t.whitelistedProtocols))throw new TypeError("The whitelistedProtocols should be an array of string.");if(t.defaultProtocol&&"string"!=typeof t.defaultProtocol)throw new TypeError("The defaultProtocol should be a string.");const a=t.whitelistedProtocols||[Gn.HTTP,Gn.HTTPS],n=[Gn.JAVASCRIPT],i=t.defaultProtocol||"";!/^((?!:\/\/).)*:\/\//.test(e)&&i&&(e=`${i}//${e}`);try{const t=new URL(e);return!n.includes(t.protocol)&&!!a.includes(t.protocol)&&t.href}catch(e){return!1}},Gn={FTP:"http:",FTPS:"https:",HTTP:"http:",HTTPS:"https:",JAVASCRIPT:"javascript:",SSH:"ssh:"};class Kn{constructor(e){this.settings=this.sanitizeDto(e)}sanitizeDto(e){const t=JSON.parse(JSON.stringify(e));return this.sanitizeEmailValidateRegex(t),t}sanitizeEmailValidateRegex(e){const t=e?.passbolt?.email?.validate?.regex;t&&"string"==typeof t&&t.trim().length&&(e.passbolt.email.validate.regex=t.trim().replace(/^\/+/,"").replace(/\/+$/,""))}canIUse(e){let t=!1;const a=`passbolt.plugins.${e}`,n=Vn(this.settings,a)||null;if(n&&"object"==typeof n){const e=Vn(n,"enabled");void 0!==e&&!0!==e||(t=!0)}return t}getPluginSettings(e){const t=`passbolt.plugins.${e}`;return Vn(this.settings,t)}getRememberMeOptions(){return(this.getPluginSettings("rememberMe")||{}).options||{}}get hasRememberMeUntilILogoutOption(){return void 0!==(this.getRememberMeOptions()||{})[-1]}getServerTimezone(){return Vn(this.settings,"passbolt.app.server_timezone")}get termsLink(){const e=Vn(this.settings,"passbolt.legal.terms.url");return!!e&&Bn(e)}get privacyLink(){const e=Vn(this.settings,"passbolt.legal.privacy_policy.url");return!!e&&Bn(e)}get registrationPublic(){return!0===Vn(this.settings,"passbolt.registration.public")}get debug(){return!0===Vn(this.settings,"app.debug")}get url(){return Vn(this.settings,"app.url")||""}get version(){return Vn(this.settings,"app.version.number")}get locale(){return Vn(this.settings,"app.locale")||Kn.DEFAULT_LOCALE.locale}async setLocale(e){this.settings.app.locale=e}get supportedLocales(){return Vn(this.settings,"passbolt.plugins.locale.options")||Kn.DEFAULT_SUPPORTED_LOCALES}get generatorConfiguration(){return Vn(this.settings,"passbolt.plugins.generator.configuration")}get emailValidateRegex(){return this.settings?.passbolt?.email?.validate?.regex||null}static get DEFAULT_SUPPORTED_LOCALES(){return[Kn.DEFAULT_LOCALE]}static get DEFAULT_LOCALE(){return{locale:"en-UK",label:"English"}}}class Hn{static validate(e){return"string"==typeof e&&Ct()("^[\\p{L}0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\p{L}0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[_\\p{L}0-9][-_\\p{L}0-9]*\\.)*(?:[\\p{L}0-9][-\\p{L}0-9]{0,62})\\.(?:(?:[a-z]{2}\\.)?[a-z]{2,})$","i").test(e)}}class $n{constructor(e){if("string"!=typeof e)throw Error("The regex should be a string.");this.regex=new(Ct())(e)}validate(e){return"string"==typeof e&&this.regex.test(e)}}class Zn{static validate(e,t){return Zn.getValidator(t).validate(e)}static getValidator(e){return e&&e instanceof Kn&&e.emailValidateRegex?new $n(e.emailValidateRegex):Hn}}function Yn(){return Yn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findPolicies:()=>{},shouldRunDictionaryCheck:()=>{}});class Qn extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{policies:null,getPolicies:this.getPolicies.bind(this),findPolicies:this.findPolicies.bind(this),shouldRunDictionaryCheck:this.shouldRunDictionaryCheck.bind(this)}}async findPolicies(){if(null!==this.getPolicies())return;const e=await this.props.context.port.request("passbolt.password-policies.get");this.setState({policies:e})}getPolicies(){return this.state.policies}shouldRunDictionaryCheck(){return Boolean(this.state.policies?.external_dictionary_check)}render(){return n.createElement(Jn.Provider,{value:this.state},this.props.children)}}Qn.propTypes={context:o().any,children:o().any},I(Qn);class Xn extends n.PureComponent{static getRelativeEntropyPosition(e){return 100-99/(1+Math.pow(e/90,3))}formatEntropy(e){return(e=e||0).toFixed(1)}get relativeTargetEntropyRatio(){return Xn.getRelativeEntropyPosition(this.props.targetEntropy)}get targetEntropyPositionStyle(){return{left:`calc(${this.relativeTargetEntropyRatio}% - 0.6rem`}}get colorClassName(){return this.hasEntropy()?this.props.entropy>=this.props.targetEntropy?"reached":this.props.isMinimumEntropyRequired?"required":"recommended":""}get tooltipMessage(){return this.props.isMinimumEntropyRequired?this.props.t("Minimal requirement"):this.props.t("Minimal recommendation")}getProgresseBarStyle(e){return{width:`${Xn.getRelativeEntropyPosition(e)}%`}}hasEntropy(){return null!==this.props.entropy&&void 0!==this.props.entropy}hasError(){return this.props.error}render(){const e=this.hasEntropy()||this.hasError(),t=jn(this.props.entropy);return n.createElement("div",{className:"password-complexity with-goal"},n.createElement("span",{className:"complexity-text"},e&&n.createElement(n.Fragment,null,t.label," (",n.createElement(v.c,null,"entropy: ",this.formatEntropy(this.props.entropy)," / ",this.formatEntropy(this.props.targetEntropy)," bits"),")"),!e&&n.createElement(v.c,null,"Quality")),n.createElement("span",{className:"progress"},n.createElement("span",{className:"progress-bar background"}),n.createElement("span",{className:"progress-bar target "+(this.props.isMinimumEntropyRequired?"required":""),style:this.hasEntropy()?this.getProgresseBarStyle(this.props.targetEntropy):null}),n.createElement("span",{className:`progress-bar foreground ${this.colorClassName}`,style:this.hasEntropy()?this.getProgresseBarStyle(this.props.entropy):null}),n.createElement("span",{className:`target-entropy ${this.colorClassName}`,style:this.targetEntropyPositionStyle},n.createElement(De,{message:this.tooltipMessage},n.createElement("span",{className:"tooltip-anchor"})))))}}Xn.defaultProps={isMinimumEntropyRequired:!0},Xn.propTypes={targetEntropy:o().number.isRequired,isMinimumEntropyRequired:o().bool.isRequired,entropy:o().number,error:o().bool,t:o().func};const ei=(0,k.Z)("common")(Xn);class ti extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.isPwndProcessingPromise=null,this.evaluatePassphraseIsInDictionaryDebounce=Nn()(this.evaluatePassphraseIsInDictionary,300),this.bindCallbacks(),this.createInputRef()}get defaultState(){return{name:"",nameError:"",email:"",emailError:"",algorithm:"RSA",keySize:4096,passphrase:"",passphraseConfirmation:"",passphraseWarning:"",passphraseEntropy:null,hasAlreadyBeenValidated:!1,isPwnedServiceAvailable:!0,passphraseInDictionnary:!1}}async componentDidMount(){await this.props.passwordPoliciesContext.findPolicies(),this.initPwnedPasswordService()}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleNameInputKeyUp=this.handleNameInputKeyUp.bind(this),this.handleEmailInputKeyUp=this.handleEmailInputKeyUp.bind(this),this.handlePassphraseChange=this.handlePassphraseChange.bind(this)}createInputRef(){this.nameInputRef=n.createRef(),this.emailInputRef=n.createRef(),this.passphraseInputRef=n.createRef(),this.passphraseConfirmationInputRef=n.createRef()}initPwnedPasswordService(){const e=this.props.passwordPoliciesContext.shouldRunDictionaryCheck();e&&(this.pownedService=new class{constructor(e){this.port=e}async evaluateSecret(e){let t=!0,a=!0;if(e.length>=8)try{t=await this.checkIfPasswordPowned(e)}catch(e){t=!1,a=!1}return{inDictionary:t,isPwnedServiceAvailable:a}}async checkIfPasswordPowned(e){return await this.port.request("passbolt.secrets.powned-password",e)>0}}(this.props.context.port)),this.setState({isPwnedServiceAvailable:e})}handleNameInputKeyUp(){this.state.hasAlreadyBeenValidated&&this.validateNameInput()}validateNameInput(){let e=null;return this.state.name.trim().length||(e=this.translate("A name is required.")),this.setState({nameError:e}),null===e}handleEmailInputKeyUp(){this.state.hasAlreadyBeenValidated&&this.validateEmailInput()}validateEmailInput(){let e=null;const t=this.state.email.trim();return t.length?Zn.validate(t,this.props.context.siteSettings)||(e=this.translate("Please enter a valid email address.")):e=this.translate("An email is required."),this.setState({email:t,emailError:e}),null===e}async handlePassphraseChange(e){const t=e.target.value;this.setState({passphrase:t},(()=>this.checkPassphraseValidity()))}async checkPassphraseValidity(){let e=null;if(this.state.passphrase.length>0?(e=(e=>{const{numberWords:t,separator:a,isPassphrase:n}=Mn(e);return n?Un(t,a):Tn(e)})(this.state.passphrase),this.state.isPwnedServiceAvailable&&(this.isPwndProcessingPromise=this.evaluatePassphraseIsInDictionaryDebounce(this.state.passphrase))):this.setState({passphraseInDictionnary:!1,passwordEntropy:null}),this.state.hasAlreadyBeenValidated)this.validatePassphraseInput();else{const e=this.state.passphrase.length>=4096,t=this.translate("this is the maximum size for this field, make sure your data was not truncated"),a=e?t:"";this.setState({passphraseWarning:a})}this.setState({passphraseEntropy:e})}validatePassphraseInput(){return!this.hasAnyErrors()}validatePassphraseConfirmationInput(){return!this.isEmptyPasswordConfirmation()&&!this.isPassphraseAndConfirmationDifferent()}hasWeakPassword(){return!this.isMinimumRequiredEntropyReached(this.state.passphraseEntropy)}isEmptyPasswordConfirmation(){return!this.state.passphraseConfirmation.length}isEmptyPassword(){return!this.state.passphrase.length}isPassphraseAndConfirmationDifferent(){return!this.isEmptyPasswordConfirmation()&&this.state.passphrase!==this.state.passphraseConfirmation}async evaluatePassphraseIsInDictionary(e){let t=this.state.isPwnedServiceAvailable;if(!t)return;let a=!1;try{const n=await this.pownedService.evaluateSecret(e);a=this.state.passphrase&&n.inDictionary&&this.isMinimumRequiredEntropyReached(this.state.passphraseEntropy),t=n.isPwnedServiceAvailable}catch(e){if(!(e instanceof Fn||e instanceof Wn))throw e;t=!1,a=!1}this.setState({isPwnedServiceAvailable:t,passphraseInDictionnary:a})}handleInputChange(e){const t=e.target;this.setState({[t.name]:t.value})}handleValidateError(){this.focusFirstFieldError()}focusFirstFieldError(){this.state.nameError?this.nameInputRef.current.focus():this.state.emailError?this.emailInputRef.current.focus():this.hasAnyErrors()?this.passphraseInputRef.current.focus():this.validatePassphraseConfirmationInput()||this.passphraseConfirmationInputRef.current.focus()}async handleFormSubmit(e){e.preventDefault(),this.state.processing||(this.setState({hasAlreadyBeenValidated:!0}),this.state.isPwnedServiceAvailable&&await this.isPwndProcessingPromise,this.state.passphraseInDictionnary&&this.pownedService||await this.save())}hasAnyErrors(){const e=[this.isEmptyPassword(),this.state.passphraseInDictionnary];return e.push(this.hasWeakPassword()),e.push(!this.pownedService&&this.state.passphrase.length<8),e.includes(!0)}async save(){if(this.toggleProcessing(),!await this.validate())return this.handleValidateError(),void this.toggleProcessing();const e=await this.generateKey();this.props.onUpdateOrganizationKey(e.public_key.armored_key,e.private_key.armored_key)}async validate(){const e=this.validateNameInput(),t=this.validateEmailInput(),a=this.validatePassphraseInput(),n=this.validatePassphraseConfirmationInput();return e&&t&&a&&n}async generateKey(){const e={name:this.state.name,email:this.state.email,algorithm:this.state.algorithm,keySize:this.state.keySize,passphrase:this.state.passphrase};return await this.props.context.port.request("passbolt.account-recovery.generate-organization-key",e)}toggleProcessing(){this.setState({processing:!this.state.processing})}hasAllInputDisabled(){return this.state.processing}isMinimumRequiredEntropyReached(e){return e>=80}get translate(){return this.props.t}get isPassphraseWarning(){return this.state.passphrase?.length>0&&!this.state.hasAlreadyBeenValidated&&(!this.state.isPwnedServiceAvailable||this.state.passphraseInDictionnary)}render(){const e=this.state.passphraseInDictionnary?0:this.state.passphraseEntropy;return n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content generate-organization-key"},n.createElement("div",{className:"input text required "+(this.state.nameError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-name"},n.createElement(v.c,null,"Name")),n.createElement("input",{id:"generate-organization-key-form-name",name:"name",type:"text",value:this.state.name,onKeyUp:this.handleNameInputKeyUp,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),ref:this.nameInputRef,className:"required fluid",maxLength:"64",required:"required",autoComplete:"off",autoFocus:!0,placeholder:this.translate("Name")}),this.state.nameError&&n.createElement("div",{className:"name error-message"},this.state.nameError)),n.createElement("div",{className:"input text required "+(this.state.emailError?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-email"},n.createElement(v.c,null,"Email")),n.createElement("input",{id:"generate-organization-key-form-email",name:"email",ref:this.emailInputRef,className:"required fluid",maxLength:"64",type:"email",autoComplete:"off",value:this.state.email,onChange:this.handleInputChange,placeholder:this.translate("Email Address"),onKeyUp:this.handleEmailInputKeyUp,disabled:this.hasAllInputDisabled(),required:"required"}),this.state.emailError&&n.createElement("div",{className:"email error-message"},this.state.emailError)),n.createElement("div",{className:"input select-wrapper"},n.createElement("label",{htmlFor:"generate-organization-key-form-algorithm"},n.createElement(v.c,null,"Algorithm"),n.createElement(De,{message:this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")},n.createElement(Re,{name:"info-circle"}))),n.createElement("input",{id:"generate-organization-key-form-algorithm",name:"algorithm",value:this.state.algorithm,className:"fluid",type:"text",autoComplete:"off",disabled:!0})),n.createElement("div",{className:"input select-wrapper"},n.createElement("label",{htmlFor:"generate-organization-key-form-keySize"},n.createElement(v.c,null,"Key Size"),n.createElement(De,{message:this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")},n.createElement(Re,{name:"info-circle"}))),n.createElement("input",{id:"generate-organization-key-form-key-size",name:"keySize",value:this.state.keySize,className:"fluid",type:"text",autoComplete:"off",disabled:!0})),n.createElement("div",{className:"input-password-wrapper input required "+(this.hasAnyErrors()&&this.state.hasAlreadyBeenValidated?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase"),this.isPassphraseWarning&&n.createElement(Re,{name:"exclamation"})),n.createElement(It,{id:"generate-organization-key-form-password",name:"password",placeholder:this.translate("Passphrase"),autoComplete:"new-password",preview:!0,securityToken:this.props.context.userSettings.getSecurityToken(),value:this.state.passphrase,onChange:this.handlePassphraseChange,disabled:this.hasAllInputDisabled(),inputRef:this.passphraseInputRef}),n.createElement(ei,{entropy:e,targetEntropy:80}),this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"password error-message"},this.isEmptyPassword()&&n.createElement("div",{className:"empty-passphrase error-message"},n.createElement(v.c,null,"A passphrase is required.")),this.hasWeakPassword()&&e>0&&n.createElement("div",{className:"invalid-passphrase error-message"},n.createElement(v.c,null,"A strong passphrase is required. The minimum complexity must be 'fair'.")),this.state.passphraseInDictionnary&&0===e&&!this.isEmptyPassword()&&n.createElement("div",{className:"invalid-passphrase error-message"},n.createElement(v.c,null,"The passphrase should not be part of an exposed data breach."))),this.state.passphrase?.length>0&&!this.state.hasAlreadyBeenValidated&&this.pownedService&&n.createElement(n.Fragment,null,!this.state.isPwnedServiceAvailable&&n.createElement("div",{className:"password warning-message"},n.createElement(v.c,null,"The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.")),this.state.passphraseInDictionnary&&n.createElement("div",{className:"password warning-message"},n.createElement(v.c,null,"The passphrase is part of an exposed data breach."))),!this.state.isPwnedServiceAvailable&&null!==this.pownedService&&n.createElement("div",{className:"password warning-message"},n.createElement("strong",null,n.createElement(v.c,null,"Warning:"))," ",n.createElement(v.c,null,"The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.")),n.createElement("div",{className:"input-password-wrapper input required "+(this.state.hasAlreadyBeenValidated&&!this.validatePassphraseConfirmationInput()?"error":"")},n.createElement("label",{htmlFor:"generate-organization-key-form-password"},n.createElement(v.c,null,"Organization key passphrase confirmation")),n.createElement(It,{id:"generate-organization-key-form-password-confirmation",name:"passphraseConfirmation",placeholder:this.translate("Passphrase confirmation"),autoComplete:"new-password",preview:!0,securityToken:this.props.context.userSettings.getSecurityToken(),value:this.state.passphraseConfirmation,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),inputRef:this.passphraseConfirmationInputRef}),this.state.hasAlreadyBeenValidated&&n.createElement("div",{className:"password-confirmation error-message"},this.isEmptyPasswordConfirmation()&&n.createElement("div",{className:"empty-passphrase-confirmation error-message"},n.createElement(v.c,null,"The passphrase confirmation is required.")),this.isPassphraseAndConfirmationDifferent()&&n.createElement("div",{className:"invalid-passphrase-confirmation error-message"},n.createElement(v.c,null,"The passphrase confirmation should match the passphrase")))))),n.createElement("div",{className:"warning message",id:"generate-organization-key-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, we encourage you to generate your OpenPGP Organization Recovery Key separately. Make sure you keep a backup in a safe place."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.onClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Generate & Apply")})))}}ti.propTypes={context:o().any,onUpdateOrganizationKey:o().func,onClose:o().func,t:o().func,passwordPoliciesContext:o().object};const ai=I(g(function(e){return class extends n.Component{render(){return n.createElement(Jn.Consumer,null,(t=>n.createElement(e,Yn({passwordPoliciesContext:t},this.props))))}}}((0,k.Z)("common")(ti))));function ni(){return ni=Object.assign?Object.assign.bind():function(e){for(var t=1;t{await this.props.adminAccountRecoveryContext.downloadPrivateKey(e)}})}hasAllInputDisabled(){return this.state.processing||this.state.loading}hasOrganisationRecoveryKey(){const e=this.state.keyInfoDto;return Boolean(e)}isPolicyEnabled(){return Boolean("disabled"!==this.policy)}resetKeyInfo(){this.setState({keyInfoDto:null})}async toggleProcessing(){this.setState({processing:!this.state.processing})}formatFingerprint(e){if(!e)return null;const t=e.toUpperCase().replace(/.{4}/g,"$& ");return n.createElement(n.Fragment,null,t.substr(0,24),n.createElement("br",null),t.substr(25))}formatUserIds(e){return e?e.map(((e,t)=>n.createElement(n.Fragment,{key:t},e.name," <",e.email,">",n.createElement("br",null)))):null}get translate(){return this.props.t}render(){return n.createElement("div",{className:"row"},n.createElement("div",{className:"recover-account-settings col8 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Account Recovery")),this.props.adminAccountRecoveryContext.hasPolicyChanges()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!this.hasOrganisationRecoveryKey()&&this.isPolicyEnabled()&&n.createElement("div",{className:"warning message",id:"email-notification-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, Don't forget to add an organization recovery key."))),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Account Recovery Policy")),n.createElement("p",null,n.createElement(v.c,null,"In this section you can choose the default behavior of account recovery for all users.")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio "+("mandatory"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"mandatory",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"mandatory"===this.policy,id:"accountRecoveryPolicyMandatory",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyMandatory"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Prompt")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user is required to provide a copy of their private key and passphrase during setup."),n.createElement("br",null),n.createElement(v.c,null,"You should inform your users not to store personal passwords.")))),n.createElement("div",{className:"input radio "+("opt-out"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"opt-out",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"opt-out"===this.policy,id:"accountRecoveryPolicyOptOut",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyOptOut"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Optional, Opt-out")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user will be prompted to provide a copy of their private key and passphrase by default during the setup, but they can opt out.")))),n.createElement("div",{className:"input radio "+("opt-in"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"opt-in",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"opt-in"===this.policy,id:"accountRecoveryPolicyOptIn",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyOptIn"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Optional, Opt-in")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Every user can decide to provide a copy of their private key and passphrase by default during the setup, but they can opt in.")))),n.createElement("div",{className:"input radio "+("disabled"===this.policy?"checked":"")},n.createElement("input",{type:"radio",value:"disabled",onChange:this.handlePolicyInputChange,name:"accountRecoveryPolicy",checked:"disabled"===this.policy,id:"accountRecoveryPolicyDisable",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"accountRecoveryPolicyDisable"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Disable (Default)")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Backup of the private key and passphrase will not be stored. This is the safest option."),n.createElement(v.c,null,"If users lose their private key and passphrase they will not be able to recover their account."))))),n.createElement("h4",null,n.createElement("span",{className:"input toggle-switch form-element "},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"organisationRecoveryKeyToggle",disabled:this.hasAllInputDisabled(),checked:this.isPolicyEnabled(),id:"recovery-key-toggle-button"}),n.createElement("label",{htmlFor:"recovery-key-toggle-button"},n.createElement(v.c,null,"Organization Recovery Key")))),this.isPolicyEnabled()&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"Your organization recovery key will be used to decrypt and recover the private key and passphrase of the users that are participating in the account recovery program.")," ",n.createElement(v.c,null,"The organization private recovery key should not be stored in passbolt.")," ",n.createElement(v.c,null,"You should keep it offline in a safe place.")),n.createElement("div",{className:"recovery-key-details"},n.createElement("table",{className:"table-info recovery-key"},n.createElement("tbody",null,n.createElement("tr",{className:"user-ids"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"User ids")),this.organizationKeyInfo?.user_ids&&n.createElement("td",{className:"value"},this.formatUserIds(this.organizationKeyInfo.user_ids)),!this.organizationKeyInfo?.user_ids&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available")),n.createElement("td",{className:"table-button"},n.createElement("button",{className:"button primary medium",type:"button",disabled:this.hasAllInputDisabled(),onClick:this.HandleUpdatePublicKeyClick},this.hasOrganisationRecoveryKey()&&n.createElement(v.c,null,"Rotate Key"),!this.hasOrganisationRecoveryKey()&&n.createElement(v.c,null,"Add an Organization Recovery Key")))),n.createElement("tr",{className:"fingerprint"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Fingerprint")),this.organizationKeyInfo?.fingerprint&&n.createElement("td",{className:"value"},this.formatFingerprint(this.organizationKeyInfo.fingerprint)),!this.organizationKeyInfo?.fingerprint&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"algorithm"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Algorithm")),this.organizationKeyInfo?.algorithm&&n.createElement("td",{className:"value"},this.organizationKeyInfo.algorithm),!this.organizationKeyInfo?.algorithm&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"key-length"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Key length")),this.organizationKeyInfo?.length&&n.createElement("td",{className:"value"},this.organizationKeyInfo.length),!this.organizationKeyInfo?.length&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"created"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Created")),this.organizationKeyInfo?.created&&n.createElement("td",{className:"value"},Ga(this.organizationKeyInfo.created,this.props.t,this.props.context.locale)),!this.organizationKeyInfo?.created&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))),n.createElement("tr",{className:"expires"},n.createElement("td",{className:"label"},n.createElement(v.c,null,"Expires")),this.organizationKeyInfo?.expires&&n.createElement("td",{className:"value"},Ga(this.organizationKeyInfo.expires,this.props.t,this.props.context.locale)),!this.organizationKeyInfo?.expires&&n.createElement("td",{className:"empty-value"},n.createElement(v.c,null,"not available"))))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about account recovery, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/account-recovery",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}li.propTypes={context:o().object,dialogContext:o().any,administrationWorkspaceContext:o().object,adminAccountRecoveryContext:o().object,t:o().func};const ci=I(g(O(rn((0,k.Z)("common")(li))))),mi={25:{port:25,tls:!1},2525:{port:2525,tls:!1},587:{port:587,tls:!0},588:{port:588,tls:!0},465:{port:465,tls:!0}};function di(e,t){const a=[];for(let n=0;n(!a||e.host===a)&&e.port===t))}const pi={id:"aws-ses",name:"AWS SES",icon:"aws-ses.svg",help_page:"https://docs.aws.amazon.com/ses/latest/dg/send-email-smtp.html",availableConfigurations:di(function(){const e=[];return["us-east-2","us-east-1","us-west-1","us-west-2","ap-south-1","ap-northeast-3","ap-northeast-2","ap-northeast-1","ap-southeast-1","ap-southeast-2","ca-central-1","eu-central-1","eu-west-1","eu-west-2","eu-west-3","sa-east-1","us-gov-west-1"].forEach((t=>{e.push(`email-smtp.${t}.amazonaws.com`)})),e}(),[25,2525,587])};pi.defaultConfiguration=hi(pi,587,"email-smtp.eu-central-1.amazonaws.com");const ui={id:"elastic-email",name:"ElasticEmail",icon:"elastic-email.svg",help_page:"https://help.elasticemail.com/en/articles/4803409-smtp-settings",availableConfigurations:di(["smtp.elasticemail.com","smtp25.elasticemail.com"],[25,2525,587])};ui.defaultConfiguration=hi(ui,587,"smtp.elasticemail.com");const gi={id:"google-workspace",name:"Google Workspace",icon:"gmail.svg",help_page:"https://support.google.com/a/answer/2956491",availableConfigurations:di(["smtp-relay.gmail.com"],[25,587])};gi.defaultConfiguration=hi(gi,587);const bi={id:"google-mail",name:"Google Mail",icon:"gmail.svg",help_page:"https://support.google.com/a/answer/2956491",availableConfigurations:di(["smtp.gmail.com"],[587])};bi.defaultConfiguration=hi(bi,587);const fi={id:"mailgun",name:"MailGun",icon:"mailgun.svg",help_page:"https://documentation.mailgun.com/en/latest/quickstart-sending.html",availableConfigurations:di(["smtp.mailgun.com"],[587])};fi.defaultConfiguration=fi.availableConfigurations[0];const yi={id:"mailjet",name:"Mailjet",icon:"mailjet.svg",help_page:"https://dev.mailjet.com/smtp-relay/configuration/",availableConfigurations:di(["in-v3.mailjet.com"],[25,2525,587,588])};yi.defaultConfiguration=hi(yi,587);const vi={id:"mandrill",name:"Mandrill",icon:"mandrill.svg",help_page:"https://mailchimp.com/developer/transactional/docs/smtp-integration/",availableConfigurations:di(["smtp.mandrillapp.com"],[25,2525,587])};vi.defaultConfiguration=hi(vi,587);const ki={id:"office-365",name:"Office 365",icon:"office365.svg",help_page:"https://learn.microsoft.com/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365",availableConfigurations:di(["smtp.office365.com"],[25,587])};ki.defaultConfiguration=hi(ki,587);const Ei={id:"outlook",name:"Outlook",icon:"outlook.svg",help_page:"https://support.microsoft.com/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040",availableConfigurations:di(["smtp-mail.outlook.com"],[587])};Ei.defaultConfiguration=hi(Ei,587);const wi={id:"sendgrid",name:"Sendgrid",icon:"sendgrid.svg",help_page:"https://docs.sendgrid.com/for-developers/sending-email/integrating-with-the-smtp-api",availableConfigurations:di(["smtp.sendgrid.net"],[25,2525,587])};wi.defaultConfiguration=hi(wi,587);const Ci={id:"sendinblue",name:"Sendinblue",icon:"sendinblue.svg",help_page:"https://help.sendinblue.com/hc/en-us/articles/209462765",availableConfigurations:di(["smtp-relay.sendinblue.com"],[25,587])};Ci.defaultConfiguration=hi(Ci,587);const Si={id:"zoho",name:"Zoho",icon:"zoho.svg",help_page:"https://www.zoho.com/mail/help/zoho-smtp.html",availableConfigurations:di(["smtp.zoho.eu","smtppro.zoho.eu"],[587])};Si.defaultConfiguration=hi(Si,587,"smtp.zoho.eu");const xi=[pi,ui,bi,gi,fi,yi,vi,ki,Ei,wi,Ci,Si,{id:"other",name:"Other",icon:null,availableConfigurations:[],defaultConfiguration:{host:"",port:"",tls:!0}}],Ni=["0-mail.com","007addict.com","020.co.uk","027168.com","0815.ru","0815.su","0clickemail.com","0sg.net","0wnd.net","0wnd.org","1033edge.com","10mail.org","10minutemail.co.za","10minutemail.com","11mail.com","123-m.com","123.com","123box.net","123india.com","123mail.cl","123mail.org","123qwe.co.uk","126.com","126.net","138mail.com","139.com","150mail.com","150ml.com","15meg4free.com","163.com","16mail.com","188.com","189.cn","1auto.com","1ce.us","1chuan.com","1colony.com","1coolplace.com","1email.eu","1freeemail.com","1fsdfdsfsdf.tk","1funplace.com","1internetdrive.com","1mail.ml","1mail.net","1me.net","1mum.com","1musicrow.com","1netdrive.com","1nsyncfan.com","1pad.de","1under.com","1webave.com","1webhighway.com","1zhuan.com","2-mail.com","20email.eu","20mail.in","20mail.it","20minutemail.com","212.com","21cn.com","247emails.com","24horas.com","2911.net","2980.com","2bmail.co.uk","2coolforyou.net","2d2i.com","2die4.com","2fdgdfgdfgdf.tk","2hotforyou.net","2mydns.com","2net.us","2prong.com","2trom.com","3000.it","30minutemail.com","30minutesmail.com","3126.com","321media.com","33mail.com","360.ru","37.com","3ammagazine.com","3dmail.com","3email.com","3g.ua","3mail.ga","3trtretgfrfe.tk","3xl.net","444.net","4email.com","4email.net","4gfdsgfdgfd.tk","4mg.com","4newyork.com","4warding.com","4warding.net","4warding.org","4x4fan.com","4x4man.com","50mail.com","5fm.za.com","5ghgfhfghfgh.tk","5iron.com","5star.com","60minutemail.com","6hjgjhgkilkj.tk","6ip.us","6mail.cf","6paq.com","702mail.co.za","74.ru","7mail.ga","7mail.ml","7tags.com","88.am","8848.net","888.nu","8mail.ga","8mail.ml","97rock.com","99experts.com","9ox.net","a-bc.net","a-player.org","a2z4u.net","a45.in","aaamail.zzn.com","aahlife.com","aamail.net","aapt.net.au","aaronkwok.net","abbeyroadlondon.co.uk","abcflash.net","abdulnour.com","aberystwyth.com","abolition-now.com","about.com","absolutevitality.com","abusemail.de","abv.bg","abwesend.de","abyssmail.com","ac20mail.in","academycougars.com","acceso.or.cr","access4less.net","accessgcc.com","accountant.com","acdcfan.com","acdczone.com","ace-of-base.com","acmecity.com","acmemail.net","acninc.net","acrobatmail.com","activatormail.com","activist.com","adam.com.au","add3000.pp.ua","addcom.de","address.com","adelphia.net","adexec.com","adfarrow.com","adinet.com.uy","adios.net","admin.in.th","administrativos.com","adoption.com","ados.fr","adrenalinefreak.com","adres.nl","advalvas.be","advantimo.com","aeiou.pt","aemail4u.com","aeneasmail.com","afreeinternet.com","africa-11.com","africamail.com","africamel.net","africanpartnersonline.com","afrobacon.com","ag.us.to","agedmail.com","agelessemail.com","agoodmail.com","ahaa.dk","ahk.jp","aichi.com","aim.com","aircraftmail.com","airforce.net","airforceemail.com","airpost.net","aiutamici.com","ajacied.com","ajaxapp.net","ak47.hu","aknet.kg","akphantom.com","albawaba.com","alecsmail.com","alex4all.com","alexandria.cc","algeria.com","algeriamail.com","alhilal.net","alibaba.com","alice.it","aliceadsl.fr","aliceinchainsmail.com","alivance.com","alive.cz","aliyun.com","allergist.com","allmail.net","alloymail.com","allracing.com","allsaintsfan.com","alltel.net","alpenjodel.de","alphafrau.de","alskens.dk","altavista.com","altavista.net","altavista.se","alternativagratis.com","alumni.com","alumnidirector.com","alvilag.hu","ama-trade.de","amail.com","amazonses.com","amele.com","america.hm","ameritech.net","amilegit.com","amiri.net","amiriindustries.com","amnetsal.com","amorki.pl","amrer.net","amuro.net","amuromail.com","ananzi.co.za","ancestry.com","andreabocellimail.com","andylau.net","anfmail.com","angelfan.com","angelfire.com","angelic.com","animail.net","animal.net","animalhouse.com","animalwoman.net","anjungcafe.com","anniefans.com","annsmail.com","ano-mail.net","anonmails.de","anonymbox.com","anonymous.to","anote.com","another.com","anotherdomaincyka.tk","anotherwin95.com","anti-ignorance.net","anti-social.com","antichef.com","antichef.net","antiqueemail.com","antireg.ru","antisocial.com","antispam.de","antispam24.de","antispammail.de","antongijsen.com","antwerpen.com","anymoment.com","anytimenow.com","aol.co.uk","aol.com","aol.de","aol.fr","aol.it","aol.jp","aon.at","apexmail.com","apmail.com","apollo.lv","aport.ru","aport2000.ru","apple.sib.ru","appraiser.net","approvers.net","aquaticmail.net","arabia.com","arabtop.net","arcademaster.com","archaeologist.com","archerymail.com","arcor.de","arcotronics.bg","arcticmail.com","argentina.com","arhaelogist.com","aristotle.org","army.net","armyspy.com","arnet.com.ar","art-en-ligne.pro","artistemail.com","artlover.com","artlover.com.au","artman-conception.com","as-if.com","asdasd.nl","asean-mail","asean-mail.com","asheville.com","asia-links.com","asia-mail.com","asia.com","asiafind.com","asianavenue.com","asiancityweb.com","asiansonly.net","asianwired.net","asiapoint.net","askaclub.ru","ass.pp.ua","assala.com","assamesemail.com","astroboymail.com","astrolover.com","astrosfan.com","astrosfan.net","asurfer.com","atheist.com","athenachu.net","atina.cl","atl.lv","atlas.cz","atlaswebmail.com","atlink.com","atmc.net","ato.check.com","atozasia.com","atrus.ru","att.net","attglobal.net","attymail.com","au.ru","auctioneer.net","aufeminin.com","aus-city.com","ausi.com","aussiemail.com.au","austin.rr.com","australia.edu","australiamail.com","austrosearch.net","autoescuelanerja.com","autograf.pl","automail.ru","automotiveauthority.com","autorambler.ru","aver.com","avh.hu","avia-tonic.fr","avtoritet.ru","awayonvacation.com","awholelotofamechi.com","awsom.net","axoskate.com","ayna.com","azazazatashkent.tk","azimiweb.com","azmeil.tk","bachelorboy.com","bachelorgal.com","backfliper.com","backpackers.com","backstreet-boys.com","backstreetboysclub.com","backtothefuturefans.com","backwards.com","badtzmail.com","bagherpour.com","bahrainmail.com","bakpaka.com","bakpaka.net","baldmama.de","baldpapa.de","ballerstatus.net","ballyfinance.com","balochistan.org","baluch.com","bangkok.com","bangkok2000.com","bannertown.net","baptistmail.com","baptized.com","barcelona.com","bareed.ws","barid.com","barlick.net","bartender.net","baseball-email.com","baseballmail.com","basketballmail.com","batuta.net","baudoinconsulting.com","baxomale.ht.cx","bboy.com","bboy.zzn.com","bcvibes.com","beddly.com","beeebank.com","beefmilk.com","beenhad.com","beep.ru","beer.com","beerandremotes.com","beethoven.com","beirut.com","belice.com","belizehome.com","belizemail.net","belizeweb.com","bell.net","bellair.net","bellsouth.net","berkscounty.com","berlin.com","berlin.de","berlinexpo.de","bestmail.us","betriebsdirektor.de","bettergolf.net","bharatmail.com","big1.us","big5mail.com","bigassweb.com","bigblue.net.au","bigboab.com","bigfoot.com","bigfoot.de","bigger.com","biggerbadder.com","bigmailbox.com","bigmir.net","bigpond.au","bigpond.com","bigpond.com.au","bigpond.net","bigpond.net.au","bigramp.com","bigstring.com","bikemechanics.com","bikeracer.com","bikeracers.net","bikerider.com","billsfan.com","billsfan.net","bimamail.com","bimla.net","bin-wieder-da.de","binkmail.com","bio-muesli.info","bio-muesli.net","biologyfan.com","birdfanatic.com","birdlover.com","birdowner.net","bisons.com","bitmail.com","bitpage.net","bizhosting.com","bk.ru","bkkmail.com","bla-bla.com","blackburnfans.com","blackburnmail.com","blackplanet.com","blader.com","bladesmail.net","blazemail.com","bleib-bei-mir.de","blink182.net","blockfilter.com","blogmyway.org","blondandeasy.com","bluebottle.com","bluehyppo.com","bluemail.ch","bluemail.dk","bluesfan.com","bluewin.ch","blueyonder.co.uk","blumail.org","blushmail.com","blutig.me","bmlsports.net","boardermail.com","boarderzone.com","boatracers.com","bobmail.info","bodhi.lawlita.com","bofthew.com","bol.com.br","bolando.com","bollywoodz.com","bolt.com","boltonfans.com","bombdiggity.com","bonbon.net","boom.com","bootmail.com","bootybay.de","bornagain.com","bornnaked.com","bossofthemoss.com","bostonoffice.com","boun.cr","bounce.net","bounces.amazon.com","bouncr.com","box.az","box.ua","boxbg.com","boxemail.com","boxformail.in","boxfrog.com","boximail.com","boyzoneclub.com","bradfordfans.com","brasilia.net","bratan.ru","brazilmail.com","brazilmail.com.br","breadtimes.press","breakthru.com","breathe.com","brefmail.com","brennendesreich.de","bresnan.net","brestonline.com","brew-master.com","brew-meister.com","brfree.com.br","briefemail.com","bright.net","britneyclub.com","brittonsign.com","broadcast.net","broadwaybuff.com","broadwaylove.com","brokeandhappy.com","brokenvalve.com","brujula.net","brunetka.ru","brusseler.com","bsdmail.com","bsnow.net","bspamfree.org","bt.com","btcc.org","btcmail.pw","btconnect.co.uk","btconnect.com","btinternet.com","btopenworld.co.uk","buerotiger.de","buffymail.com","bugmenot.com","bulgaria.com","bullsfan.com","bullsgame.com","bumerang.ro","bumpymail.com","bumrap.com","bund.us","bunita.net","bunko.com","burnthespam.info","burntmail.com","burstmail.info","buryfans.com","bushemail.com","business-man.com","businessman.net","businessweekmail.com","bust.com","busta-rhymes.com","busymail.com","busymail.com.com","busymail.comhomeart.com","butch-femme.net","butovo.net","buyersusa.com","buymoreplays.com","buzy.com","bvimailbox.com","byke.com","byom.de","byteme.com","c2.hu","c2i.net","c3.hu","c4.com","c51vsgq.com","cabacabana.com","cable.comcast.com","cableone.net","caere.it","cairomail.com","calcuttaads.com","calendar-server.bounces.google.com","calidifontain.be","californiamail.com","callnetuk.com","callsign.net","caltanet.it","camidge.com","canada-11.com","canada.com","canadianmail.com","canoemail.com","cantv.net","canwetalk.com","caramail.com","card.zp.ua","care2.com","careceo.com","careerbuildermail.com","carioca.net","cartelera.org","cartestraina.ro","casablancaresort.com","casema.nl","cash4u.com","cashette.com","casino.com","casualdx.com","cataloniamail.com","cataz.com","catcha.com","catchamail.com","catemail.com","catholic.org","catlover.com","catsrule.garfield.com","ccnmail.com","cd2.com","cek.pm","celineclub.com","celtic.com","center-mail.de","centermail.at","centermail.com","centermail.de","centermail.info","centermail.net","centoper.it","centralpets.com","centrum.cz","centrum.sk","centurylink.net","centurytel.net","certifiedmail.com","cfl.rr.com","cgac.es","cghost.s-a-d.de","chacuo.net","chaiyo.com","chaiyomail.com","chalkmail.net","chammy.info","chance2mail.com","chandrasekar.net","channelonetv.com","charityemail.com","charmedmail.com","charter.com","charter.net","chat.ru","chatlane.ru","chattown.com","chauhanweb.com","cheatmail.de","chechnya.conf.work","check.com","check.com12","check1check.com","cheeb.com","cheerful.com","chef.net","chefmail.com","chek.com","chello.nl","chemist.com","chequemail.com","cheshiremail.com","cheyenneweb.com","chez.com","chickmail.com","chil-e.com","childrens.md","childsavetrust.org","china.com","china.net.vg","chinalook.com","chinamail.com","chinesecool.com","chirk.com","chocaholic.com.au","chocofan.com","chogmail.com","choicemail1.com","chong-mail.com","chong-mail.net","christianmail.net","chronicspender.com","churchusa.com","cia-agent.com","cia.hu","ciaoweb.it","cicciociccio.com","cincinow.net","cirquefans.com","citeweb.net","citiz.net","citlink.net","city-of-bath.org","city-of-birmingham.com","city-of-brighton.org","city-of-cambridge.com","city-of-coventry.com","city-of-edinburgh.com","city-of-lichfield.com","city-of-lincoln.com","city-of-liverpool.com","city-of-manchester.com","city-of-nottingham.com","city-of-oxford.com","city-of-swansea.com","city-of-westminster.com","city-of-westminster.net","city-of-york.net","city2city.com","citynetusa.com","cityofcardiff.net","cityoflondon.org","ciudad.com.ar","ckaazaza.tk","claramail.com","classicalfan.com","classicmail.co.za","clear.net.nz","clearwire.net","clerk.com","clickforadate.com","cliffhanger.com","clixser.com","close2you.ne","close2you.net","clrmail.com","club-internet.fr","club4x4.net","clubalfa.com","clubbers.net","clubducati.com","clubhonda.net","clubmember.org","clubnetnoir.com","clubvdo.net","cluemail.com","cmail.net","cmail.org","cmail.ru","cmpmail.com","cmpnetmail.com","cnegal.com","cnnsimail.com","cntv.cn","codec.ro","codec.ro.ro","codec.roemail.ro","coder.hu","coid.biz","coldemail.info","coldmail.com","collectiblesuperstore.com","collector.org","collegebeat.com","collegeclub.com","collegemail.com","colleges.com","columbus.rr.com","columbusrr.com","columnist.com","comast.com","comast.net","comcast.com","comcast.net","comic.com","communityconnect.com","complxmind.com","comporium.net","comprendemail.com","compuserve.com","computer-expert.net","computer-freak.com","computer4u.com","computerconfused.com","computermail.net","computernaked.com","conexcol.com","cong.ru","conk.com","connect4free.net","connectbox.com","conok.com","consultant.com","consumerriot.com","contractor.net","contrasto.cu.cc","cookiemonster.com","cool.br","cool.fr.nf","coole-files.de","coolgoose.ca","coolgoose.com","coolkiwi.com","coollist.com","coolmail.com","coolmail.net","coolrio.com","coolsend.com","coolsite.net","cooooool.com","cooperation.net","cooperationtogo.net","copacabana.com","copper.net","copticmail.com","cornells.com","cornerpub.com","corporatedirtbag.com","correo.terra.com.gt","corrsfan.com","cortinet.com","cosmo.com","cotas.net","counsellor.com","countrylover.com","courriel.fr.nf","courrieltemporaire.com","cox.com","cox.net","coxinet.net","cpaonline.net","cracker.hu","craftemail.com","crapmail.org","crazedanddazed.com","crazy.ru","crazymailing.com","crazysexycool.com","crewstart.com","cristianemail.com","critterpost.com","croeso.com","crosshairs.com","crosswinds.net","crunkmail.com","crwmail.com","cry4helponline.com","cryingmail.com","cs.com","csinibaba.hu","cubiclink.com","cuemail.com","cumbriamail.com","curio-city.com","curryworld.de","curtsmail.com","cust.in","cute-girl.com","cuteandcuddly.com","cutekittens.com","cutey.com","cuvox.de","cww.de","cyber-africa.net","cyber-innovation.club","cyber-matrix.com","cyber-phone.eu","cyber-wizard.com","cyber4all.com","cyberbabies.com","cybercafemaui.com","cybercity-online.net","cyberdude.com","cyberforeplay.net","cybergal.com","cybergrrl.com","cyberinbox.com","cyberleports.com","cybermail.net","cybernet.it","cyberservices.com","cyberspace-asia.com","cybertrains.org","cyclefanz.com","cymail.net","cynetcity.com","d3p.dk","dabsol.net","dacoolest.com","dadacasa.com","daha.com","dailypioneer.com","dallas.theboys.com","dallasmail.com","dandikmail.com","dangerous-minds.com","dansegulvet.com","dasdasdascyka.tk","data54.com","date.by","daum.net","davegracey.com","dawnsonmail.com","dawsonmail.com","dayrep.com","dazedandconfused.com","dbzmail.com","dcemail.com","dcsi.net","ddns.org","deadaddress.com","deadlymob.org","deadspam.com","deafemail.net","deagot.com","deal-maker.com","dearriba.com","death-star.com","deepseafisherman.net","deforestationsucks.com","degoo.com","dejanews.com","delikkt.de","deliveryman.com","deneg.net","depechemode.com","deseretmail.com","desertmail.com","desertonline.com","desertsaintsmail.com","desilota.com","deskmail.com","deskpilot.com","despam.it","despammed.com","destin.com","detik.com","deutschland-net.com","devnullmail.com","devotedcouples.com","dezigner.ru","dfgh.net","dfwatson.com","dglnet.com.br","dgoh.org","di-ve.com","diamondemail.com","didamail.com","die-besten-bilder.de","die-genossen.de","die-optimisten.de","die-optimisten.net","die.life","diehardmail.com","diemailbox.de","digibel.be","digital-filestore.de","digitalforeplay.net","digitalsanctuary.com","digosnet.com","dingbone.com","diplomats.com","directbox.com","director-general.com","diri.com","dirtracer.com","dirtracers.com","discard.email","discard.ga","discard.gq","discardmail.com","discardmail.de","disciples.com","discofan.com","discovery.com","discoverymail.com","discoverymail.net","disign-concept.eu","disign-revelation.com","disinfo.net","dispomail.eu","disposable.com","disposableaddress.com","disposableemailaddresses.com","disposableinbox.com","dispose.it","dispostable.com","divismail.ru","divorcedandhappy.com","dm.w3internet.co.uk","dmailman.com","dmitrovka.net","dmitry.ru","dnainternet.net","dnsmadeeasy.com","doar.net","doclist.bounces.google.com","docmail.cz","docs.google.com","doctor.com","dodgeit.com","dodgit.com","dodgit.org","dodo.com.au","dodsi.com","dog.com","dogit.com","doglover.com","dogmail.co.uk","dogsnob.net","doityourself.com","domforfb1.tk","domforfb2.tk","domforfb3.tk","domforfb4.tk","domforfb5.tk","domforfb6.tk","domforfb7.tk","domforfb8.tk","domozmail.com","doneasy.com","donegal.net","donemail.ru","donjuan.com","dontgotmail.com","dontmesswithtexas.com","dontreg.com","dontsendmespam.de","doramail.com","dostmail.com","dotcom.fr","dotmsg.com","dotnow.com","dott.it","download-privat.de","dplanet.ch","dr.com","dragoncon.net","dragracer.com","drdrb.net","drivehq.com","dropmail.me","dropzone.com","drotposta.hu","dubaimail.com","dublin.com","dublin.ie","dump-email.info","dumpandjunk.com","dumpmail.com","dumpmail.de","dumpyemail.com","dunlopdriver.com","dunloprider.com","duno.com","duskmail.com","dustdevil.com","dutchmail.com","dvd-fan.net","dwp.net","dygo.com","dynamitemail.com","dyndns.org","e-apollo.lv","e-hkma.com","e-mail.com","e-mail.com.tr","e-mail.dk","e-mail.org","e-mail.ru","e-mail.ua","e-mailanywhere.com","e-mails.ru","e-tapaal.com","e-webtec.com","e4ward.com","earthalliance.com","earthcam.net","earthdome.com","earthling.net","earthlink.net","earthonline.net","eastcoast.co.za","eastlink.ca","eastmail.com","eastrolog.com","easy.com","easy.to","easypeasy.com","easypost.com","easytrashmail.com","eatmydirt.com","ebprofits.net","ec.rr.com","ecardmail.com","ecbsolutions.net","echina.com","ecolo-online.fr","ecompare.com","edmail.com","ednatx.com","edtnmail.com","educacao.te.pt","educastmail.com","eelmail.com","ehmail.com","einmalmail.de","einrot.com","einrot.de","eintagsmail.de","eircom.net","ekidz.com.au","elisanet.fi","elitemail.org","elsitio.com","eltimon.com","elvis.com","elvisfan.com","email-fake.gq","email-london.co.uk","email-value.com","email.biz","email.cbes.net","email.com","email.cz","email.ee","email.it","email.nu","email.org","email.ro","email.ru","email.si","email.su","email.ua","email.women.com","email2me.com","email2me.net","email4u.info","email60.com","emailacc.com","emailaccount.com","emailaddresses.com","emailage.ga","emailage.gq","emailasso.net","emailchoice.com","emailcorner.net","emailem.com","emailengine.net","emailengine.org","emailer.hubspot.com","emailforyou.net","emailgaul.com","emailgo.de","emailgroups.net","emailias.com","emailinfive.com","emailit.com","emaillime.com","emailmiser.com","emailoregon.com","emailpinoy.com","emailplanet.com","emailplus.org","emailproxsy.com","emails.ga","emails.incisivemedia.com","emails.ru","emailsensei.com","emailservice.com","emailsydney.com","emailtemporanea.com","emailtemporanea.net","emailtemporar.ro","emailtemporario.com.br","emailthe.net","emailtmp.com","emailto.de","emailuser.net","emailwarden.com","emailx.at.hm","emailx.net","emailxfer.com","emailz.ga","emailz.gq","emale.ru","ematic.com","embarqmail.com","emeil.in","emeil.ir","emil.com","eml.cc","eml.pp.ua","empereur.com","emptymail.com","emumail.com","emz.net","end-war.com","enel.net","enelpunto.net","engineer.com","england.com","england.edu","englandmail.com","epage.ru","epatra.com","ephemail.net","epiqmail.com","epix.net","epomail.com","epost.de","eposta.hu","eprompter.com","eqqu.com","eramail.co.za","eresmas.com","eriga.lv","ero-tube.org","eshche.net","esmailweb.net","estranet.it","ethos.st","etoast.com","etrademail.com","etranquil.com","etranquil.net","eudoramail.com","europamel.net","europe.com","europemail.com","euroseek.com","eurosport.com","evafan.com","evertonfans.com","every1.net","everyday.com.kh","everymail.net","everyone.net","everytg.ml","evopo.com","examnotes.net","excite.co.jp","excite.co.uk","excite.com","excite.it","execs.com","execs2k.com","executivemail.co.za","exemail.com.au","exg6.exghost.com","explodemail.com","express.net.ua","expressasia.com","extenda.net","extended.com","extremail.ru","eyepaste.com","eyou.com","ezagenda.com","ezcybersearch.com","ezmail.egine.com","ezmail.ru","ezrs.com","f-m.fm","f1fans.net","facebook-email.ga","facebook.com","facebookmail.com","facebookmail.gq","fadrasha.net","fadrasha.org","fahr-zur-hoelle.org","fake-email.pp.ua","fake-mail.cf","fake-mail.ga","fake-mail.ml","fakeinbox.com","fakeinformation.com","fakemailz.com","falseaddress.com","fan.com","fan.theboys.com","fannclub.com","fansonlymail.com","fansworldwide.de","fantasticmail.com","fantasymail.de","farang.net","farifluset.mailexpire.com","faroweb.com","fast-email.com","fast-mail.fr","fast-mail.org","fastacura.com","fastchevy.com","fastchrysler.com","fastem.com","fastemail.us","fastemailer.com","fastemailextractor.net","fastermail.com","fastest.cc","fastimap.com","fastkawasaki.com","fastmail.ca","fastmail.cn","fastmail.co.uk","fastmail.com","fastmail.com.au","fastmail.es","fastmail.fm","fastmail.gr","fastmail.im","fastmail.in","fastmail.jp","fastmail.mx","fastmail.net","fastmail.nl","fastmail.se","fastmail.to","fastmail.tw","fastmail.us","fastmailbox.net","fastmazda.com","fastmessaging.com","fastmitsubishi.com","fastnissan.com","fastservice.com","fastsubaru.com","fastsuzuki.com","fasttoyota.com","fastyamaha.com","fatcock.net","fatflap.com","fathersrightsne.org","fatyachts.com","fax.ru","fbi-agent.com","fbi.hu","fdfdsfds.com","fea.st","federalcontractors.com","feinripptraeger.de","felicity.com","felicitymail.com","female.ru","femenino.com","fepg.net","fetchmail.co.uk","fetchmail.com","fettabernett.de","feyenoorder.com","ffanet.com","fiberia.com","fibertel.com.ar","ficken.de","fificorp.com","fificorp.net","fightallspam.com","filipinolinks.com","filzmail.com","financefan.net","financemail.net","financier.com","findfo.com","findhere.com","findmail.com","findmemail.com","finebody.com","fineemail.com","finfin.com","finklfan.com","fire-brigade.com","fireman.net","fishburne.org","fishfuse.com","fivemail.de","fixmail.tk","fizmail.com","flashbox.5july.org","flashemail.com","flashmail.com","flashmail.net","fleckens.hu","flipcode.com","floridaemail.net","flytecrew.com","fmail.co.uk","fmailbox.com","fmgirl.com","fmguy.com","fnbmail.co.za","fnmail.com","folkfan.com","foodmail.com","footard.com","football.theboys.com","footballmail.com","foothills.net","for-president.com","force9.co.uk","forfree.at","forgetmail.com","fornow.eu","forpresident.com","fortuncity.com","fortunecity.com","forum.dk","fossefans.com","foxmail.com","fr33mail.info","francefans.com","francemel.fr","frapmail.com","free-email.ga","free-online.net","free-org.com","free.com.pe","free.fr","freeaccess.nl","freeaccount.com","freeandsingle.com","freebox.com","freedom.usa.com","freedomlover.com","freefanmail.com","freegates.be","freeghana.com","freelance-france.eu","freeler.nl","freemail.bozz.com","freemail.c3.hu","freemail.com.au","freemail.com.pk","freemail.de","freemail.et","freemail.gr","freemail.hu","freemail.it","freemail.lt","freemail.ms","freemail.nl","freemail.org.mk","freemail.ru","freemails.ga","freemeil.gq","freenet.de","freenet.kg","freeola.com","freeola.net","freeproblem.com","freesbee.fr","freeserve.co.uk","freeservers.com","freestamp.com","freestart.hu","freesurf.fr","freesurf.nl","freeuk.com","freeuk.net","freeukisp.co.uk","freeweb.org","freewebemail.com","freeyellow.com","freezone.co.uk","fresnomail.com","freudenkinder.de","freundin.ru","friction.net","friendlydevices.com","friendlymail.co.uk","friends-cafe.com","friendsfan.com","from-africa.com","from-america.com","from-argentina.com","from-asia.com","from-australia.com","from-belgium.com","from-brazil.com","from-canada.com","from-china.net","from-england.com","from-europe.com","from-france.net","from-germany.net","from-holland.com","from-israel.com","from-italy.net","from-japan.net","from-korea.com","from-mexico.com","from-outerspace.com","from-russia.com","from-spain.net","fromalabama.com","fromalaska.com","fromarizona.com","fromarkansas.com","fromcalifornia.com","fromcolorado.com","fromconnecticut.com","fromdelaware.com","fromflorida.net","fromgeorgia.com","fromhawaii.net","fromidaho.com","fromillinois.com","fromindiana.com","frominter.net","fromiowa.com","fromjupiter.com","fromkansas.com","fromkentucky.com","fromlouisiana.com","frommaine.net","frommaryland.com","frommassachusetts.com","frommiami.com","frommichigan.com","fromminnesota.com","frommississippi.com","frommissouri.com","frommontana.com","fromnebraska.com","fromnevada.com","fromnewhampshire.com","fromnewjersey.com","fromnewmexico.com","fromnewyork.net","fromnorthcarolina.com","fromnorthdakota.com","fromohio.com","fromoklahoma.com","fromoregon.net","frompennsylvania.com","fromrhodeisland.com","fromru.com","fromru.ru","fromsouthcarolina.com","fromsouthdakota.com","fromtennessee.com","fromtexas.com","fromthestates.com","fromutah.com","fromvermont.com","fromvirginia.com","fromwashington.com","fromwashingtondc.com","fromwestvirginia.com","fromwisconsin.com","fromwyoming.com","front.ru","frontier.com","frontiernet.net","frostbyte.uk.net","fsmail.net","ftc-i.net","ftml.net","fuckingduh.com","fudgerub.com","fullmail.com","funiran.com","funkfan.com","funky4.com","fuorissimo.com","furnitureprovider.com","fuse.net","fusemail.com","fut.es","fux0ringduh.com","fwnb.com","fxsmails.com","fyii.de","galamb.net","galaxy5.com","galaxyhit.com","gamebox.com","gamebox.net","gamegeek.com","games.com","gamespotmail.com","gamil.com","gamil.com.au","gamno.config.work","garbage.com","gardener.com","garliclife.com","gatwickemail.com","gawab.com","gay.com","gaybrighton.co.uk","gaza.net","gazeta.pl","gazibooks.com","gci.net","gdi.net","gee-wiz.com","geecities.com","geek.com","geek.hu","geeklife.com","gehensiemirnichtaufdensack.de","gelitik.in","gencmail.com","general-hospital.com","gentlemansclub.de","genxemail.com","geocities.com","geography.net","geologist.com","geopia.com","germanymail.com","get.pp.ua","get1mail.com","get2mail.fr","getairmail.cf","getairmail.com","getairmail.ga","getairmail.gq","getmails.eu","getonemail.com","getonemail.net","gfxartist.ru","gh2000.com","ghanamail.com","ghostmail.com","ghosttexter.de","giantmail.de","giantsfan.com","giga4u.de","gigileung.org","girl4god.com","girlsundertheinfluence.com","gishpuppy.com","givepeaceachance.com","glay.org","glendale.net","globalfree.it","globalpagan.com","globalsite.com.br","globetrotter.net","globo.com","globomail.com","gmail.co.za","gmail.com","gmail.com.au","gmail.com.br","gmail.ru","gmial.com","gmx.at","gmx.ch","gmx.co.uk","gmx.com","gmx.de","gmx.fr","gmx.li","gmx.net","gmx.us","gnwmail.com","go.com","go.ro","go.ru","go2.com.py","go2net.com","go4.it","gobrainstorm.net","gocollege.com","gocubs.com","godmail.dk","goemailgo.com","gofree.co.uk","gol.com","goldenmail.ru","goldmail.ru","goldtoolbox.com","golfemail.com","golfilla.info","golfmail.be","gonavy.net","gonuts4free.com","goodnewsmail.com","goodstick.com","google.com","googlegroups.com","googlemail.com","goosemoose.com","goplay.com","gorillaswithdirtyarmpits.com","gorontalo.net","gospelfan.com","gothere.uk.com","gotmail.com","gotmail.net","gotmail.org","gotomy.com","gotti.otherinbox.com","govolsfan.com","gportal.hu","grabmail.com","graduate.org","graffiti.net","gramszu.net","grandmamail.com","grandmasmail.com","graphic-designer.com","grapplers.com","gratisweb.com","great-host.in","greenmail.net","greensloth.com","groupmail.com","grr.la","grungecafe.com","gsrv.co.uk","gtemail.net","gtmc.net","gua.net","guerillamail.biz","guerillamail.com","guerrillamail.biz","guerrillamail.com","guerrillamail.de","guerrillamail.info","guerrillamail.net","guerrillamail.org","guerrillamailblock.com","guessmail.com","guju.net","gurlmail.com","gustr.com","guy.com","guy2.com","guyanafriends.com","gwhsgeckos.com","gyorsposta.com","gyorsposta.hu","h-mail.us","hab-verschlafen.de","hablas.com","habmalnefrage.de","hacccc.com","hackermail.com","hackermail.net","hailmail.net","hairdresser.com","hairdresser.net","haltospam.com","hamptonroads.com","handbag.com","handleit.com","hang-ten.com","hangglidemail.com","hanmail.net","happemail.com","happycounsel.com","happypuppy.com","harakirimail.com","haramamba.ru","hardcorefreak.com","hardyoungbabes.com","hartbot.de","hat-geld.de","hatespam.org","hawaii.rr.com","hawaiiantel.net","headbone.com","healthemail.net","heartthrob.com","heavynoize.net","heerschap.com","heesun.net","hehe.com","hello.hu","hello.net.au","hello.to","hellokitty.com","helter-skelter.com","hempseed.com","herediano.com","heremail.com","herono1.com","herp.in","herr-der-mails.de","hetnet.nl","hewgen.ru","hey.to","hhdevel.com","hideakifan.com","hidemail.de","hidzz.com","highmilton.com","highquality.com","highveldmail.co.za","hilarious.com","hinduhome.com","hingis.org","hiphopfan.com","hispavista.com","hitmail.com","hitmanrecords.com","hitthe.net","hkg.net","hkstarphoto.com","hmamail.com","hochsitze.com","hockeymail.com","hollywoodkids.com","home-email.com","home.de","home.nl","home.no.net","home.ro","home.se","homeart.com","homelocator.com","homemail.com","homenetmail.com","homeonthethrone.com","homestead.com","homeworkcentral.com","honduras.com","hongkong.com","hookup.net","hoopsmail.com","hopemail.biz","horrormail.com","host-it.com.sg","hot-mail.gq","hot-shop.com","hot-shot.com","hot.ee","hotbot.com","hotbox.ru","hotbrev.com","hotcoolmail.com","hotepmail.com","hotfire.net","hotletter.com","hotlinemail.com","hotmail.be","hotmail.ca","hotmail.ch","hotmail.co","hotmail.co.il","hotmail.co.jp","hotmail.co.nz","hotmail.co.uk","hotmail.co.za","hotmail.com","hotmail.com.ar","hotmail.com.au","hotmail.com.br","hotmail.com.mx","hotmail.com.tr","hotmail.de","hotmail.es","hotmail.fi","hotmail.fr","hotmail.it","hotmail.kg","hotmail.kz","hotmail.my","hotmail.nl","hotmail.ro","hotmail.roor","hotmail.ru","hotpop.com","hotpop3.com","hotvoice.com","housefan.com","housefancom","housemail.com","hsuchi.net","html.tou.com","hu2.ru","hughes.net","hulapla.de","humanoid.net","humanux.com","humn.ws.gy","humour.com","hunsa.com","hurting.com","hush.com","hushmail.com","hypernautica.com","i-connect.com","i-france.com","i-love-cats.com","i-mail.com.au","i-mailbox.net","i-p.com","i.am","i.am.to","i.amhey.to","i.ua","i12.com","i2828.com","i2pmail.org","iam4msu.com","iamawoman.com","iamfinallyonline.com","iamwaiting.com","iamwasted.com","iamyours.com","icestorm.com","ich-bin-verrueckt-nach-dir.de","ich-will-net.de","icloud.com","icmsconsultants.com","icq.com","icqmail.com","icrazy.com","icu.md","id-base.com","id.ru","ididitmyway.com","idigjesus.com","idirect.com","ieatspam.eu","ieatspam.info","ieh-mail.de","iespana.es","ifoward.com","ig.com.br","ignazio.it","ignmail.com","ihateclowns.com","ihateyoualot.info","iheartspam.org","iinet.net.au","ijustdontcare.com","ikbenspamvrij.nl","ilkposta.com","ilovechocolate.com","ilovegiraffes.net","ilovejesus.com","ilovelionking.com","ilovepokemonmail.com","ilovethemovies.com","ilovetocollect.net","ilse.nl","imaginemail.com","imail.org","imail.ru","imailbox.com","imails.info","imap-mail.com","imap.cc","imapmail.org","imel.org","imgof.com","imgv.de","immo-gerance.info","imneverwrong.com","imposter.co.uk","imstations.com","imstressed.com","imtoosexy.com","in-box.net","in2jesus.com","iname.com","inbax.tk","inbound.plus","inbox.com","inbox.lv","inbox.net","inbox.ru","inbox.si","inboxalias.com","inboxclean.com","inboxclean.org","incamail.com","includingarabia.com","incredimail.com","indeedemail.com","index.ua","indexa.fr","india.com","indiatimes.com","indo-mail.com","indocities.com","indomail.com","indosat.net.id","indus.ru","indyracers.com","inerted.com","inet.com","inet.net.au","info-media.de","info-radio.ml","info.com","info66.com","infoapex.com","infocom.zp.ua","infohq.com","infomail.es","infomart.or.jp","informaticos.com","infospacemail.com","infovia.com.ar","inicia.es","inmail.sk","inmail24.com","inmano.com","inmynetwork.tk","innocent.com","inonesearch.com","inorbit.com","inoutbox.com","insidebaltimore.net","insight.rr.com","inspectorjavert.com","instant-mail.de","instantemailaddress.com","instantmail.fr","instruction.com","instructor.net","insurer.com","interburp.com","interfree.it","interia.pl","interlap.com.ar","intermail.co.il","internet-club.com","internet-e-mail.com","internet-mail.org","internet-police.com","internetbiz.com","internetdrive.com","internetegypt.com","internetemails.net","internetmailing.net","internode.on.net","invalid.com","investormail.com","inwind.it","iobox.com","iobox.fi","iol.it","iol.pt","iowaemail.com","ip3.com","ip4.pp.ua","ip6.li","ip6.pp.ua","ipdeer.com","ipex.ru","ipoo.org","iportalexpress.com","iprimus.com.au","iqemail.com","irangate.net","iraqmail.com","ireland.com","irelandmail.com","irish2me.com","irj.hu","iroid.com","iscooler.com","isellcars.com","iservejesus.com","islamonline.net","islandemail.net","isleuthmail.com","ismart.net","isonfire.com","isp9.net","israelmail.com","ist-allein.info","ist-einmalig.de","ist-ganz-allein.de","ist-willig.de","italymail.com","itelefonica.com.br","itloox.com","itmom.com","ivebeenframed.com","ivillage.com","iwan-fals.com","iwi.net","iwmail.com","iwon.com","izadpanah.com","jabble.com","jahoopa.com","jakuza.hu","japan.com","jaydemail.com","jazzandjava.com","jazzfan.com","jazzgame.com","je-recycle.info","jeanvaljean.com","jerusalemmail.com","jesusanswers.com","jet-renovation.fr","jetable.com","jetable.de","jetable.fr.nf","jetable.net","jetable.org","jetable.pp.ua","jetemail.net","jewishmail.com","jfkislanders.com","jingjo.net","jippii.fi","jmail.co.za","jnxjn.com","job4u.com","jobbikszimpatizans.hu","joelonsoftware.com","joinme.com","jojomail.com","jokes.com","jordanmail.com","journalist.com","jourrapide.com","jovem.te.pt","joymail.com","jpopmail.com","jsrsolutions.com","jubiimail.dk","jump.com","jumpy.it","juniormail.com","junk1e.com","junkmail.com","junkmail.gq","juno.com","justemail.net","justicemail.com","justmail.de","justmailz.com","justmarriedmail.com","jwspamspy","k.ro","kaazoo.com","kabissa.org","kaduku.net","kaffeeschluerfer.com","kaffeeschluerfer.de","kaixo.com","kalpoint.com","kansascity.com","kapoorweb.com","karachian.com","karachioye.com","karbasi.com","kasmail.com","kaspop.com","katamail.com","kayafmmail.co.za","kbjrmail.com","kcks.com","kebi.com","keftamail.com","keg-party.com","keinpardon.de","keko.com.ar","kellychen.com","keptprivate.com","keromail.com","kewpee.com","keyemail.com","kgb.hu","khosropour.com","kichimail.com","kickassmail.com","killamail.com","killergreenmail.com","killermail.com","killmail.com","killmail.net","kimo.com","kimsdisk.com","kinglibrary.net","kinki-kids.com","kismail.ru","kissfans.com","kitemail.com","kittymail.com","kitznet.at","kiwibox.com","kiwitown.com","klassmaster.com","klassmaster.net","klzlk.com","km.ru","kmail.com.au","knol-power.nl","koko.com","kolumbus.fi","kommespaeter.de","konkovo.net","konsul.ru","konx.com","korea.com","koreamail.com","kosino.net","koszmail.pl","kozmail.com","kpnmail.nl","kreditor.ru","krim.ws","krongthip.com","krovatka.net","krunis.com","ksanmail.com","ksee24mail.com","kube93mail.com","kukamail.com","kulturbetrieb.info","kumarweb.com","kurzepost.de","kuwait-mail.com","kuzminki.net","kyokodate.com","kyokofukada.net","l33r.eu","la.com","labetteraverouge.at","lackmail.ru","ladyfire.com","ladymail.cz","lagerlouts.com","lags.us","lahoreoye.com","lakmail.com","lamer.hu","land.ru","langoo.com","lankamail.com","laoeq.com","laposte.net","lass-es-geschehen.de","last-chance.pro","lastmail.co","latemodels.com","latinmail.com","latino.com","lavabit.com","lavache.com","law.com","lawlita.com","lawyer.com","lazyinbox.com","learn2compute.net","lebanonatlas.com","leeching.net","leehom.net","lefortovo.net","legalactions.com","legalrc.loan","legislator.com","legistrator.com","lenta.ru","leonlai.net","letsgomets.net","letterbox.com","letterboxes.org","letthemeatspam.com","levele.com","levele.hu","lex.bg","lexis-nexis-mail.com","lhsdv.com","lianozovo.net","libero.it","liberomail.com","lick101.com","liebt-dich.info","lifebyfood.com","link2mail.net","linkmaster.com","linktrader.com","linuxfreemail.com","linuxmail.org","lionsfan.com.au","liontrucks.com","liquidinformation.net","lissamail.com","list.ru","listomail.com","litedrop.com","literaturelover.com","littleapple.com","littleblueroom.com","live.at","live.be","live.ca","live.cl","live.cn","live.co.uk","live.co.za","live.com","live.com.ar","live.com.au","live.com.mx","live.com.my","live.com.pt","live.com.sg","live.de","live.dk","live.fr","live.hk","live.ie","live.in","live.it","live.jp","live.nl","live.no","live.ru","live.se","liveradio.tk","liverpoolfans.com","ljiljan.com","llandudno.com","llangollen.com","lmxmail.sk","lobbyist.com","localbar.com","localgenius.com","locos.com","login-email.ga","loh.pp.ua","lol.ovpn.to","lolfreak.net","lolito.tk","lolnetwork.net","london.com","loobie.com","looksmart.co.uk","looksmart.com","looksmart.com.au","lookugly.com","lopezclub.com","lortemail.dk","louiskoo.com","lov.ru","love.com","love.cz","loveable.com","lovecat.com","lovefall.ml","lovefootball.com","loveforlostcats.com","lovelygirl.net","lovemail.com","lover-boy.com","lovergirl.com","lovesea.gq","lovethebroncos.com","lovethecowboys.com","lovetocook.net","lovetohike.com","loveyouforever.de","lovingjesus.com","lowandslow.com","lr7.us","lr78.com","lroid.com","lubovnik.ru","lukop.dk","luso.pt","luukku.com","luv2.us","luvrhino.com","lvie.com.sg","lvwebmail.com","lycos.co.uk","lycos.com","lycos.es","lycos.it","lycos.ne.jp","lycos.ru","lycosemail.com","lycosmail.com","m-a-i-l.com","m-hmail.com","m21.cc","m4.org","m4ilweb.info","mac.com","macbox.com","macbox.ru","macfreak.com","machinecandy.com","macmail.com","mad.scientist.com","madcrazy.com","madcreations.com","madonnafan.com","madrid.com","maennerversteherin.com","maennerversteherin.de","maffia.hu","magicmail.co.za","mahmoodweb.com","mail-awu.de","mail-box.cz","mail-center.com","mail-central.com","mail-easy.fr","mail-filter.com","mail-me.com","mail-page.com","mail-temporaire.fr","mail-tester.com","mail.austria.com","mail.az","mail.be","mail.bg","mail.bulgaria.com","mail.by","mail.byte.it","mail.co.za","mail.com","mail.com.tr","mail.ee","mail.entrepeneurmag.com","mail.freetown.com","mail.gr","mail.hitthebeach.com","mail.htl22.at","mail.kmsp.com","mail.md","mail.mezimages.net","mail.misterpinball.de","mail.nu","mail.org.uk","mail.pf","mail.pharmacy.com","mail.pt","mail.r-o-o-t.com","mail.ru","mail.salu.net","mail.sisna.com","mail.spaceports.com","mail.svenz.eu","mail.theboys.com","mail.usa.com","mail.vasarhely.hu","mail.vu","mail.wtf","mail.zp.ua","mail114.net","mail15.com","mail1a.de","mail1st.com","mail2007.com","mail21.cc","mail2aaron.com","mail2abby.com","mail2abc.com","mail2actor.com","mail2admiral.com","mail2adorable.com","mail2adoration.com","mail2adore.com","mail2adventure.com","mail2aeolus.com","mail2aether.com","mail2affection.com","mail2afghanistan.com","mail2africa.com","mail2agent.com","mail2aha.com","mail2ahoy.com","mail2aim.com","mail2air.com","mail2airbag.com","mail2airforce.com","mail2airport.com","mail2alabama.com","mail2alan.com","mail2alaska.com","mail2albania.com","mail2alcoholic.com","mail2alec.com","mail2alexa.com","mail2algeria.com","mail2alicia.com","mail2alien.com","mail2allan.com","mail2allen.com","mail2allison.com","mail2alpha.com","mail2alyssa.com","mail2amanda.com","mail2amazing.com","mail2amber.com","mail2america.com","mail2american.com","mail2andorra.com","mail2andrea.com","mail2andy.com","mail2anesthesiologist.com","mail2angela.com","mail2angola.com","mail2ann.com","mail2anna.com","mail2anne.com","mail2anthony.com","mail2anything.com","mail2aphrodite.com","mail2apollo.com","mail2april.com","mail2aquarius.com","mail2arabia.com","mail2arabic.com","mail2architect.com","mail2ares.com","mail2argentina.com","mail2aries.com","mail2arizona.com","mail2arkansas.com","mail2armenia.com","mail2army.com","mail2arnold.com","mail2art.com","mail2artemus.com","mail2arthur.com","mail2artist.com","mail2ashley.com","mail2ask.com","mail2astronomer.com","mail2athena.com","mail2athlete.com","mail2atlas.com","mail2atom.com","mail2attitude.com","mail2auction.com","mail2aunt.com","mail2australia.com","mail2austria.com","mail2azerbaijan.com","mail2baby.com","mail2bahamas.com","mail2bahrain.com","mail2ballerina.com","mail2ballplayer.com","mail2band.com","mail2bangladesh.com","mail2bank.com","mail2banker.com","mail2bankrupt.com","mail2baptist.com","mail2bar.com","mail2barbados.com","mail2barbara.com","mail2barter.com","mail2basketball.com","mail2batter.com","mail2beach.com","mail2beast.com","mail2beatles.com","mail2beauty.com","mail2becky.com","mail2beijing.com","mail2belgium.com","mail2belize.com","mail2ben.com","mail2bernard.com","mail2beth.com","mail2betty.com","mail2beverly.com","mail2beyond.com","mail2biker.com","mail2bill.com","mail2billionaire.com","mail2billy.com","mail2bio.com","mail2biologist.com","mail2black.com","mail2blackbelt.com","mail2blake.com","mail2blind.com","mail2blonde.com","mail2blues.com","mail2bob.com","mail2bobby.com","mail2bolivia.com","mail2bombay.com","mail2bonn.com","mail2bookmark.com","mail2boreas.com","mail2bosnia.com","mail2boston.com","mail2botswana.com","mail2bradley.com","mail2brazil.com","mail2breakfast.com","mail2brian.com","mail2bride.com","mail2brittany.com","mail2broker.com","mail2brook.com","mail2bruce.com","mail2brunei.com","mail2brunette.com","mail2brussels.com","mail2bryan.com","mail2bug.com","mail2bulgaria.com","mail2business.com","mail2buy.com","mail2ca.com","mail2california.com","mail2calvin.com","mail2cambodia.com","mail2cameroon.com","mail2canada.com","mail2cancer.com","mail2capeverde.com","mail2capricorn.com","mail2cardinal.com","mail2cardiologist.com","mail2care.com","mail2caroline.com","mail2carolyn.com","mail2casey.com","mail2cat.com","mail2caterer.com","mail2cathy.com","mail2catlover.com","mail2catwalk.com","mail2cell.com","mail2chad.com","mail2champaign.com","mail2charles.com","mail2chef.com","mail2chemist.com","mail2cherry.com","mail2chicago.com","mail2chile.com","mail2china.com","mail2chinese.com","mail2chocolate.com","mail2christian.com","mail2christie.com","mail2christmas.com","mail2christy.com","mail2chuck.com","mail2cindy.com","mail2clark.com","mail2classifieds.com","mail2claude.com","mail2cliff.com","mail2clinic.com","mail2clint.com","mail2close.com","mail2club.com","mail2coach.com","mail2coastguard.com","mail2colin.com","mail2college.com","mail2colombia.com","mail2color.com","mail2colorado.com","mail2columbia.com","mail2comedian.com","mail2composer.com","mail2computer.com","mail2computers.com","mail2concert.com","mail2congo.com","mail2connect.com","mail2connecticut.com","mail2consultant.com","mail2convict.com","mail2cook.com","mail2cool.com","mail2cory.com","mail2costarica.com","mail2country.com","mail2courtney.com","mail2cowboy.com","mail2cowgirl.com","mail2craig.com","mail2crave.com","mail2crazy.com","mail2create.com","mail2croatia.com","mail2cry.com","mail2crystal.com","mail2cuba.com","mail2culture.com","mail2curt.com","mail2customs.com","mail2cute.com","mail2cutey.com","mail2cynthia.com","mail2cyprus.com","mail2czechrepublic.com","mail2dad.com","mail2dale.com","mail2dallas.com","mail2dan.com","mail2dana.com","mail2dance.com","mail2dancer.com","mail2danielle.com","mail2danny.com","mail2darlene.com","mail2darling.com","mail2darren.com","mail2daughter.com","mail2dave.com","mail2dawn.com","mail2dc.com","mail2dealer.com","mail2deanna.com","mail2dearest.com","mail2debbie.com","mail2debby.com","mail2deer.com","mail2delaware.com","mail2delicious.com","mail2demeter.com","mail2democrat.com","mail2denise.com","mail2denmark.com","mail2dennis.com","mail2dentist.com","mail2derek.com","mail2desert.com","mail2devoted.com","mail2devotion.com","mail2diamond.com","mail2diana.com","mail2diane.com","mail2diehard.com","mail2dilemma.com","mail2dillon.com","mail2dinner.com","mail2dinosaur.com","mail2dionysos.com","mail2diplomat.com","mail2director.com","mail2dirk.com","mail2disco.com","mail2dive.com","mail2diver.com","mail2divorced.com","mail2djibouti.com","mail2doctor.com","mail2doglover.com","mail2dominic.com","mail2dominica.com","mail2dominicanrepublic.com","mail2don.com","mail2donald.com","mail2donna.com","mail2doris.com","mail2dorothy.com","mail2doug.com","mail2dough.com","mail2douglas.com","mail2dow.com","mail2downtown.com","mail2dream.com","mail2dreamer.com","mail2dude.com","mail2dustin.com","mail2dyke.com","mail2dylan.com","mail2earl.com","mail2earth.com","mail2eastend.com","mail2eat.com","mail2economist.com","mail2ecuador.com","mail2eddie.com","mail2edgar.com","mail2edwin.com","mail2egypt.com","mail2electron.com","mail2eli.com","mail2elizabeth.com","mail2ellen.com","mail2elliot.com","mail2elsalvador.com","mail2elvis.com","mail2emergency.com","mail2emily.com","mail2engineer.com","mail2english.com","mail2environmentalist.com","mail2eos.com","mail2eric.com","mail2erica.com","mail2erin.com","mail2erinyes.com","mail2eris.com","mail2eritrea.com","mail2ernie.com","mail2eros.com","mail2estonia.com","mail2ethan.com","mail2ethiopia.com","mail2eu.com","mail2europe.com","mail2eurus.com","mail2eva.com","mail2evan.com","mail2evelyn.com","mail2everything.com","mail2exciting.com","mail2expert.com","mail2fairy.com","mail2faith.com","mail2fanatic.com","mail2fancy.com","mail2fantasy.com","mail2farm.com","mail2farmer.com","mail2fashion.com","mail2fat.com","mail2feeling.com","mail2female.com","mail2fever.com","mail2fighter.com","mail2fiji.com","mail2filmfestival.com","mail2films.com","mail2finance.com","mail2finland.com","mail2fireman.com","mail2firm.com","mail2fisherman.com","mail2flexible.com","mail2florence.com","mail2florida.com","mail2floyd.com","mail2fly.com","mail2fond.com","mail2fondness.com","mail2football.com","mail2footballfan.com","mail2found.com","mail2france.com","mail2frank.com","mail2frankfurt.com","mail2franklin.com","mail2fred.com","mail2freddie.com","mail2free.com","mail2freedom.com","mail2french.com","mail2freudian.com","mail2friendship.com","mail2from.com","mail2fun.com","mail2gabon.com","mail2gabriel.com","mail2gail.com","mail2galaxy.com","mail2gambia.com","mail2games.com","mail2gary.com","mail2gavin.com","mail2gemini.com","mail2gene.com","mail2genes.com","mail2geneva.com","mail2george.com","mail2georgia.com","mail2gerald.com","mail2german.com","mail2germany.com","mail2ghana.com","mail2gilbert.com","mail2gina.com","mail2girl.com","mail2glen.com","mail2gloria.com","mail2goddess.com","mail2gold.com","mail2golfclub.com","mail2golfer.com","mail2gordon.com","mail2government.com","mail2grab.com","mail2grace.com","mail2graham.com","mail2grandma.com","mail2grandpa.com","mail2grant.com","mail2greece.com","mail2green.com","mail2greg.com","mail2grenada.com","mail2gsm.com","mail2guard.com","mail2guatemala.com","mail2guy.com","mail2hades.com","mail2haiti.com","mail2hal.com","mail2handhelds.com","mail2hank.com","mail2hannah.com","mail2harold.com","mail2harry.com","mail2hawaii.com","mail2headhunter.com","mail2heal.com","mail2heather.com","mail2heaven.com","mail2hebe.com","mail2hecate.com","mail2heidi.com","mail2helen.com","mail2hell.com","mail2help.com","mail2helpdesk.com","mail2henry.com","mail2hephaestus.com","mail2hera.com","mail2hercules.com","mail2herman.com","mail2hermes.com","mail2hespera.com","mail2hestia.com","mail2highschool.com","mail2hindu.com","mail2hip.com","mail2hiphop.com","mail2holland.com","mail2holly.com","mail2hollywood.com","mail2homer.com","mail2honduras.com","mail2honey.com","mail2hongkong.com","mail2hope.com","mail2horse.com","mail2hot.com","mail2hotel.com","mail2houston.com","mail2howard.com","mail2hugh.com","mail2human.com","mail2hungary.com","mail2hungry.com","mail2hygeia.com","mail2hyperspace.com","mail2hypnos.com","mail2ian.com","mail2ice-cream.com","mail2iceland.com","mail2idaho.com","mail2idontknow.com","mail2illinois.com","mail2imam.com","mail2in.com","mail2india.com","mail2indian.com","mail2indiana.com","mail2indonesia.com","mail2infinity.com","mail2intense.com","mail2iowa.com","mail2iran.com","mail2iraq.com","mail2ireland.com","mail2irene.com","mail2iris.com","mail2irresistible.com","mail2irving.com","mail2irwin.com","mail2isaac.com","mail2israel.com","mail2italian.com","mail2italy.com","mail2jackie.com","mail2jacob.com","mail2jail.com","mail2jaime.com","mail2jake.com","mail2jamaica.com","mail2james.com","mail2jamie.com","mail2jan.com","mail2jane.com","mail2janet.com","mail2janice.com","mail2japan.com","mail2japanese.com","mail2jasmine.com","mail2jason.com","mail2java.com","mail2jay.com","mail2jazz.com","mail2jed.com","mail2jeffrey.com","mail2jennifer.com","mail2jenny.com","mail2jeremy.com","mail2jerry.com","mail2jessica.com","mail2jessie.com","mail2jesus.com","mail2jew.com","mail2jeweler.com","mail2jim.com","mail2jimmy.com","mail2joan.com","mail2joann.com","mail2joanna.com","mail2jody.com","mail2joe.com","mail2joel.com","mail2joey.com","mail2john.com","mail2join.com","mail2jon.com","mail2jonathan.com","mail2jones.com","mail2jordan.com","mail2joseph.com","mail2josh.com","mail2joy.com","mail2juan.com","mail2judge.com","mail2judy.com","mail2juggler.com","mail2julian.com","mail2julie.com","mail2jumbo.com","mail2junk.com","mail2justin.com","mail2justme.com","mail2k.ru","mail2kansas.com","mail2karate.com","mail2karen.com","mail2karl.com","mail2karma.com","mail2kathleen.com","mail2kathy.com","mail2katie.com","mail2kay.com","mail2kazakhstan.com","mail2keen.com","mail2keith.com","mail2kelly.com","mail2kelsey.com","mail2ken.com","mail2kendall.com","mail2kennedy.com","mail2kenneth.com","mail2kenny.com","mail2kentucky.com","mail2kenya.com","mail2kerry.com","mail2kevin.com","mail2kim.com","mail2kimberly.com","mail2king.com","mail2kirk.com","mail2kiss.com","mail2kosher.com","mail2kristin.com","mail2kurt.com","mail2kuwait.com","mail2kyle.com","mail2kyrgyzstan.com","mail2la.com","mail2lacrosse.com","mail2lance.com","mail2lao.com","mail2larry.com","mail2latvia.com","mail2laugh.com","mail2laura.com","mail2lauren.com","mail2laurie.com","mail2lawrence.com","mail2lawyer.com","mail2lebanon.com","mail2lee.com","mail2leo.com","mail2leon.com","mail2leonard.com","mail2leone.com","mail2leslie.com","mail2letter.com","mail2liberia.com","mail2libertarian.com","mail2libra.com","mail2libya.com","mail2liechtenstein.com","mail2life.com","mail2linda.com","mail2linux.com","mail2lionel.com","mail2lipstick.com","mail2liquid.com","mail2lisa.com","mail2lithuania.com","mail2litigator.com","mail2liz.com","mail2lloyd.com","mail2lois.com","mail2lola.com","mail2london.com","mail2looking.com","mail2lori.com","mail2lost.com","mail2lou.com","mail2louis.com","mail2louisiana.com","mail2lovable.com","mail2love.com","mail2lucky.com","mail2lucy.com","mail2lunch.com","mail2lust.com","mail2luxembourg.com","mail2luxury.com","mail2lyle.com","mail2lynn.com","mail2madagascar.com","mail2madison.com","mail2madrid.com","mail2maggie.com","mail2mail4.com","mail2maine.com","mail2malawi.com","mail2malaysia.com","mail2maldives.com","mail2mali.com","mail2malta.com","mail2mambo.com","mail2man.com","mail2mandy.com","mail2manhunter.com","mail2mankind.com","mail2many.com","mail2marc.com","mail2marcia.com","mail2margaret.com","mail2margie.com","mail2marhaba.com","mail2maria.com","mail2marilyn.com","mail2marines.com","mail2mark.com","mail2marriage.com","mail2married.com","mail2marries.com","mail2mars.com","mail2marsha.com","mail2marshallislands.com","mail2martha.com","mail2martin.com","mail2marty.com","mail2marvin.com","mail2mary.com","mail2maryland.com","mail2mason.com","mail2massachusetts.com","mail2matt.com","mail2matthew.com","mail2maurice.com","mail2mauritania.com","mail2mauritius.com","mail2max.com","mail2maxwell.com","mail2maybe.com","mail2mba.com","mail2me4u.com","mail2mechanic.com","mail2medieval.com","mail2megan.com","mail2mel.com","mail2melanie.com","mail2melissa.com","mail2melody.com","mail2member.com","mail2memphis.com","mail2methodist.com","mail2mexican.com","mail2mexico.com","mail2mgz.com","mail2miami.com","mail2michael.com","mail2michelle.com","mail2michigan.com","mail2mike.com","mail2milan.com","mail2milano.com","mail2mildred.com","mail2milkyway.com","mail2millennium.com","mail2millionaire.com","mail2milton.com","mail2mime.com","mail2mindreader.com","mail2mini.com","mail2minister.com","mail2minneapolis.com","mail2minnesota.com","mail2miracle.com","mail2missionary.com","mail2mississippi.com","mail2missouri.com","mail2mitch.com","mail2model.com","mail2moldova.commail2molly.com","mail2mom.com","mail2monaco.com","mail2money.com","mail2mongolia.com","mail2monica.com","mail2montana.com","mail2monty.com","mail2moon.com","mail2morocco.com","mail2morpheus.com","mail2mors.com","mail2moscow.com","mail2moslem.com","mail2mouseketeer.com","mail2movies.com","mail2mozambique.com","mail2mp3.com","mail2mrright.com","mail2msright.com","mail2museum.com","mail2music.com","mail2musician.com","mail2muslim.com","mail2my.com","mail2myboat.com","mail2mycar.com","mail2mycell.com","mail2mygsm.com","mail2mylaptop.com","mail2mymac.com","mail2mypager.com","mail2mypalm.com","mail2mypc.com","mail2myphone.com","mail2myplane.com","mail2namibia.com","mail2nancy.com","mail2nasdaq.com","mail2nathan.com","mail2nauru.com","mail2navy.com","mail2neal.com","mail2nebraska.com","mail2ned.com","mail2neil.com","mail2nelson.com","mail2nemesis.com","mail2nepal.com","mail2netherlands.com","mail2network.com","mail2nevada.com","mail2newhampshire.com","mail2newjersey.com","mail2newmexico.com","mail2newyork.com","mail2newzealand.com","mail2nicaragua.com","mail2nick.com","mail2nicole.com","mail2niger.com","mail2nigeria.com","mail2nike.com","mail2no.com","mail2noah.com","mail2noel.com","mail2noelle.com","mail2normal.com","mail2norman.com","mail2northamerica.com","mail2northcarolina.com","mail2northdakota.com","mail2northpole.com","mail2norway.com","mail2notus.com","mail2noway.com","mail2nowhere.com","mail2nuclear.com","mail2nun.com","mail2ny.com","mail2oasis.com","mail2oceanographer.com","mail2ohio.com","mail2ok.com","mail2oklahoma.com","mail2oliver.com","mail2oman.com","mail2one.com","mail2onfire.com","mail2online.com","mail2oops.com","mail2open.com","mail2ophthalmologist.com","mail2optometrist.com","mail2oregon.com","mail2oscars.com","mail2oslo.com","mail2painter.com","mail2pakistan.com","mail2palau.com","mail2pan.com","mail2panama.com","mail2paraguay.com","mail2paralegal.com","mail2paris.com","mail2park.com","mail2parker.com","mail2party.com","mail2passion.com","mail2pat.com","mail2patricia.com","mail2patrick.com","mail2patty.com","mail2paul.com","mail2paula.com","mail2pay.com","mail2peace.com","mail2pediatrician.com","mail2peggy.com","mail2pennsylvania.com","mail2perry.com","mail2persephone.com","mail2persian.com","mail2peru.com","mail2pete.com","mail2peter.com","mail2pharmacist.com","mail2phil.com","mail2philippines.com","mail2phoenix.com","mail2phonecall.com","mail2phyllis.com","mail2pickup.com","mail2pilot.com","mail2pisces.com","mail2planet.com","mail2platinum.com","mail2plato.com","mail2pluto.com","mail2pm.com","mail2podiatrist.com","mail2poet.com","mail2poland.com","mail2policeman.com","mail2policewoman.com","mail2politician.com","mail2pop.com","mail2pope.com","mail2popular.com","mail2portugal.com","mail2poseidon.com","mail2potatohead.com","mail2power.com","mail2presbyterian.com","mail2president.com","mail2priest.com","mail2prince.com","mail2princess.com","mail2producer.com","mail2professor.com","mail2protect.com","mail2psychiatrist.com","mail2psycho.com","mail2psychologist.com","mail2qatar.com","mail2queen.com","mail2rabbi.com","mail2race.com","mail2racer.com","mail2rachel.com","mail2rage.com","mail2rainmaker.com","mail2ralph.com","mail2randy.com","mail2rap.com","mail2rare.com","mail2rave.com","mail2ray.com","mail2raymond.com","mail2realtor.com","mail2rebecca.com","mail2recruiter.com","mail2recycle.com","mail2redhead.com","mail2reed.com","mail2reggie.com","mail2register.com","mail2rent.com","mail2republican.com","mail2resort.com","mail2rex.com","mail2rhodeisland.com","mail2rich.com","mail2richard.com","mail2ricky.com","mail2ride.com","mail2riley.com","mail2rita.com","mail2rob.com","mail2robert.com","mail2roberta.com","mail2robin.com","mail2rock.com","mail2rocker.com","mail2rod.com","mail2rodney.com","mail2romania.com","mail2rome.com","mail2ron.com","mail2ronald.com","mail2ronnie.com","mail2rose.com","mail2rosie.com","mail2roy.com","mail2rss.org","mail2rudy.com","mail2rugby.com","mail2runner.com","mail2russell.com","mail2russia.com","mail2russian.com","mail2rusty.com","mail2ruth.com","mail2rwanda.com","mail2ryan.com","mail2sa.com","mail2sabrina.com","mail2safe.com","mail2sagittarius.com","mail2sail.com","mail2sailor.com","mail2sal.com","mail2salaam.com","mail2sam.com","mail2samantha.com","mail2samoa.com","mail2samurai.com","mail2sandra.com","mail2sandy.com","mail2sanfrancisco.com","mail2sanmarino.com","mail2santa.com","mail2sara.com","mail2sarah.com","mail2sat.com","mail2saturn.com","mail2saudi.com","mail2saudiarabia.com","mail2save.com","mail2savings.com","mail2school.com","mail2scientist.com","mail2scorpio.com","mail2scott.com","mail2sean.com","mail2search.com","mail2seattle.com","mail2secretagent.com","mail2senate.com","mail2senegal.com","mail2sensual.com","mail2seth.com","mail2sevenseas.com","mail2sexy.com","mail2seychelles.com","mail2shane.com","mail2sharon.com","mail2shawn.com","mail2ship.com","mail2shirley.com","mail2shoot.com","mail2shuttle.com","mail2sierraleone.com","mail2simon.com","mail2singapore.com","mail2single.com","mail2site.com","mail2skater.com","mail2skier.com","mail2sky.com","mail2sleek.com","mail2slim.com","mail2slovakia.com","mail2slovenia.com","mail2smile.com","mail2smith.com","mail2smooth.com","mail2soccer.com","mail2soccerfan.com","mail2socialist.com","mail2soldier.com","mail2somalia.com","mail2son.com","mail2song.com","mail2sos.com","mail2sound.com","mail2southafrica.com","mail2southamerica.com","mail2southcarolina.com","mail2southdakota.com","mail2southkorea.com","mail2southpole.com","mail2spain.com","mail2spanish.com","mail2spare.com","mail2spectrum.com","mail2splash.com","mail2sponsor.com","mail2sports.com","mail2srilanka.com","mail2stacy.com","mail2stan.com","mail2stanley.com","mail2star.com","mail2state.com","mail2stephanie.com","mail2steve.com","mail2steven.com","mail2stewart.com","mail2stlouis.com","mail2stock.com","mail2stockholm.com","mail2stockmarket.com","mail2storage.com","mail2store.com","mail2strong.com","mail2student.com","mail2studio.com","mail2studio54.com","mail2stuntman.com","mail2subscribe.com","mail2sudan.com","mail2superstar.com","mail2surfer.com","mail2suriname.com","mail2susan.com","mail2suzie.com","mail2swaziland.com","mail2sweden.com","mail2sweetheart.com","mail2swim.com","mail2swimmer.com","mail2swiss.com","mail2switzerland.com","mail2sydney.com","mail2sylvia.com","mail2syria.com","mail2taboo.com","mail2taiwan.com","mail2tajikistan.com","mail2tammy.com","mail2tango.com","mail2tanya.com","mail2tanzania.com","mail2tara.com","mail2taurus.com","mail2taxi.com","mail2taxidermist.com","mail2taylor.com","mail2taz.com","mail2teacher.com","mail2technician.com","mail2ted.com","mail2telephone.com","mail2teletubbie.com","mail2tenderness.com","mail2tennessee.com","mail2tennis.com","mail2tennisfan.com","mail2terri.com","mail2terry.com","mail2test.com","mail2texas.com","mail2thailand.com","mail2therapy.com","mail2think.com","mail2tickets.com","mail2tiffany.com","mail2tim.com","mail2time.com","mail2timothy.com","mail2tina.com","mail2titanic.com","mail2toby.com","mail2todd.com","mail2togo.com","mail2tom.com","mail2tommy.com","mail2tonga.com","mail2tony.com","mail2touch.com","mail2tourist.com","mail2tracey.com","mail2tracy.com","mail2tramp.com","mail2travel.com","mail2traveler.com","mail2travis.com","mail2trekkie.com","mail2trex.com","mail2triallawyer.com","mail2trick.com","mail2trillionaire.com","mail2troy.com","mail2truck.com","mail2trump.com","mail2try.com","mail2tunisia.com","mail2turbo.com","mail2turkey.com","mail2turkmenistan.com","mail2tv.com","mail2tycoon.com","mail2tyler.com","mail2u4me.com","mail2uae.com","mail2uganda.com","mail2uk.com","mail2ukraine.com","mail2uncle.com","mail2unsubscribe.com","mail2uptown.com","mail2uruguay.com","mail2usa.com","mail2utah.com","mail2uzbekistan.com","mail2v.com","mail2vacation.com","mail2valentines.com","mail2valerie.com","mail2valley.com","mail2vamoose.com","mail2vanessa.com","mail2vanuatu.com","mail2venezuela.com","mail2venous.com","mail2venus.com","mail2vermont.com","mail2vickie.com","mail2victor.com","mail2victoria.com","mail2vienna.com","mail2vietnam.com","mail2vince.com","mail2virginia.com","mail2virgo.com","mail2visionary.com","mail2vodka.com","mail2volleyball.com","mail2waiter.com","mail2wallstreet.com","mail2wally.com","mail2walter.com","mail2warren.com","mail2washington.com","mail2wave.com","mail2way.com","mail2waycool.com","mail2wayne.com","mail2webmaster.com","mail2webtop.com","mail2webtv.com","mail2weird.com","mail2wendell.com","mail2wendy.com","mail2westend.com","mail2westvirginia.com","mail2whether.com","mail2whip.com","mail2white.com","mail2whitehouse.com","mail2whitney.com","mail2why.com","mail2wilbur.com","mail2wild.com","mail2willard.com","mail2willie.com","mail2wine.com","mail2winner.com","mail2wired.com","mail2wisconsin.com","mail2woman.com","mail2wonder.com","mail2world.com","mail2worship.com","mail2wow.com","mail2www.com","mail2wyoming.com","mail2xfiles.com","mail2xox.com","mail2yachtclub.com","mail2yahalla.com","mail2yemen.com","mail2yes.com","mail2yugoslavia.com","mail2zack.com","mail2zambia.com","mail2zenith.com","mail2zephir.com","mail2zeus.com","mail2zipper.com","mail2zoo.com","mail2zoologist.com","mail2zurich.com","mail3000.com","mail333.com","mail4trash.com","mail4u.info","mail8.com","mailandftp.com","mailandnews.com","mailas.com","mailasia.com","mailbidon.com","mailbiz.biz","mailblocks.com","mailbolt.com","mailbomb.net","mailboom.com","mailbox.as","mailbox.co.za","mailbox.gr","mailbox.hu","mailbox72.biz","mailbox80.biz","mailbr.com.br","mailbucket.org","mailc.net","mailcan.com","mailcat.biz","mailcatch.com","mailcc.com","mailchoose.co","mailcity.com","mailclub.fr","mailclub.net","mailde.de","mailde.info","maildrop.cc","maildrop.gq","maildx.com","mailed.ro","maileimer.de","mailexcite.com","mailexpire.com","mailfa.tk","mailfly.com","mailforce.net","mailforspam.com","mailfree.gq","mailfreeonline.com","mailfreeway.com","mailfs.com","mailftp.com","mailgate.gr","mailgate.ru","mailgenie.net","mailguard.me","mailhaven.com","mailhood.com","mailimate.com","mailin8r.com","mailinatar.com","mailinater.com","mailinator.com","mailinator.net","mailinator.org","mailinator.us","mailinator2.com","mailinblack.com","mailincubator.com","mailingaddress.org","mailingweb.com","mailisent.com","mailismagic.com","mailite.com","mailmate.com","mailme.dk","mailme.gq","mailme.ir","mailme.lv","mailme24.com","mailmetrash.com","mailmight.com","mailmij.nl","mailmoat.com","mailms.com","mailnator.com","mailnesia.com","mailnew.com","mailnull.com","mailops.com","mailorg.org","mailoye.com","mailpanda.com","mailpick.biz","mailpokemon.com","mailpost.zzn.com","mailpride.com","mailproxsy.com","mailpuppy.com","mailquack.com","mailrock.biz","mailroom.com","mailru.com","mailsac.com","mailscrap.com","mailseal.de","mailsent.net","mailserver.ru","mailservice.ms","mailshell.com","mailshuttle.com","mailsiphon.com","mailslapping.com","mailsnare.net","mailstart.com","mailstartplus.com","mailsurf.com","mailtag.com","mailtemp.info","mailto.de","mailtome.de","mailtothis.com","mailtrash.net","mailtv.net","mailtv.tv","mailueberfall.de","mailup.net","mailwire.com","mailworks.org","mailzi.ru","mailzilla.com","mailzilla.org","makemetheking.com","maktoob.com","malayalamtelevision.net","malayalapathram.com","male.ru","maltesemail.com","mamber.net","manager.de","manager.in.th","mancity.net","manlymail.net","mantrafreenet.com","mantramail.com","mantraonline.com","manutdfans.com","manybrain.com","marchmail.com","marfino.net","margarita.ru","mariah-carey.ml.org","mariahc.com","marijuana.com","marijuana.nl","marketing.lu","marketingfanatic.com","marketweighton.com","married-not.com","marriedandlovingit.com","marry.ru","marsattack.com","martindalemail.com","martinguerre.net","mash4077.com","masrawy.com","matmail.com","mauimail.com","mauritius.com","maximumedge.com","maxleft.com","maxmail.co.uk","mayaple.ru","mbox.com.au","mbx.cc","mchsi.com","mcrmail.com","me-mail.hu","me.com","meanpeoplesuck.com","meatismurder.net","medical.net.au","medmail.com","medscape.com","meetingmall.com","mega.zik.dj","megago.com","megamail.pt","megapoint.com","mehrani.com","mehtaweb.com","meine-dateien.info","meine-diashow.de","meine-fotos.info","meine-urlaubsfotos.de","meinspamschutz.de","mekhong.com","melodymail.com","meloo.com","meltmail.com","members.student.com","menja.net","merda.flu.cc","merda.igg.biz","merda.nut.cc","merda.usa.cc","merseymail.com","mesra.net","message.hu","message.myspace.com","messagebeamer.de","messages.to","messagez.com","metacrawler.com","metalfan.com","metaping.com","metta.lk","mexicomail.com","mezimages.net","mfsa.ru","miatadriver.com","mierdamail.com","miesto.sk","mighty.co.za","migmail.net","migmail.pl","migumail.com","miho-nakayama.com","mikrotamanet.com","millionaireintraining.com","millionairemail.com","milmail.com","milmail.com15","mindless.com","mindspring.com","minermail.com","mini-mail.com","minister.com","ministry-of-silly-walks.de","mintemail.com","misery.net","misterpinball.de","mit.tc","mittalweb.com","mixmail.com","mjfrogmail.com","ml1.net","mlanime.com","mlb.bounce.ed10.net","mm.st","mmail.com","mns.ru","mo3gov.net","moakt.com","mobico.ru","mobilbatam.com","mobileninja.co.uk","mochamail.com","modemnet.net","modernenglish.com","modomail.com","mohammed.com","mohmal.com","moldova.cc","moldova.com","moldovacc.com","mom-mail.com","momslife.com","moncourrier.fr.nf","monemail.com","monemail.fr.nf","money.net","mongol.net","monmail.fr.nf","monsieurcinema.com","montevideo.com.uy","monumentmail.com","moomia.com","moonman.com","moose-mail.com","mor19.uu.gl","mortaza.com","mosaicfx.com","moscowmail.com","mosk.ru","most-wanted.com","mostlysunny.com","motorcyclefan.net","motormania.com","movemail.com","movieemail.net","movieluver.com","mox.pp.ua","mozartmail.com","mozhno.net","mp3haze.com","mp4.it","mr-potatohead.com","mrpost.com","mrspender.com","mscold.com","msgbox.com","msn.cn","msn.com","msn.nl","msx.ru","mt2009.com","mt2014.com","mt2015.com","mt2016.com","mttestdriver.com","muehlacker.tk","multiplechoices","mundomail.net","munich.com","music.com","music.com19","music.maigate.ru","musician.com","musician.org","musicscene.org","muskelshirt.de","muslim.com","muslimemail.com","muslimsonline.com","mutantweb.com","mvrht.com","my.com","my10minutemail.com","mybox.it","mycabin.com","mycampus.com","mycard.net.ua","mycity.com","mycleaninbox.net","mycool.com","mydomain.com","mydotcomaddress.com","myfairpoint.net","myfamily.com","myfastmail.com","myfunnymail.com","mygo.com","myiris.com","myjazzmail.com","mymac.ru","mymacmail.com","mymail-in.net","mymail.ro","mynamedot.com","mynet.com","mynetaddress.com","mynetstore.de","myotw.net","myownemail.com","myownfriends.com","mypacks.net","mypad.com","mypartyclip.de","mypersonalemail.com","myphantomemail.com","myplace.com","myrambler.ru","myrealbox.com","myremarq.com","mysamp.de","myself.com","myspaceinc.net","myspamless.com","mystupidjob.com","mytemp.email","mytempemail.com","mytempmail.com","mythirdage.com","mytrashmail.com","myway.com","myworldmail.com","n2.com","n2baseball.com","n2business.com","n2mail.com","n2soccer.com","n2software.com","nabc.biz","nabuma.com","nafe.com","nagarealm.com","nagpal.net","nakedgreens.com","name.com","nameplanet.com","nanaseaikawa.com","nandomail.com","naplesnews.net","naseej.com","nate.com","nativestar.net","nativeweb.net","naui.net","naver.com","navigator.lv","navy.org","naz.com","nc.rr.com","nc.ru","nchoicemail.com","neeva.net","nekto.com","nekto.net","nekto.ru","nemra1.com","nenter.com","neo.rr.com","neomailbox.com","nepwk.com","nervhq.org","nervmich.net","nervtmich.net","net-c.be","net-c.ca","net-c.cat","net-c.com","net-c.es","net-c.fr","net-c.it","net-c.lu","net-c.nl","net-c.pl","net-pager.net","net-shopping.com","net.tf","net4b.pt","net4you.at","netaddres.ru","netaddress.ru","netbounce.com","netbroadcaster.com","netby.dk","netc.eu","netc.fr","netc.it","netc.lu","netc.pl","netcenter-vn.net","netcity.ru","netcmail.com","netcourrier.com","netexecutive.com","netexpressway.com","netfirms.com","netgenie.com","netian.com","netizen.com.ar","netkushi.com","netlane.com","netlimit.com","netmail.kg","netmails.com","netmails.net","netman.ru","netmanor.com","netmongol.com","netnet.com.sg","netnoir.net","netpiper.com","netposta.net","netradiomail.com","netralink.com","netscape.net","netscapeonline.co.uk","netspace.net.au","netspeedway.com","netsquare.com","netster.com","nettaxi.com","nettemail.com","netterchef.de","netti.fi","netvigator.com","netzero.com","netzero.net","netzidiot.de","netzoola.com","neue-dateien.de","neuf.fr","neuro.md","neustreet.com","neverbox.com","newap.ru","newarbat.net","newmail.com","newmail.net","newmail.ru","newsboysmail.com","newyork.com","newyorkcity.com","nextmail.ru","nexxmail.com","nfmail.com","ngs.ru","nhmail.com","nice-4u.com","nicebush.com","nicegal.com","nicholastse.net","nicolastse.com","niepodam.pl","nightimeuk.com","nightmail.com","nightmail.ru","nikopage.com","nikulino.net","nimail.com","nincsmail.hu","ninfan.com","nirvanafan.com","nm.ru","nmail.cf","nnh.com","nnov.ru","no-spam.ws","no4ma.ru","noavar.com","noblepioneer.com","nogmailspam.info","nomail.pw","nomail.xl.cx","nomail2me.com","nomorespamemails.com","nonpartisan.com","nonspam.eu","nonspammer.de","nonstopcinema.com","norika-fujiwara.com","norikomail.com","northgates.net","nospam.ze.tc","nospam4.us","nospamfor.us","nospammail.net","nospamthanks.info","notmailinator.com","notsharingmy.info","notyouagain.com","novogireevo.net","novokosino.net","nowhere.org","nowmymail.com","ntelos.net","ntlhelp.net","ntlworld.com","ntscan.com","null.net","nullbox.info","numep.ru","nur-fuer-spam.de","nurfuerspam.de","nus.edu.sg","nuvse.com","nwldx.com","nxt.ru","ny.com","nybce.com","nybella.com","nyc.com","nycmail.com","nz11.com","nzoomail.com","o-tay.com","o2.co.uk","o2.pl","oaklandas-fan.com","oath.com","objectmail.com","obobbo.com","oceanfree.net","ochakovo.net","odaymail.com","oddpost.com","odmail.com","odnorazovoe.ru","office-dateien.de","office-email.com","officedomain.com","offroadwarrior.com","oi.com.br","oicexchange.com","oikrach.com","ok.kz","ok.net","ok.ru","okbank.com","okhuman.com","okmad.com","okmagic.com","okname.net","okuk.com","oldbuthealthy.com","oldies1041.com","oldies104mail.com","ole.com","olemail.com","oligarh.ru","olympist.net","olypmall.ru","omaninfo.com","omen.ru","ondikoi.com","onebox.com","onenet.com.ar","oneoffemail.com","oneoffmail.com","onet.com.pl","onet.eu","onet.pl","onewaymail.com","oninet.pt","onlatedotcom.info","online.de","online.ie","online.ms","online.nl","online.ru","onlinecasinogamblings.com","onlinewiz.com","onmicrosoft.com","onmilwaukee.com","onobox.com","onvillage.com","oopi.org","op.pl","opayq.com","opendiary.com","openmailbox.org","operafan.com","operamail.com","opoczta.pl","optician.com","optonline.net","optusnet.com.au","orange.fr","orange.net","orbitel.bg","ordinaryamerican.net","orgmail.net","orthodontist.net","osite.com.br","oso.com","otakumail.com","otherinbox.com","our-computer.com","our-office.com","our.st","ourbrisbane.com","ourklips.com","ournet.md","outel.com","outgun.com","outlawspam.com","outlook.at","outlook.be","outlook.cl","outlook.co.id","outlook.co.il","outlook.co.nz","outlook.co.th","outlook.com","outlook.com.au","outlook.com.br","outlook.com.gr","outlook.com.pe","outlook.com.tr","outlook.com.vn","outlook.cz","outlook.de","outlook.dk","outlook.es","outlook.fr","outlook.hu","outlook.ie","outlook.in","outlook.it","outlook.jp","outlook.kr","outlook.lv","outlook.my","outlook.nl","outlook.ph","outlook.pt","outlook.sa","outlook.sg","outlook.sk","outloook.com","over-the-rainbow.com","ovi.com","ovpn.to","owlpic.com","ownmail.net","ozbytes.net.au","ozemail.com.au","ozz.ru","pacbell.net","pacific-ocean.com","pacific-re.com","pacificwest.com","packersfan.com","pagina.de","pagons.org","paidforsurf.com","pakistanmail.com","pakistanoye.com","palestinemail.com","pancakemail.com","pandawa.com","pandora.be","paradiseemail.com","paris.com","parkjiyoon.com","parrot.com","parsmail.com","partlycloudy.com","partybombe.de","partyheld.de","partynight.at","parvazi.com","passwordmail.com","pathfindermail.com","patmail.com","patra.net","pconnections.net","pcpostal.com","pcsrock.com","pcusers.otherinbox.com","peachworld.com","pechkin.ru","pediatrician.com","pekklemail.com","pemail.net","penpen.com","peoplepc.com","peopleweb.com","pepbot.com","perfectmail.com","perovo.net","perso.be","personal.ro","personales.com","petlover.com","petml.com","petr.ru","pettypool.com","pezeshkpour.com","pfui.ru","phayze.com","phone.net","photo-impact.eu","photographer.net","phpbb.uu.gl","phreaker.net","phus8kajuspa.cu.cc","physicist.net","pianomail.com","pickupman.com","picusnet.com","piercedallover.com","pigeonportal.com","pigmail.net","pigpig.net","pilotemail.com","pimagop.com","pinoymail.com","piracha.net","pisem.net","pjjkp.com","planet-mail.com","planet.nl","planetaccess.com","planetall.com","planetarymotion.net","planetdirect.com","planetearthinter.net","planetmail.com","planetmail.net","planetout.com","plasa.com","playersodds.com","playful.com","playstation.sony.com","plexolan.de","pluno.com","plus.com","plus.google.com","plusmail.com.br","pmail.net","pobox.com","pobox.hu","pobox.ru","pobox.sk","pochta.by","pochta.ru","pochta.ws","pochtamt.ru","poczta.fm","poczta.onet.pl","poetic.com","pokemail.net","pokemonpost.com","pokepost.com","polandmail.com","polbox.com","policeoffice.com","politician.com","politikerclub.de","polizisten-duzer.de","polyfaust.com","poofy.org","poohfan.com","pookmail.com","pool-sharks.com","poond.com","pop3.ru","popaccount.com","popmail.com","popsmail.com","popstar.com","populus.net","portableoffice.com","portugalmail.com","portugalmail.pt","portugalnet.com","positive-thinking.com","post.com","post.cz","post.sk","posta.net","posta.ro","posta.rosativa.ro.org","postaccesslite.com","postafiok.hu","postafree.com","postaweb.com","poste.it","postfach.cc","postinbox.com","postino.ch","postino.it","postmark.net","postmaster.co.uk","postmaster.twitter.com","postpro.net","pousa.com","powerdivas.com","powerfan.com","pp.inet.fi","praize.com","pray247.com","predprinimatel.ru","premium-mail.fr","premiumproducts.com","premiumservice.com","prepodavatel.ru","presidency.com","presnya.net","press.co.jp","prettierthanher.com","priest.com","primposta.com","primposta.hu","printesamargareta.ro","privacy.net","privatdemail.net","privy-mail.com","privymail.de","pro.hu","probemail.com","prodigy.net","prodigy.net.mx","professor.ru","progetplus.it","programist.ru","programmer.net","programozo.hu","proinbox.com","project2k.com","prokuratura.ru","prolaunch.com","promessage.com","prontomail.com","prontomail.compopulus.net","protestant.com","protonmail.com","proxymail.eu","prtnx.com","prydirect.info","psv-supporter.com","ptd.net","public-files.de","public.usa.com","publicist.com","pulp-fiction.com","punkass.com","puppy.com.my","purinmail.com","purpleturtle.com","put2.net","putthisinyourspamdatabase.com","pwrby.com","q.com","qatar.io","qatarmail.com","qdice.com","qip.ru","qmail.com","qprfans.com","qq.com","qrio.com","quackquack.com","quake.ru","quakemail.com","qualityservice.com","quantentunnel.de","qudsmail.com","quepasa.com","quickhosts.com","quickinbox.com","quickmail.nl","quickmail.ru","quicknet.nl","quickwebmail.com","quiklinks.com","quikmail.com","qv7.info","qwest.net","qwestoffice.net","r-o-o-t.com","r7.com","raakim.com","racedriver.com","racefanz.com","racingfan.com.au","racingmail.com","radicalz.com","radiku.ye.vc","radiologist.net","ragingbull.com","ralib.com","rambler.ru","ranmamail.com","rastogi.net","ratt-n-roll.com","rattle-snake.com","raubtierbaendiger.de","ravearena.com","ravefan.com","ravemail.co.za","ravemail.com","razormail.com","rccgmail.org","rcn.com","rcpt.at","realemail.net","realestatemail.net","reality-concept.club","reallyfast.biz","reallyfast.info","reallymymail.com","realradiomail.com","realtyagent.com","realtyalerts.ca","reborn.com","recode.me","reconmail.com","recursor.net","recycledmail.com","recycler.com","recyclermail.com","rediff.com","rediffmail.com","rediffmailpro.com","rednecks.com","redseven.de","redsfans.com","redwhitearmy.com","regbypass.com","reggaefan.com","reggafan.com","regiononline.com","registerednurses.com","regspaces.tk","reincarnate.com","relia.com","reliable-mail.com","religious.com","remail.ga","renren.com","repairman.com","reply.hu","reply.ticketmaster.com","represantive.com","representative.com","rescueteam.com","resgedvgfed.tk","resource.calendar.google.com","resumemail.com","retailfan.com","rexian.com","rezai.com","rhyta.com","richmondhill.com","rickymail.com","rin.ru","ring.by","riopreto.com.br","rklips.com","rmqkr.net","rn.com","ro.ru","roadrunner.com","roanokemail.com","rock.com","rocketmail.com","rocketship.com","rockfan.com","rodrun.com","rogers.com","rojname.com","rol.ro","rome.com","romymichele.com","roosh.com","rootprompt.org","rotfl.com","roughnet.com","royal.net","rpharmacist.com","rr.com","rrohio.com","rsub.com","rt.nl","rtrtr.com","ru.ru","rubyridge.com","runbox.com","rushpost.com","ruttolibero.com","rvshop.com","rxdoc.biz","s-mail.com","s0ny.net","sabreshockey.com","sacbeemail.com","saeuferleber.de","safarimail.com","safe-mail.net","safersignup.de","safetymail.info","safetypost.de","safrica.com","sagra.lu","sagra.lu.lu","sagra.lumarketing.lu","sags-per-mail.de","sailormoon.com","saint-mike.org","saintly.com","saintmail.net","sale-sale-sale.com","salehi.net","salesperson.net","samerica.com","samilan.net","samiznaetekogo.net","sammimail.com","sanchezsharks.com","sandelf.de","sanfranmail.com","sanook.com","sanriotown.com","santanmail.com","sapo.pt","sativa.ro.org","saturnfans.com","saturnperformance.com","saudia.com","savecougars.com","savelife.ml","saveowls.com","sayhi.net","saynotospams.com","sbcglbal.net","sbcglobal.com","sbcglobal.net","scandalmail.com","scanova.in","scanova.io","scarlet.nl","scfn.net","schafmail.de","schizo.com","schmusemail.de","schoolemail.com","schoolmail.com","schoolsucks.com","schreib-doch-mal-wieder.de","schrott-email.de","schweiz.org","sci.fi","science.com.au","scientist.com","scifianime.com","scotland.com","scotlandmail.com","scottishmail.co.uk","scottishtories.com","scottsboro.org","scrapbookscrapbook.com","scubadiving.com","seanet.com","search.ua","search417.com","searchwales.com","sebil.com","seckinmail.com","secret-police.com","secretarias.com","secretary.net","secretemail.de","secretservices.net","secure-mail.biz","secure-mail.cc","seductive.com","seekstoyboy.com","seguros.com.br","sekomaonline.com","selfdestructingmail.com","sellingspree.com","send.hu","sendmail.ru","sendme.cz","sendspamhere.com","senseless-entertainment.com","sent.as","sent.at","sent.com","sentrismail.com","serga.com.ar","servemymail.com","servermaps.net","services391.com","sesmail.com","sexmagnet.com","seznam.cz","sfr.fr","shahweb.net","shaniastuff.com","shared-files.de","sharedmailbox.org","sharewaredevelopers.com","sharklasers.com","sharmaweb.com","shaw.ca","she.com","shellov.net","shieldedmail.com","shieldemail.com","shiftmail.com","shinedyoureyes.com","shitaway.cf","shitaway.cu.cc","shitaway.ga","shitaway.gq","shitaway.ml","shitaway.tk","shitaway.usa.cc","shitmail.de","shitmail.me","shitmail.org","shitware.nl","shmeriously.com","shockinmytown.cu.cc","shootmail.com","shortmail.com","shortmail.net","shotgun.hu","showfans.com","showslow.de","shqiptar.eu","shuf.com","sialkotcity.com","sialkotian.com","sialkotoye.com","sibmail.com","sify.com","sigaret.net","silkroad.net","simbamail.fm","sina.cn","sina.com","sinamail.com","singapore.com","singles4jesus.com","singmail.com","singnet.com.sg","singpost.com","sinnlos-mail.de","sirindia.com","siteposter.net","skafan.com","skeefmail.com","skim.com","skizo.hu","skrx.tk","skunkbox.com","sky.com","skynet.be","slamdunkfan.com","slapsfromlastnight.com","slaskpost.se","slave-auctions.net","slickriffs.co.uk","slingshot.com","slippery.email","slipry.net","slo.net","slotter.com","sm.westchestergov.com","smap.4nmv.ru","smapxsmap.net","smashmail.de","smellfear.com","smellrear.com","smileyface.comsmithemail.net","sminkymail.com","smoothmail.com","sms.at","smtp.ru","snail-mail.net","snail-mail.ney","snakebite.com","snakemail.com","sndt.net","sneakemail.com","sneakmail.de","snet.net","sniper.hu","snkmail.com","snoopymail.com","snowboarding.com","snowdonia.net","so-simple.org","socamail.com","socceraccess.com","socceramerica.net","soccermail.com","soccermomz.com","social-mailer.tk","socialworker.net","sociologist.com","sofimail.com","sofort-mail.de","sofortmail.de","softhome.net","sogetthis.com","sogou.com","sohu.com","sokolniki.net","sol.dk","solar-impact.pro","solcon.nl","soldier.hu","solution4u.com","solvemail.info","songwriter.net","sonnenkinder.org","soodomail.com","soodonims.com","soon.com","soulfoodcookbook.com","soundofmusicfans.com","southparkmail.com","sovsem.net","sp.nl","space-bank.com","space-man.com","space-ship.com","space-travel.com","space.com","spaceart.com","spacebank.com","spacemart.com","spacetowns.com","spacewar.com","spainmail.com","spam.2012-2016.ru","spam4.me","spamail.de","spamarrest.com","spamavert.com","spambob.com","spambob.net","spambob.org","spambog.com","spambog.de","spambog.net","spambog.ru","spambooger.com","spambox.info","spambox.us","spamcannon.com","spamcannon.net","spamcero.com","spamcon.org","spamcorptastic.com","spamcowboy.com","spamcowboy.net","spamcowboy.org","spamday.com","spamdecoy.net","spameater.com","spameater.org","spamex.com","spamfree.eu","spamfree24.com","spamfree24.de","spamfree24.info","spamfree24.net","spamfree24.org","spamgoes.in","spamgourmet.com","spamgourmet.net","spamgourmet.org","spamherelots.com","spamhereplease.com","spamhole.com","spamify.com","spaminator.de","spamkill.info","spaml.com","spaml.de","spammotel.com","spamobox.com","spamoff.de","spamslicer.com","spamspot.com","spamstack.net","spamthis.co.uk","spamtroll.net","spankthedonkey.com","spartapiet.com","spazmail.com","speed.1s.fr","speedemail.net","speedpost.net","speedrules.com","speedrulz.com","speedy.com.ar","speedymail.org","sperke.net","spils.com","spinfinder.com","spiritseekers.com","spl.at","spoko.pl","spoofmail.de","sportemail.com","sportmail.ru","sportsmail.com","sporttruckdriver.com","spray.no","spray.se","spybox.de","spymac.com","sraka.xyz","srilankan.net","ssl-mail.com","st-davids.net","stade.fr","stalag13.com","standalone.net","starbuzz.com","stargateradio.com","starmail.com","starmail.org","starmedia.com","starplace.com","starspath.com","start.com.au","starting-point.com","startkeys.com","startrekmail.com","starwars-fans.com","stealthmail.com","stillchronic.com","stinkefinger.net","stipte.nl","stockracer.com","stockstorm.com","stoned.com","stones.com","stop-my-spam.pp.ua","stopdropandroll.com","storksite.com","streber24.de","streetwisemail.com","stribmail.com","strompost.com","strongguy.com","student.su","studentcenter.org","stuffmail.de","subnetwork.com","subram.com","sudanmail.net","sudolife.me","sudolife.net","sudomail.biz","sudomail.com","sudomail.net","sudoverse.com","sudoverse.net","sudoweb.net","sudoworld.com","sudoworld.net","sueddeutsche.de","suhabi.com","suisse.org","sukhumvit.net","sul.com.br","sunmail1.com","sunpoint.net","sunrise-sunset.com","sunsgame.com","sunumail.sn","suomi24.fi","super-auswahl.de","superdada.com","supereva.it","supergreatmail.com","supermail.ru","supermailer.jp","superman.ru","superposta.com","superrito.com","superstachel.de","surat.com","suremail.info","surf3.net","surfree.com","surfsupnet.net","surfy.net","surgical.net","surimail.com","survivormail.com","susi.ml","sviblovo.net","svk.jp","swbell.net","sweb.cz","swedenmail.com","sweetville.net","sweetxxx.de","swift-mail.com","swiftdesk.com","swingeasyhithard.com","swingfan.com","swipermail.zzn.com","swirve.com","swissinfo.org","swissmail.com","swissmail.net","switchboardmail.com","switzerland.org","sx172.com","sympatico.ca","syom.com","syriamail.com","t-online.de","t.psh.me","t2mail.com","tafmail.com","takoe.com","takoe.net","takuyakimura.com","talk21.com","talkcity.com","talkinator.com","talktalk.co.uk","tamb.ru","tamil.com","tampabay.rr.com","tangmonkey.com","tankpolice.com","taotaotano.com","tatanova.com","tattooedallover.com","tattoofanatic.com","tbwt.com","tcc.on.ca","tds.net","teacher.com","teachermail.net","teachers.org","teamdiscovery.com","teamtulsa.net","tech-center.com","tech4peace.org","techemail.com","techie.com","technisamail.co.za","technologist.com","technologyandstocks.com","techpointer.com","techscout.com","techseek.com","techsniper.com","techspot.com","teenagedirtbag.com","teewars.org","tele2.nl","telebot.com","telebot.net","telefonica.net","teleline.es","telenet.be","telepac.pt","telerymd.com","teleserve.dynip.com","teletu.it","teleworm.com","teleworm.us","telfort.nl","telfortglasvezel.nl","telinco.net","telkom.net","telpage.net","telstra.com","telstra.com.au","temp-mail.com","temp-mail.de","temp-mail.org","temp-mail.ru","temp.headstrong.de","tempail.com","tempe-mail.com","tempemail.biz","tempemail.co.za","tempemail.com","tempemail.net","tempinbox.co.uk","tempinbox.com","tempmail.eu","tempmail.it","tempmail.us","tempmail2.com","tempmaildemo.com","tempmailer.com","tempmailer.de","tempomail.fr","temporarioemail.com.br","temporaryemail.net","temporaryemail.us","temporaryforwarding.com","temporaryinbox.com","temporarymailaddress.com","tempthe.net","tempymail.com","temtulsa.net","tenchiclub.com","tenderkiss.com","tennismail.com","terminverpennt.de","terra.cl","terra.com","terra.com.ar","terra.com.br","terra.com.pe","terra.es","test.com","test.de","tfanus.com.er","tfbnw.net","tfz.net","tgasa.ru","tgma.ru","tgngu.ru","tgu.ru","thai.com","thaimail.com","thaimail.net","thanksnospam.info","thankyou2010.com","thc.st","the-african.com","the-airforce.com","the-aliens.com","the-american.com","the-animal.com","the-army.com","the-astronaut.com","the-beauty.com","the-big-apple.com","the-biker.com","the-boss.com","the-brazilian.com","the-canadian.com","the-canuck.com","the-captain.com","the-chinese.com","the-country.com","the-cowboy.com","the-davis-home.com","the-dutchman.com","the-eagles.com","the-englishman.com","the-fastest.net","the-fool.com","the-frenchman.com","the-galaxy.net","the-genius.com","the-gentleman.com","the-german.com","the-gremlin.com","the-hooligan.com","the-italian.com","the-japanese.com","the-lair.com","the-madman.com","the-mailinglist.com","the-marine.com","the-master.com","the-mexican.com","the-ministry.com","the-monkey.com","the-newsletter.net","the-pentagon.com","the-police.com","the-prayer.com","the-professional.com","the-quickest.com","the-russian.com","the-seasiders.com","the-snake.com","the-spaceman.com","the-stock-market.com","the-student.net","the-whitehouse.net","the-wild-west.com","the18th.com","thecoolguy.com","thecriminals.com","thedoghousemail.com","thedorm.com","theend.hu","theglobe.com","thegolfcourse.com","thegooner.com","theheadoffice.com","theinternetemail.com","thelanddownunder.com","thelimestones.com","themail.com","themillionare.net","theoffice.net","theplate.com","thepokerface.com","thepostmaster.net","theraces.com","theracetrack.com","therapist.net","thereisnogod.com","thesimpsonsfans.com","thestreetfighter.com","theteebox.com","thewatercooler.com","thewebpros.co.uk","thewizzard.com","thewizzkid.com","thexyz.ca","thexyz.cn","thexyz.com","thexyz.es","thexyz.fr","thexyz.in","thexyz.mobi","thexyz.net","thexyz.org","thezhangs.net","thirdage.com","thisgirl.com","thisisnotmyrealemail.com","thismail.net","thoic.com","thraml.com","thrott.com","throwam.com","throwawayemailaddress.com","thundermail.com","tibetemail.com","tidni.com","tilien.com","timein.net","timormail.com","tin.it","tipsandadvice.com","tiran.ru","tiscali.at","tiscali.be","tiscali.co.uk","tiscali.it","tiscali.lu","tiscali.se","tittbit.in","tizi.com","tkcity.com","tlcfan.com","tmail.ws","tmailinator.com","tmicha.net","toast.com","toke.com","tokyo.com","tom.com","toolsource.com","toomail.biz","toothfairy.com","topchat.com","topgamers.co.uk","topletter.com","topmail-files.de","topmail.com.ar","topranklist.de","topsurf.com","topteam.bg","toquedequeda.com","torba.com","torchmail.com","torontomail.com","tortenboxer.de","totalmail.com","totalmail.de","totalmusic.net","totalsurf.com","toughguy.net","townisp.com","tpg.com.au","tradermail.info","trainspottingfan.com","trash-amil.com","trash-mail.at","trash-mail.com","trash-mail.de","trash-mail.ga","trash-mail.ml","trash2009.com","trash2010.com","trash2011.com","trashdevil.com","trashdevil.de","trashemail.de","trashmail.at","trashmail.com","trashmail.de","trashmail.me","trashmail.net","trashmail.org","trashmailer.com","trashymail.com","trashymail.net","travel.li","trayna.com","trbvm.com","trbvn.com","trevas.net","trialbytrivia.com","trialmail.de","trickmail.net","trillianpro.com","trimix.cn","tritium.net","trjam.net","trmailbox.com","tropicalstorm.com","truckeremail.net","truckers.com","truckerz.com","truckracer.com","truckracers.com","trust-me.com","truth247.com","truthmail.com","tsamail.co.za","ttml.co.in","tulipsmail.net","tunisiamail.com","turboprinz.de","turboprinzessin.de","turkey.com","turual.com","tushino.net","tut.by","tvcablenet.be","tverskie.net","tverskoe.net","tvnet.lv","tvstar.com","twc.com","twcny.com","twentylove.com","twinmail.de","twinstarsmail.com","tx.rr.com","tycoonmail.com","tyldd.com","typemail.com","tyt.by","u14269.ml","u2club.com","ua.fm","uae.ac","uaemail.com","ubbi.com","ubbi.com.br","uboot.com","uggsrock.com","uk2.net","uk2k.com","uk2net.com","uk7.net","uk8.net","ukbuilder.com","ukcool.com","ukdreamcast.com","ukmail.org","ukmax.com","ukr.net","ukrpost.net","ukrtop.com","uku.co.uk","ultapulta.com","ultimatelimos.com","ultrapostman.com","umail.net","ummah.org","umpire.com","unbounded.com","underwriters.com","unforgettable.com","uni.de","uni.de.de","uni.demailto.de","unican.es","unihome.com","universal.pt","uno.ee","uno.it","unofree.it","unomail.com","unterderbruecke.de","uogtritons.com","uol.com.ar","uol.com.br","uol.com.co","uol.com.mx","uol.com.ve","uole.com","uole.com.ve","uolmail.com","uomail.com","upc.nl","upcmail.nl","upf.org","upliftnow.com","uplipht.com","uraniomail.com","ureach.com","urgentmail.biz","uroid.com","us.af","usa.com","usa.net","usaaccess.net","usanetmail.com","used-product.fr","userbeam.com","usermail.com","username.e4ward.com","userzap.com","usma.net","usmc.net","uswestmail.net","uymail.com","uyuyuy.com","uzhe.net","v-sexi.com","v8email.com","vaasfc4.tk","vahoo.com","valemail.net","valudeal.net","vampirehunter.com","varbizmail.com","vcmail.com","velnet.co.uk","velnet.com","velocall.com","veloxmail.com.br","venompen.com","verizon.net","verizonmail.com","verlass-mich-nicht.de","versatel.nl","verticalheaven.com","veryfast.biz","veryrealemail.com","veryspeedy.net","vfemail.net","vickaentb.tk","videotron.ca","viditag.com","viewcastmedia.com","viewcastmedia.net","vinbazar.com","violinmakers.co.uk","vip.126.com","vip.21cn.com","vip.citiz.net","vip.gr","vip.onet.pl","vip.qq.com","vip.sina.com","vipmail.ru","viralplays.com","virgilio.it","virgin.net","virginbroadband.com.au","virginmedia.com","virtual-mail.com","virtualactive.com","virtualguam.com","virtualmail.com","visitmail.com","visitweb.com","visto.com","visualcities.com","vivavelocity.com","vivianhsu.net","viwanet.ru","vjmail.com","vjtimail.com","vkcode.ru","vlcity.ru","vlmail.com","vnet.citiz.net","vnn.vn","vnukovo.net","vodafone.nl","vodafonethuis.nl","voila.fr","volcanomail.com","vollbio.de","volloeko.de","vomoto.com","voo.be","vorsicht-bissig.de","vorsicht-scharf.de","vote-democrats.com","vote-hillary.com","vote-republicans.com","vote4gop.org","votenet.com","vovan.ru","vp.pl","vpn.st","vr9.com","vsimcard.com","vubby.com","vyhino.net","w3.to","wahoye.com","walala.org","wales2000.net","walkmail.net","walkmail.ru","walla.co.il","wam.co.za","wanaboo.com","wanadoo.co.uk","wanadoo.es","wanadoo.fr","wapda.com","war-im-urlaub.de","warmmail.com","warpmail.net","warrior.hu","wasteland.rfc822.org","watchmail.com","waumail.com","wazabi.club","wbdet.com","wearab.net","web-contact.info","web-emailbox.eu","web-ideal.fr","web-mail.com.ar","web-mail.pp.ua","web-police.com","web.de","webaddressbook.com","webadicta.org","webave.com","webbworks.com","webcammail.com","webcity.ca","webcontact-france.eu","webdream.com","webemail.me","webemaillist.com","webinbox.com","webindia123.com","webjump.com","webm4il.info","webmail.bellsouth.net","webmail.blue","webmail.co.yu","webmail.co.za","webmail.fish","webmail.hu","webmail.lawyer","webmail.ru","webmail.wiki","webmails.com","webmailv.com","webname.com","webprogramming.com","webskulker.com","webstation.com","websurfer.co.za","webtopmail.com","webtribe.net","webuser.in","wee.my","weedmail.com","weekmail.com","weekonline.com","wefjo.grn.cc","weg-werf-email.de","wegas.ru","wegwerf-emails.de","wegwerfadresse.de","wegwerfemail.com","wegwerfemail.de","wegwerfmail.de","wegwerfmail.info","wegwerfmail.net","wegwerfmail.org","wegwerpmailadres.nl","wehshee.com","weibsvolk.de","weibsvolk.org","weinenvorglueck.de","welsh-lady.com","wesleymail.com","westnet.com","westnet.com.au","wetrainbayarea.com","wfgdfhj.tk","wh4f.org","whale-mail.com","whartontx.com","whatiaas.com","whatpaas.com","wheelweb.com","whipmail.com","whoever.com","wholefitness.com","whoopymail.com","whtjddn.33mail.com","whyspam.me","wickedmail.com","wickmail.net","wideopenwest.com","wildmail.com","wilemail.com","will-hier-weg.de","willhackforfood.biz","willselfdestruct.com","windowslive.com","windrivers.net","windstream.com","windstream.net","winemaven.info","wingnutz.com","winmail.com.au","winning.com","winrz.com","wir-haben-nachwuchs.de","wir-sind-cool.org","wirsindcool.de","witty.com","wiz.cc","wkbwmail.com","wmail.cf","wo.com.cn","woh.rr.com","wolf-web.com","wolke7.net","wollan.info","wombles.com","women-at-work.org","women-only.net","wonder-net.com","wongfaye.com","wooow.it","work4teens.com","worker.com","workmail.co.za","workmail.com","worldbreak.com","worldemail.com","worldmailer.com","worldnet.att.net","wormseo.cn","wosaddict.com","wouldilie.com","wovz.cu.cc","wow.com","wowgirl.com","wowmail.com","wowway.com","wp.pl","wptamail.com","wrestlingpages.com","wrexham.net","writeme.com","writemeback.com","writeremail.com","wronghead.com","wrongmail.com","wtvhmail.com","wwdg.com","www.com","www.e4ward.com","www.mailinator.com","www2000.net","wwwnew.eu","wx88.net","wxs.net","wyrm.supernews.com","x-mail.net","x-networks.net","x.ip6.li","x5g.com","xagloo.com","xaker.ru","xd.ae","xemaps.com","xents.com","xing886.uu.gl","xmail.com","xmaily.com","xmastime.com","xmenfans.com","xms.nl","xmsg.com","xoom.com","xoommail.com","xoxox.cc","xoxy.net","xpectmore.com","xpressmail.zzn.com","xs4all.nl","xsecurity.org","xsmail.com","xtra.co.nz","xtram.com","xuno.com","xww.ro","xy9ce.tk","xyz.am","xyzfree.net","xzapmail.com","y7mail.com","ya.ru","yada-yada.com","yaho.com","yahoo.ae","yahoo.at","yahoo.be","yahoo.ca","yahoo.ch","yahoo.cn","yahoo.co","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.jp","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.cn","yahoo.com.co","yahoo.com.hk","yahoo.com.is","yahoo.com.mx","yahoo.com.my","yahoo.com.ph","yahoo.com.ru","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.jp","yahoo.net","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.ru","yahoo.se","yahoofs.com","yahoomail.com","yalla.com","yalla.com.lb","yalook.com","yam.com","yandex.com","yandex.mail","yandex.pl","yandex.ru","yandex.ua","yapost.com","yapped.net","yawmail.com","yclub.com","yeah.net","yebox.com","yeehaa.com","yehaa.com","yehey.com","yemenmail.com","yep.it","yepmail.net","yert.ye.vc","yesbox.net","yesey.net","yeswebmaster.com","ygm.com","yifan.net","ymail.com","ynnmail.com","yogamaven.com","yogotemail.com","yomail.info","yopmail.com","yopmail.fr","yopmail.net","yopmail.org","yopmail.pp.ua","yopolis.com","yopweb.com","youareadork.com","youmailr.com","youpy.com","your-house.com","your-mail.com","yourdomain.com","yourinbox.com","yourlifesucks.cu.cc","yourlover.net","yournightmare.com","yours.com","yourssincerely.com","yourteacher.net","yourwap.com","youthfire.com","youthpost.com","youvegotmail.net","yuuhuu.net","yuurok.com","yyhmail.com","z1p.biz","z6.com","z9mail.com","za.com","zahadum.com","zaktouni.fr","zcities.com","zdnetmail.com","zdorovja.net","zeeks.com","zeepost.nl","zehnminuten.de","zehnminutenmail.de","zensearch.com","zensearch.net","zerocrime.org","zetmail.com","zhaowei.net","zhouemail.510520.org","ziggo.nl","zing.vn","zionweb.org","zip.net","zipido.com","ziplip.com","zipmail.com","zipmail.com.br","zipmax.com","zippymail.info","zmail.pt","zmail.ru","zoemail.com","zoemail.net","zoemail.org","zoho.com","zomg.info","zonai.com","zoneview.net","zonnet.nl","zooglemail.com","zoominternet.net","zubee.com","zuvio.com","zuzzurello.com","zvmail.com","zwallet.com","zweb.in","zxcv.com","zxcvbnm.com","zybermail.com","zydecofan.com","zzn.com","zzom.co.uk","zzz.com"];var _i=a(1476),Ri=a.n(_i);const Ii="(?:[_\\p{L}0-9][-_\\p{L}0-9]*\\.)*(?:[\\p{L}0-9][-\\p{L}0-9]{0,62})\\.(?:(?:[a-z]{2}\\.)?[a-z]{2,})",Ai=class{static extractDomainFromEmail(e){const t=Ct()(`(?<=@)${Ii}`);return Ct().match(e,t)||""}static isProfessional(e){return!Ni.includes(e)}static checkDomainValidity(e){if(!Ct()(`^${Ii}$`).test(e))throw new Error("Cannot parse domain. The domain does not match the pattern.");try{if(!new URL(`https://${e}`).host)throw new Error("Cannot parse domain. The domain does not match the pattern.")}catch(e){throw new Error("Cannot parse domain. The domain is not valid.")}}static isValidHostname(e){return Ct()(`^${Ii}$`).test(e)||Ri()({exact:!0}).test(e)}};function Pi(){return Pi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},findSmtpSettings:()=>{},changeProvider:()=>{},setData:()=>{},isSettingsModified:()=>{},isSettingsValid:()=>{},getErrors:()=>{},validateData:()=>{},getFieldToFocus:()=>{},saveSmtpSettings:()=>{},isProcessing:()=>{},hasProviderChanged:()=>{},sendTestMailTo:()=>{},isDataReady:()=>{},clearContext:()=>{}});class Li extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.smtpSettingsModel=new class{constructor(e){this.smtpSettingsService=new class{constructor(e){e.setResourceName("smtp/settings"),this.apiClient=new at(e)}async find(){const e=await this.apiClient.findAll(),t=e?.body;return t.client=t.client??"",t.tls=Boolean(t?.tls),t}async save(e){const t=(await this.apiClient.create(e)).body;return t.tls=Boolean(t.tls),t}}(e)}findSmtpSettings(){return this.smtpSettingsService.find()}saveSmtpSettings(e){return this.smtpSettingsService.save(e)}}(t),this.smtpTestSettingsModel=new class{constructor(e){this.smtpTestSettingsService=new class{constructor(e){e.setResourceName("smtp/email"),this.apiClient=new at(e)}async sendTestEmail(e){return(await this.apiClient.create(e)).body}}(e)}sendTestEmail(e,t){const{sender_name:a,sender_email:n,host:i,port:s,client:o,username:r,password:l,tls:c}=e,m={sender_name:a,sender_email:n,host:i,port:s,client:o,username:r,password:l,tls:c,email_test_to:t};return m.client=m.client||null,this.smtpTestSettingsService.sendTestEmail(m)}}(t),this.fieldToFocus=null,this.providerHasChanged=!1}get defaultState(){return{settingsModified:!1,currentSmtpSettings:{provider:null,username:"",password:"",host:"",tls:!0,port:"",client:"",sender_email:"",sender_name:"Passbolt"},errors:{},isLoaded:!1,processing:!1,hasSumittedForm:!1,getCurrentSmtpSettings:this.getCurrentSmtpSettings.bind(this),findSmtpSettings:this.findSmtpSettings.bind(this),changeProvider:this.changeProvider.bind(this),setData:this.setData.bind(this),isSettingsModified:this.isSettingsModified.bind(this),getErrors:this.getErrors.bind(this),validateData:this.validateData.bind(this),getFieldToFocus:this.getFieldToFocus.bind(this),saveSmtpSettings:this.saveSmtpSettings.bind(this),isProcessing:this.isProcessing.bind(this),hasProviderChanged:this.hasProviderChanged.bind(this),sendTestMailTo:this.sendTestMailTo.bind(this),isDataReady:this.isDataReady.bind(this),clearContext:this.clearContext.bind(this)}}async findSmtpSettings(){if(!this.props.context.siteSettings.canIUse("smtpSettings"))return;let e=this.state.currentSmtpSettings;try{e=await this.smtpSettingsModel.findSmtpSettings(),this.setState({currentSmtpSettings:e,isLoaded:!0})}catch(e){this.handleError(e)}e.sender_email||(e.sender_email=this.props.context.loggedInUser.username),e.host&&e.port&&(e.provider=this.detectProvider(e)),this.setState({currentSmtpSettings:e,isLoaded:!0})}clearContext(){const{settingsModified:e,currentSmtpSettings:t,errors:a,isLoaded:n,processing:i,hasSumittedForm:s}=this.defaultState;this.setState({settingsModified:e,currentSmtpSettings:t,errors:a,isLoaded:n,processing:i,hasSumittedForm:s})}async saveSmtpSettings(){this._doProcess((async()=>{try{const e={...this.state.currentSmtpSettings};delete e.provider,e.client=e.client||null,await this.smtpSettingsModel.saveSmtpSettings(e),this.props.actionFeedbackContext.displaySuccess(this.props.t("The SMTP settings have been saved successfully"));const t=Object.assign({},this.state.currentSmtpSettings,{source:"db"});this.setState({currentSmtpSettings:t})}catch(e){this.handleError(e)}}))}async sendTestMailTo(e){return await this.smtpTestSettingsModel.sendTestEmail(this.getCurrentSmtpSettings(),e)}_doProcess(e){this.setState({processing:!0},(async()=>{await e(),this.setState({processing:!1})}))}hasProviderChanged(){const e=this.providerHasChanged;return this.providerHasChanged=!1,e}changeProvider(e){e.id!==this.state.currentSmtpSettings.provider?.id&&(this.providerHasChanged=!0,this.setState({settingsModified:!0,currentSmtpSettings:{...this.state.currentSmtpSettings,...e.defaultConfiguration,provider:e}}))}setData(e){const t=Object.assign({},this.state.currentSmtpSettings,e),a={currentSmtpSettings:{...t,provider:this.detectProvider(t)},settingsModified:!0};this.setState(a),this.state.hasSumittedForm&&this.validateData(t)}detectProvider(e){for(let t=0;tt.host===e.host&&t.port===parseInt(e.port,10)&&t.tls===e.tls)))return a}return xi.find((e=>"other"===e.id))}isDataReady(){return this.state.isLoaded}isProcessing(){return this.state.processing}isSettingsModified(){return this.state.settingsModified}getErrors(){return this.state.errors}validateData(e){e=e||this.state.currentSmtpSettings;const t={};let a=!0;return a=this.validate_host(e.host,t)&&a,a=this.validate_sender_email(e.sender_email,t)&&a,a=this.validate_sender_name(e.sender_name,t)&&a,a=this.validate_username(e.username,t)&&a,a=this.validate_password(e.password,t)&&a,a=this.validate_port(e.port,t)&&a,a=this.validate_tls(e.tls,t)&&a,a=this.validate_client(e.client,t)&&a,a||(this.fieldToFocus=this.getFirstFieldInError(t,["username","password","host","tls","port","client","sender_name","sender_email"])),this.setState({errors:t,hasSumittedForm:!0}),a}validate_host(e,t){return"string"!=typeof e?(t.host=this.props.t("SMTP Host must be a valid string"),!1):0!==e.length||(t.host=this.props.t("SMTP Host is required"),!1)}validate_client(e,t){return!!(0===e.length||Ai.isValidHostname(e)&&e.length<=2048)||(t.client=this.props.t("SMTP client should be a valid domain or IP address"),!1)}validate_sender_email(e,t){return"string"!=typeof e?(t.sender_email=this.props.t("Sender email must be a valid email"),!1):0===e.length?(t.sender_email=this.props.t("Sender email is required"),!1):!!Zn.validate(e,this.props.context.siteSettings)||(t.sender_email=this.props.t("Sender email must be a valid email"),!1)}validate_sender_name(e,t){return"string"!=typeof e?(t.sender_name=this.props.t("Sender name must be a valid string"),!1):0!==e.length||(t.sender_name=this.props.t("Sender name is required"),!1)}validate_username(e,t){return null===e||"string"==typeof e||(t.username=this.props.t("Username must be a valid string"),!1)}validate_password(e,t){return null===e||"string"==typeof e||(t.password=this.props.t("Password must be a valid string"),!1)}validate_tls(e,t){return"boolean"==typeof e||(t.tls=this.props.t("TLS must be set to 'Yes' or 'No'"),!1)}validate_port(e,t){const a=parseInt(e,10);return isNaN(a)?(t.port=this.props.t("Port must be a valid number"),!1):!(a<1||a>65535)||(t.port=this.props.t("Port must be a number between 1 and 65535"),!1)}getFirstFieldInError(e,t){for(let a=0;an.createElement(e,Pi({adminSmtpSettingsContext:t},this.props))))}}}const ji="form",zi="error",Mi="success";class Oi extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{uiState:ji,recipient:this.props.context.loggedInUser.username,processing:!1,displayLogs:!0}}bindCallbacks(){this.handleRetryClick=this.handleRetryClick.bind(this),this.handleError=this.handleError.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleDisplayLogsClick=this.handleDisplayLogsClick.bind(this)}async handleFormSubmit(e){if(e.preventDefault(),this.validateForm()){try{this.setState({processing:!0});const e=await this.props.adminSmtpSettingsContext.sendTestMailTo(this.state.recipient);this.setState({uiState:Mi,debugDetails:this.formatDebug(e.debug),displayLogs:!1})}catch(e){this.handleError(e)}this.setState({processing:!1})}}async handleInputChange(e){this.setState({recipient:e.target.value})}validateForm(){const e=Zn.validate(this.state.recipient,this.props.context.siteSettings);return this.setState({recipientError:e?"":this.translate("Recipient must be a valid email")}),e}formatDebug(e){return JSON.stringify(e,null,4)}handleError(e){const t=e.data?.body?.debug,a=t?.length>0?t:e?.message;this.setState({uiState:zi,debugDetails:this.formatDebug(a),displayLogs:!0})}handleDisplayLogsClick(){this.setState({displayLogs:!this.state.displayLogs})}handleRetryClick(){this.setState({uiState:ji})}hasAllInputDisabled(){return this.state.processing}get title(){return{form:this.translate("Send test email"),error:this.translate("Something went wrong!"),success:this.translate("Email sent")}[this.state.uiState]||""}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"send-test-email-dialog",title:this.title,onClose:this.props.handleClose,disabled:this.hasAllInputDisabled()},this.state.uiState===ji&&n.createElement("form",{onSubmit:this.handleFormSubmit,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("div",{className:`input text required ${this.state.recipientError?"error":""} ${this.hasAllInputDisabled()?"disabled":""}`},n.createElement("label",null,n.createElement(v.c,null,"Recipient")),n.createElement("input",{id:"recipient",type:"text",name:"recipient",required:"required",className:"required fluid form-element ready",placeholder:"name@email.com",onChange:this.handleInputChange,value:this.state.recipient,disabled:this.hasAllInputDisabled()}),this.state.recipientError&&n.createElement("div",{className:"recipient error-message"},this.state.recipientError))),n.createElement("div",{className:"message notice"},n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"after clicking on send, a test email will be sent to the recipient email in order to check that your configuration is correct.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.props.handleClose}),n.createElement(La,{disabled:this.hasAllInputDisabled(),processing:this.state.processing,value:this.translate("Send")}))),this.state.uiState===zi&&n.createElement(n.Fragment,null,n.createElement("div",{className:"dialog-body"},n.createElement("p",null,n.createElement(v.c,null,"The test email could not be sent. Kindly check the logs below for more information."),n.createElement("br",null),n.createElement("a",{className:"faq-link",href:"https://help.passbolt.com/faq/hosting/why-email-not-sent",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"FAQ: Why are my emails not sent?"))),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDisplayLogsClick},n.createElement(Re,{name:this.state.displayLogs?"caret-down":"caret-right"})," ",n.createElement(v.c,null,"Logs"))),this.state.displayLogs&&n.createElement("div",{className:"accordion-content"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.state.debugDetails}))),n.createElement("div",{className:"dialog-footer clearfix"},n.createElement("button",{type:"button",className:"cancel",disabled:this.hasAllInputDisabled(),onClick:this.handleRetryClick},n.createElement(v.c,null,"Retry")),n.createElement("button",{className:"button primary",type:"button",onClick:this.props.handleClose,disabled:this.isProcessing},n.createElement("span",null,n.createElement(v.c,null,"Close"))))),this.state.uiState===Mi&&n.createElement(n.Fragment,null,n.createElement("div",{className:"dialog-body"},n.createElement("p",null,n.createElement(v.c,null,"The test email has been sent. Check your email box, you should receive it in a minute.")),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleDisplayLogsClick},n.createElement(Re,{name:this.state.displayLogs?"caret-down":"caret-right"})," ",n.createElement(v.c,null,"Logs"))),this.state.displayLogs&&n.createElement("div",{className:"accordion-content"},n.createElement("textarea",{className:"full_report",readOnly:!0,value:this.state.debugDetails}))),n.createElement("div",{className:"message notice"},n.createElement("strong",null,n.createElement(v.c,null,"Pro tip"),":")," ",n.createElement(v.c,null,"Check your spam folder if you do not hear from us after a while.")),n.createElement("div",{className:"dialog-footer clearfix"},n.createElement("button",{type:"button",className:"cancel",disabled:this.hasAllInputDisabled(),onClick:this.handleRetryClick},n.createElement(v.c,null,"Retry")),n.createElement("button",{className:"button primary",type:"button",onClick:this.props.handleClose,disabled:this.isProcessing},n.createElement("span",null,n.createElement(v.c,null,"Close"))))))}}Oi.propTypes={context:o().object,adminSmtpSettingsContext:o().object,handleClose:o().func,t:o().func};const Fi=I(Ui((0,k.Z)("common")(Oi)));class qi extends n.Component{constructor(e){super(e),this.bindCallbacks(),this.dialogId=null}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this),this.handleTestClick=this.handleTestClick.bind(this),this.handleCloseDialog=this.handleCloseDialog.bind(this)}async handleSaveClick(){this.smtpSettings.isProcessing()||this.smtpSettings.validateData()&&await this.smtpSettings.saveSmtpSettings()}async handleTestClick(){this.smtpSettings.isProcessing()||this.smtpSettings.validateData()&&(null!==this.dialogId&&this.handleCloseDialog(),this.dialogId=await this.props.dialogContext.open(Fi,{handleClose:this.handleCloseDialog}))}handleCloseDialog(){this.props.dialogContext.close(this.dialogId),this.dialogId=null}isSaveEnabled(){return this.smtpSettings.isSettingsModified()&&!this.smtpSettings.isProcessing()}isTestEnabled(){return this.smtpSettings.isSettingsModified()&&!this.smtpSettings.isProcessing()}get smtpSettings(){return this.props.adminSmtpSettingsContext}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))),n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isTestEnabled(),onClick:this.handleTestClick},n.createElement(Re,{name:"plug"}),n.createElement("span",null,n.createElement(v.c,null,"Send test email")))))))}}qi.propTypes={adminSmtpSettingsContext:o().object,workflowContext:o().any,dialogContext:o().object};const Wi=Ui(g((0,k.Z)("common")(qi))),Vi="None",Bi="Username only",Gi="Username & password";class Ki extends n.Component{static get AUTHENTICATION_METHOD_NONE(){return Vi}static get AUTHENTICATION_METHOD_USERNAME(){return Bi}static get AUTHENTICATION_METHOD_USERNAME_PASSWORD(){return Gi}constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createRefs()}get defaultState(){return{showAdvancedSettings:!1,source:"db"}}createRefs(){this.usernameFieldRef=n.createRef(),this.passwordFieldRef=n.createRef(),this.hostFieldRef=n.createRef(),this.portFieldRef=n.createRef(),this.clientFieldRef=n.createRef(),this.senderEmailFieldRef=n.createRef(),this.senderNameFieldRef=n.createRef()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Wi),await this.props.adminSmtpSettingsContext.findSmtpSettings();const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings();this.setState({showAdvancedSettings:"other"===e.provider?.id})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSmtpSettingsContext.clearContext()}componentDidUpdate(){const e=this.props.adminSmtpSettingsContext,t=e.getFieldToFocus();t&&this[`${t}FieldRef`]?.current?.focus(),e.hasProviderChanged()&&this.setState({showAdvancedSettings:"other"===e.getCurrentSmtpSettings().provider?.id})}bindCallbacks(){this.handleAdvancedSettingsToggle=this.handleAdvancedSettingsToggle.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleProviderChange=this.handleProviderChange.bind(this),this.handleAuthenticationMethodChange=this.handleAuthenticationMethodChange.bind(this)}handleProviderChange(e){const t=e.target.value,a=xi.find((e=>e.id===t));this.props.adminSmtpSettingsContext.changeProvider(a)}handleAuthenticationMethodChange(e){let t=null,a=null;e.target.value===Bi?t="":e.target.value===Gi&&(t="",a=""),this.props.adminSmtpSettingsContext.setData({username:t,password:a})}handleInputChange(e){const t=e.target;this.props.adminSmtpSettingsContext.setData({[t.name]:t.value})}handleAdvancedSettingsToggle(){this.setState({showAdvancedSettings:!this.state.showAdvancedSettings})}isProcessing(){return this.props.adminSmtpSettingsContext.isProcessing()}get providerList(){return xi.map((e=>({value:e.id,label:e.name})))}get authenticationMethodList(){return[{value:Vi,label:this.translate("None")},{value:Bi,label:this.translate("Username only")},{value:Gi,label:this.translate("Username & password")}]}get tlsSelectList(){return[{value:!0,label:this.translate("Yes")},{value:!1,label:this.translate("No")}]}get authenticationMethod(){const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings();return null===e?.username?Vi:null===e?.password?Bi:Gi}shouldDisplayUsername(){return this.authenticationMethod===Bi||this.authenticationMethod===Gi}shouldDisplayPassword(){return this.authenticationMethod===Gi}shouldShowSourceWarningMessage(){const e=this.props.adminSmtpSettingsContext;return"db"!==e.getCurrentSmtpSettings().source&&e.isSettingsModified()}isReady(){return this.props.adminSmtpSettingsContext.isDataReady()}get settingsSource(){return this.props.adminSmtpSettingsContext?.getCurrentSmtpSettings()?.source}get configurationSource(){return{env:this.props.t("environment variables"),file:this.props.t("file"),db:this.props.t("database")}[this.settingsSource]||this.props.t("unknown")}get translate(){return this.props.t}render(){const e=this.props.adminSmtpSettingsContext.getCurrentSmtpSettings(),t=this.props.adminSmtpSettingsContext.getErrors();return n.createElement("div",{className:"grid grid-responsive-12"},n.createElement("div",{className:"row"},n.createElement("div",{className:"third-party-provider-settings smtp-settings col8 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Email server")),this.isReady()&&!e?.provider&&n.createElement(n.Fragment,null,n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Select a provider")),n.createElement("div",{className:"provider-list"},xi.map((e=>n.createElement("div",{key:e.id,className:"provider button",id:e.id,onClick:()=>this.props.adminSmtpSettingsContext.changeProvider(e)},n.createElement("div",{className:"provider-logo"},"other"===e.id&&n.createElement(Re,{name:"envelope"}),"other"!==e.id&&n.createElement("img",{src:`${this.props.context.trustedDomain}/img/third_party/${e.icon}`})),n.createElement("p",{className:"provider-name"},e.name)))))),this.isReady()&&e?.provider&&n.createElement(n.Fragment,null,this.shouldShowSourceWarningMessage()&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning:")," These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.")),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"SMTP server configuration")),n.createElement("div",{className:"select-wrapper input required "+(this.isProcessing()?"disabled":"")},n.createElement("label",{htmlFor:"smtp-settings-form-provider"},n.createElement(v.c,null,"Email provider")),n.createElement(Ft,{id:"smtp-settings-form-provider",name:"provider",items:this.providerList,value:e.provider.id,onChange:this.handleProviderChange,disabled:this.isProcessing()})),n.createElement("div",{className:"select-wrapper input required "+(this.isProcessing()?"disabled":"")},n.createElement("label",{htmlFor:"smtp-settings-form-authentication-method"},n.createElement(v.c,null,"Authentication method")),n.createElement(Ft,{id:"smtp-settings-form-authentication-method",name:"authentication-method",items:this.authenticationMethodList,value:this.authenticationMethod,onChange:this.handleAuthenticationMethodChange,disabled:this.isProcessing()})),this.shouldDisplayUsername()&&n.createElement("div",{className:`input text ${t.username?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-username"},n.createElement(v.c,null,"Username")),n.createElement("input",{id:"smtp-settings-form-username",ref:this.usernameFieldRef,name:"username",className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.username,onChange:this.handleInputChange,placeholder:this.translate("Username"),disabled:this.isProcessing()}),t.username&&n.createElement("div",{className:"error-message"},t.username)),this.shouldDisplayPassword()&&n.createElement("div",{className:`input-password-wrapper input ${t.password?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-password"},n.createElement(v.c,null,"Password")),n.createElement(It,{id:"smtp-settings-form-password",name:"password",autoComplete:"new-password",placeholder:this.translate("Password"),preview:!0,value:e.password,onChange:this.handleInputChange,disabled:this.isProcessing(),inputRef:this.passwordFieldRef}),t.password&&n.createElement("div",{className:"password error-message"},t.password)),n.createElement("div",{className:"accordion-header"},n.createElement("button",{type:"button",className:"link no-border",onClick:this.handleAdvancedSettingsToggle},n.createElement(Re,{name:this.state.showAdvancedSettings?"caret-down":"caret-right"}),n.createElement(v.c,null,"Advanced settings"))),this.state.showAdvancedSettings&&n.createElement("div",{className:"advanced-settings"},n.createElement("div",{className:`input text required ${t.host?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-host"},n.createElement(v.c,null,"SMTP host")),n.createElement("input",{id:"smtp-settings-form-host",ref:this.hostFieldRef,name:"host","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.host,onChange:this.handleInputChange,placeholder:this.translate("SMTP server address"),disabled:this.isProcessing()}),t.host&&n.createElement("div",{className:"error-message"},t.host)),n.createElement("div",{className:`input text required ${t.tls?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-tls"},n.createElement(v.c,null,"Use TLS")),n.createElement(Ft,{id:"smtp-settings-form-tls",name:"tls",items:this.tlsSelectList,value:e.tls,onChange:this.handleInputChange,disabled:this.isProcessing()})),n.createElement("div",{className:`input text required ${t.port?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-port"},n.createElement(v.c,null,"Port")),n.createElement("input",{id:"smtp-settings-form-port","aria-required":!0,ref:this.portFieldRef,name:"port",className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.port,onChange:this.handleInputChange,placeholder:this.translate("Port number"),disabled:this.isProcessing()}),t.port&&n.createElement("div",{className:"error-message"},t.port)),n.createElement("div",{className:`input text ${t.client?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-client"},n.createElement(v.c,null,"SMTP client")),n.createElement("input",{id:"smtp-settings-form-client",ref:this.clientFieldRef,name:"client",maxLength:"2048",type:"text",autoComplete:"off",value:e.client,onChange:this.handleInputChange,placeholder:this.translate("SMTP client address"),disabled:this.isProcessing()}),t.client&&n.createElement("div",{className:"error-message"},t.client))),n.createElement("h4",null,n.createElement(v.c,null,"Sender configuration")),n.createElement("div",{className:`input text required ${t.sender_name?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-sender-name"},n.createElement(v.c,null,"Sender name")),n.createElement("input",{id:"smtp-settings-form-sender-name",ref:this.senderNameFieldRef,name:"sender_name","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.sender_name,onChange:this.handleInputChange,placeholder:this.translate("Sender name"),disabled:this.isProcessing()}),t.sender_name&&n.createElement("div",{className:"error-message"},t.sender_name),n.createElement("p",null,n.createElement(v.c,null,"This is the name users will see in their mailbox when passbolt sends a notification."))),n.createElement("div",{className:`input text required ${t.sender_email?"error":""} ${this.isProcessing()?"disabled":""}`},n.createElement("label",{htmlFor:"smtp-settings-form-sender-name"},n.createElement(v.c,null,"Sender email")),n.createElement("input",{id:"smtp-settings-form-sender-email",ref:this.senderEmailFieldRef,name:"sender_email","aria-required":!0,className:"fluid",maxLength:"256",type:"text",autoComplete:"off",value:e.sender_email,onChange:this.handleInputChange,placeholder:this.translate("Sender email"),disabled:this.isProcessing()}),t.sender_email&&n.createElement("div",{className:"error-message"},t.sender_email),n.createElement("p",null,n.createElement(v.c,null,"This is the email address users will see in their mail box when passbolt sends a notification.",n.createElement("br",null),"It's a good practice to provide a working email address that users can reply to.")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"smtp-settings-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Why do I need an SMTP server?")),n.createElement("p",null,n.createElement(v.c,null,"Passbolt needs an smtp server in order to send invitation emails after an account creation and to send email notifications.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/email/setup",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),e?.provider&&"other"!==e?.provider.id&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a ",e.provider.name," SMTP server?")),n.createElement("a",{className:"button",href:e.provider.help_page,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"link"}),n.createElement("span",null,n.createElement(v.c,null,"See the ",e.provider.name," documentation")))),e?.provider&&("google-mail"===e.provider.id||"google-workspace"===e.provider.id)&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Why shouldn't I use my login password ?")),n.createElement("p",null,n.createElement(v.c,null,'In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.')),n.createElement("a",{className:"button",href:"https://support.google.com/mail/answer/185833",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"More informations")))))))}}Ki.propTypes={context:o().object,dialogContext:o().any,administrationWorkspaceContext:o().object,adminSmtpSettingsContext:o().object,t:o().func};const Hi=I(Ui(g(O((0,k.Z)("common")(Ki))))),$i=class{static clone(e){return new Map(JSON.parse(JSON.stringify(Array.from(e))))}static iterators(e){return[...e.keys()]}static listValues(e){return[...e.values()]}},Zi=class{constructor(e={}){this.allowedDomains=this.mapAllowedDomains(e.data?.allowed_domains||[])}mapAllowedDomains(e){return new Map(e.map((e=>[(0,r.Z)(),e])))}getSettings(){return this.allowedDomains}setSettings(e){this.allowedDomains=this.mapAllowedDomains(e)}};class Yi extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async handleSubmit(e){e.preventDefault(),await this.props.onSubmit(),this.props.onClose()}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}render(){const e=this.props.adminSelfRegistrationContext.isProcessing();return n.createElement(Te,{title:this.props.t("Save self registration settings"),onClose:this.handleClose,disabled:e,className:"save-self-registration-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},n.createElement(n.Fragment,null,n.createElement("label",null,n.createElement(v.c,null,"Allowed domains")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("ul",{id:"domains-list"},this.allowedDomains&&$i.iterators(this.allowedDomains).map((e=>n.createElement("li",{key:e},this.allowedDomains.get(e))))))))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,"Please review carefully this configuration.")),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{onClick:this.handleClose,disabled:e}),n.createElement(La,{value:this.props.t("Save"),disabled:e,processing:e,warning:!0}))))}}Yi.propTypes={context:o().any,onSubmit:o().func,adminSelfRegistrationContext:o().object,onClose:o().func,t:o().func};const Ji=I(is((0,k.Z)("common")(Yi)));class Qi extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSubmit=this.handleSubmit.bind(this),this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}async handleSubmit(e){e.preventDefault(),await this.props.onSubmit(),this.props.onClose()}render(){const e=this.props.adminSelfRegistrationContext.isProcessing();return n.createElement(Te,{title:this.props.t("Disable self registration"),onClose:this.handleClose,disabled:e,className:"delete-self-registration-settings-dialog"},n.createElement("form",{onSubmit:this.handleSubmit},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Are you sure to disable the self registration for the organization ?")),n.createElement("p",null,n.createElement(v.c,null,"Users will not be able to self register anymore.")," ",n.createElement(v.c,null,"Only administrators would be able to invite users to register. "))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{onClick:this.handleClose,disabled:e}),n.createElement(La,{value:this.props.t("Save"),disabled:e,processing:e,warning:!0}))))}}Qi.propTypes={adminSelfRegistrationContext:o().object,onClose:o().func,onSubmit:o().func,t:o().func};const Xi=is((0,k.Z)("common")(Qi));function es(){return es=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getAllowedDomains:()=>{},setAllowedDomains:()=>{},hasSettingsChanges:()=>{},setDomains:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setErrors:()=>{},getErrors:()=>{},setError:()=>{},save:()=>{},delete:()=>{},shouldFocus:()=>{},setFocus:()=>{},isSaved:()=>{},setSaved:()=>{},validateForm:()=>{}});class as extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.selfRegistrationService=new class{constructor(e){this.apiClientOptions=e}async find(){this.initClient();const e=await this.apiClient.findAll(),t=e?.body;return t}async save(e){this.initClient(),await this.apiClient.create(e)}async delete(e){this.initClient(),await this.apiClient.delete(e)}async checkDomainAllowed(e){this.initClient("dry-run"),await this.apiClient.create(e)}initClient(e="settings"){this.apiClientOptions.setResourceName(`self-registration/${e}`),this.apiClient=new at(this.apiClientOptions)}}(t),this.selfRegistrationFormService=new class{constructor(e){this.translate=e,this.fields=new Map}validate(e){return this.fields=e,this.validateInputs()}validateInputs(){const e=new Map;return this.fields.forEach(((t,a)=>{this.validateInput(a,t,e)})),e}validateInput(e,t,a){if(t.length)try{Ai.checkDomainValidity(t)}catch{a.set(e,this.translate("This should be a valid domain"))}else a.set(e,this.translate("A domain is required."));this.checkDuplicateValue(a)}checkDuplicateValue(e){this.fields.forEach(((t,a)=>{$i.listValues(this.fields).filter((e=>e===t&&""!==e)).length>1&&e.set(a,this.translate("This domain already exist"))}))}}(this.props.t)}get defaultState(){return{errors:new Map,submitted:!1,currentSettings:null,focus:!1,saved:!1,domains:new Zi,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getAllowedDomains:this.getAllowedDomains.bind(this),setAllowedDomains:this.setAllowedDomains.bind(this),setDomains:this.setDomains.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this),getErrors:this.getErrors.bind(this),setError:this.setError.bind(this),setErrors:this.setErrors.bind(this),save:this.save.bind(this),shouldFocus:this.shouldFocus.bind(this),setFocus:this.setFocus.bind(this),isSaved:this.isSaved.bind(this),setSaved:this.setSaved.bind(this),deleteSettings:this.deleteSettings.bind(this),validateForm:this.validateForm.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.selfRegistrationService.find();this.setState({currentSettings:t});const a=new Zi(t);this.setDomains(a,e),this.setProcessing(!1)}getCurrentSettings(){return this.state.currentSettings}getAllowedDomains(){return this.state.domains.allowedDomains}setAllowedDomains(e,t,a=(()=>{})){this.setState((a=>{const n=$i.clone(a.domains.allowedDomains);return n.set(e,t),{domains:{allowedDomains:n}}}),a)}setDomains(e,t=(()=>{})){this.setState({domains:e},t)}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}isSubmitted(){return this.state.submitted}setSubmitted(e){this.setState({submitted:e}),this.setFocus(e)}getErrors(){return this.state.errors}shouldFocus(){return this.state.focus}setFocus(e){this.setState({focus:e})}setError(e,t){this.setState((a=>{const n=$i.clone(a.errors);return n.set(e,t),{errors:n}}))}setErrors(e){this.setState({errors:e})}hasSettingsChanges(){const e=this.state.currentSettings?.data?.allowed_domains||[],t=$i.listValues(this.state.domains.allowedDomains);return JSON.stringify(e)!==JSON.stringify(t)}clearContext(){const{currentSettings:e,domains:t,processing:a}=this.defaultState;this.setState({currentSettings:e,domains:t,processing:a})}save(){this.setSubmitted(!0),this.validateForm()&&(this.hasSettingsChanges()&&0===this.getAllowedDomains().size?this.displayConfirmDeletionDialog():this.displayConfirmSummaryDialog())}validateForm(){const e=this.selfRegistrationFormService.validate(this.state.getAllowedDomains());return this.state.setErrors(e),0===e.size}async handleSubmitError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.handleError(e))}async saveSettings(){try{this.setProcessing(!0);const e=new class{constructor(e,t={}){this.id=t.id,this.provider=t.provider||"email_domains",this.data=this.mapData(e?.allowedDomains)}mapData(e=new Map){return{allowed_domains:Array.from(e.values())}}}(this.state.domains,this.state.currentSettings);await this.selfRegistrationService.save(e),await this.findSettings((()=>this.setSaved(!0))),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The self registration settings for the organization were updated."))}catch(e){this.handleSubmitError(e)}finally{this.setProcessing(!1),this.setSubmitted(!1)}}async handleError(e){this.handleCloseDialog();const t={error:e};this.props.dialogContext.open(je,t)}handleCloseDialog(){this.props.dialogContext.close()}displayConfirmSummaryDialog(){this.props.dialogContext.open(Ji,{domains:this.getAllowedDomains(),onSubmit:()=>this.saveSettings(),onClose:()=>this.handleCloseDialog()})}displayConfirmDeletionDialog(){this.props.dialogContext.open(Xi,{onSubmit:()=>this.deleteSettings(),onClose:()=>this.handleCloseDialog()})}async deleteSettings(){try{this.setProcessing(!0),await this.selfRegistrationService.delete(this.state.currentSettings.id),await this.findSettings(),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The self registration settings for the organization were updated."))}catch(e){this.handleSubmitError(e)}finally{this.setProcessing(!1),this.setSubmitted(!1)}}isSaved(){return this.state.saved}setSaved(e){return this.setState({saved:e})}render(){return n.createElement(ts.Provider,{value:this.state},this.props.children)}}as.propTypes={context:o().any,children:o().any,t:o().any,dialogContext:o().any,actionFeedbackContext:o().object};const ns=I(g(d((0,k.Z)("common")(as))));function is(e){return class extends n.Component{render(){return n.createElement(ts.Consumer,null,(t=>n.createElement(e,es({adminSelfRegistrationContext:t},this.props))))}}}class ss extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}isSaveEnabled(){let e=!1;return this.props.adminSelfRegistrationContext.getCurrentSettings()?.provider||(e=!this.props.adminSelfRegistrationContext.hasSettingsChanges()),!this.props.adminSelfRegistrationContext.isProcessing()&&!e}async handleSave(){this.isSaveEnabled()&&this.props.adminSelfRegistrationContext.save()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}ss.propTypes={adminSelfRegistrationContext:o().object,t:o().func};const os=(0,k.Z)("common")(is(ss)),rs=new Map;function ls(e){if("string"!=typeof e)return console.warn("useDynamicRefs: Cannot set ref without key");const t=n.createRef();return rs.set(e,t),t}function cs(e){return e?rs.get(e):console.warn("useDynamicRefs: Cannot get ref without key")}class ms extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.dynamicRefs={getRef:cs,setRef:ls},this.checkForPublicDomainDebounce=Nn()(this.checkForWarnings,300),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(os),await this.findSettings()}componentDidUpdate(){this.shouldFocusOnError(),this.shouldCheckWarnings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminSelfRegistrationContext.clearContext()}get defaultState(){return{isEnabled:!1,warnings:new Map}}bindCallbacks(){this.handleToggleClicked=this.handleToggleClicked.bind(this),this.handleAddRowClick=this.handleAddRowClick.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleDeleteRow=this.handleDeleteRow.bind(this)}get currentUser(){return this.props.context.loggedInUser}get allowedDomains(){return this.props.adminSelfRegistrationContext.getAllowedDomains()}async findSettings(){await this.props.adminSelfRegistrationContext.findSettings(),this.setState({isEnabled:this.allowedDomains.size>0}),this.checkForWarnings(),this.validateForm()}checkForWarnings(){this.setState({warnings:new Map},(()=>{this.allowedDomains.forEach(((e,t)=>this.checkDomainIsProfessional(t,e)))}))}setupSettings(){if(this.props.adminSelfRegistrationContext.setDomains(new Zi(this.props.adminSelfRegistrationContext.getCurrentSettings())),this.checkForWarnings(),0===this.allowedDomains.size){const e=Ai.extractDomainFromEmail(this.currentUser?.username);Ai.checkDomainValidity(e),this.populateUserDomain(e)}}shouldFocusOnError(){const e=this.props.adminSelfRegistrationContext.shouldFocus(),[t]=this.props.adminSelfRegistrationContext.getErrors().keys();t&&e&&(this.dynamicRefs.getRef(t).current.focus(),this.props.adminSelfRegistrationContext.setFocus(!1))}shouldCheckWarnings(){this.props.adminSelfRegistrationContext.isSaved()&&(this.props.adminSelfRegistrationContext.setSaved(!1),this.checkForWarnings())}populateUserDomain(e){const t=Ai.isProfessional(e)?e:"";this.addRow(t)}addRow(e=""){const t=(0,r.Z)();this.props.adminSelfRegistrationContext.setAllowedDomains(t,e,(()=>{const e=this.dynamicRefs.getRef(t);e?.current.focus()}))}handleDeleteRow(e){if(this.canDelete()){const t=this.allowedDomains;t.delete(e),this.props.adminSelfRegistrationContext.setDomains({allowedDomains:t}),this.validateForm(),this.checkForWarnings()}}hasWarnings(){return this.state.warnings.size>0}hasAllInputDisabled(){return this.props.adminSelfRegistrationContext.isProcessing()}handleToggleClicked(){this.setState({isEnabled:!this.state.isEnabled},(()=>{this.state.isEnabled?this.setupSettings():(this.props.adminSelfRegistrationContext.setDomains({allowedDomains:new Map}),this.props.adminSelfRegistrationContext.setErrors(new Map))}))}handleAddRowClick(){this.addRow()}checkDomainIsProfessional(e,t){this.setState((a=>{const n=$i.clone(a.warnings);return Ai.isProfessional(t)?n.delete(e):n.set(e,"This is not a safe professional domain"),{warnings:n}}))}handleInputChange(e){const t=e.target.value,a=e.target.name;this.props.adminSelfRegistrationContext.setAllowedDomains(a,t,(()=>this.validateForm())),this.checkForPublicDomainDebounce()}validateForm(){this.props.adminSelfRegistrationContext.validateForm()}canDelete(){return this.allowedDomains.size>1}render(){const e=this.props.adminSelfRegistrationContext.isSubmitted(),t=this.props.adminSelfRegistrationContext.getErrors();return n.createElement("div",{className:"row"},n.createElement("div",{className:"self-registration col7 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"settings-toggle",onChange:this.handleToggleClicked,checked:this.state.isEnabled,disabled:this.hasAllInputDisabled(),id:"settings-toggle"}),n.createElement("label",{htmlFor:"settings-toggle"},n.createElement(v.c,null,"Self Registration")))),this.props.adminSelfRegistrationContext.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"self-registration-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!this.state.isEnabled&&n.createElement("p",{className:"description",id:"disabled-description"},n.createElement(v.c,null,"User self registration is disabled.")," ",n.createElement(v.c,null,"Only administrators can invite users to register.")),this.state.isEnabled&&n.createElement(n.Fragment,null,n.createElement("div",{id:"self-registration-subtitle",className:`input ${this.hasWarnings()&&"warning"} ${e&&t.size>0&&"error"}`},n.createElement("label",{id:"enabled-label"},n.createElement(v.c,null,"Email domain safe list"))),n.createElement("p",{className:"description",id:"enabled-description"},n.createElement(v.c,null,"All the users with an email address ending with the domain in the safe list are allowed to register on passbolt.")),$i.iterators(this.allowedDomains).map((a=>n.createElement("div",{key:a,className:"input"},n.createElement("div",{className:"domain-row"},n.createElement("input",{type:"text",className:"full-width",onChange:this.handleInputChange,id:`input-${a}`,name:a,value:this.allowedDomains.get(a),disabled:!this.hasAllInputDisabled,ref:this.dynamicRefs.setRef(a),placeholder:this.props.t("domain")}),n.createElement("button",{type:"button",disabled:!this.canDelete(),className:"button-icon",id:`delete-${a}`,onClick:()=>this.handleDeleteRow(a)},n.createElement(Re,{name:"trash"}))),this.hasWarnings()&&this.state.warnings.get(a)&&n.createElement("div",{id:"domain-name-input-feedback",className:"warning-message"},n.createElement(v.c,null,this.state.warnings.get(a))),t.get(a)&&e&&n.createElement("div",{className:"error-message"},n.createElement(v.c,null,t.get(a)))))),n.createElement("div",{className:"domain-add"},n.createElement("button",{type:"button",onClick:this.handleAddRowClick},n.createElement(Re,{name:"add"}),n.createElement("span",null,n.createElement(v.c,null,"Add")))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is user self registration?")),n.createElement("p",null,n.createElement(v.c,null,"User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/self-registration",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}ms.propTypes={dialogContext:o().any,context:o().any,adminSelfRegistrationContext:o().object,administrationWorkspaceContext:o().object,t:o().func};const ds=I(g(is(O((0,k.Z)("common")(ms))))),hs=[{id:"azure",name:"Microsoft",icon:n.createElement("svg",{width:"65",height:"64",viewBox:"0 0 65 64",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M31.3512 3.04762H3.92261V30.4762H31.3512V3.04762Z",fill:"#F25022"}),n.createElement("path",{d:"M31.3512 33.5238H3.92261V60.9524H31.3512V33.5238Z",fill:"#00A4EF"}),n.createElement("path",{d:"M61.8274 3.04762H34.3988V30.4762H61.8274V3.04762Z",fill:"#7FBA00"}),n.createElement("path",{d:"M61.8274 33.5238H34.3988V60.9524H61.8274V33.5238Z",fill:"#FFB900"})),defaultConfig:{url:"https://login.microsoftonline.com",client_id:"",client_secret:"",tenant_id:"",client_secret_expiry:"",prompt:"login",email_claim:"email"}},{id:"google",name:"Google",icon:n.createElement("svg",{width:"65",height:"64",viewBox:"0 0 65 64",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M63.9451 32.72C63.9451 30.6133 63.7584 28.6133 63.4384 26.6667H33.3051V38.6933H50.5584C49.7851 42.64 47.5184 45.9733 44.1584 48.24V56.24H54.4517C60.4784 50.6667 63.9451 42.4533 63.9451 32.72Z",fill:"#4285F4"}),n.createElement("path",{d:"M33.305 64C41.945 64 49.1717 61.12 54.4517 56.24L44.1583 48.24C41.2783 50.16 37.625 51.3333 33.305 51.3333C24.9583 51.3333 17.8917 45.7067 15.3583 38.1067H4.745V46.3467C9.99833 56.8 20.7983 64 33.305 64Z",fill:"#34A853"}),n.createElement("path",{d:"M15.3584 38.1067C14.6917 36.1867 14.3451 34.1333 14.3451 32C14.3451 29.8667 14.7184 27.8133 15.3584 25.8933V17.6533H4.74505C2.55838 21.9733 1.30505 26.8267 1.30505 32C1.30505 37.1733 2.55838 42.0267 4.74505 46.3467L15.3584 38.1067Z",fill:"#FBBC05"}),n.createElement("path",{d:"M33.305 12.6667C38.025 12.6667 42.2383 14.2933 45.5717 17.4667L54.6917 8.34667C49.1717 3.17334 41.945 0 33.305 0C20.7983 0 9.99833 7.20001 4.745 17.6533L15.3583 25.8933C17.8917 18.2933 24.9583 12.6667 33.305 12.6667Z",fill:"#EA4335"})),defaultConfig:{client_id:"",client_secret:""}},{id:"oauth2",name:"OpenID",hiddenIfDisabled:!0,disabledForRecover:!0,icon:n.createElement("svg",{width:"65",height:"60",viewBox:"0 0 65 60",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{d:"M64.2468 34.9929L62.9089 21.0968L57.9256 23.9083C53.2914 21.0968 47.3581 19.1061 40.7332 18.3046V24.4577C44.5336 25.117 47.9462 26.3321 50.7513 27.9544L45.5031 30.9146L64.2533 34.9929H64.2468Z",fill:"#B3B3B3"}),n.createElement("path",{d:"M9.94184 38.8774C9.94184 32.0069 17.4264 26.2222 27.632 24.4577V18.2981C12.023 20.1854 0.246826 28.6783 0.246826 38.8774C0.246826 49.0766 12.8891 58.1769 29.3319 59.6312V53.5557C18.2666 52.166 9.94184 46.1228 9.94184 38.8774Z",fill:"#B3B3B3"}),n.createElement("path",{d:"M29.332 5.09999V59.6377L39.027 55.0746V0.362366L29.332 5.09999Z",fill:"#F8931E"})),defaultConfig:{url:"",openid_configuration_path:"",scope:"openid email profile",client_id:"",client_secret:""}}],ps="form",us="success";class gs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{uiState:ps,hasSuccessfullySignedInWithSso:!1,processing:!1,ssoToken:null}}bindCallbacks(){this.handleSignInTestClick=this.handleSignInTestClick.bind(this),this.handleActivateSsoSettings=this.handleActivateSsoSettings.bind(this),this.handleCloseDialog=this.handleCloseDialog.bind(this)}async handleSignInTestClick(e){e.preventDefault();try{this.setState({processing:!0});const e=await this.props.context.port.request("passbolt.sso.dry-run",this.props.configurationId);this.setState({uiState:us,hasSuccessfullySignedInWithSso:!0,ssoToken:e})}catch(e){"UserAbortsOperationError"!==e?.name&&this.props.adminSsoContext.handleError(e)}this.setState({processing:!1})}async handleActivateSsoSettings(e){e.preventDefault();try{this.setState({processing:!0}),await this.props.context.port.request("passbolt.sso.activate-settings",this.props.configurationId,this.state.ssoToken),await this.props.context.port.request("passbolt.sso.generate-sso-kit",this.props.provider.id),this.props.onSuccessfulSettingsActivation(),await this.props.actionFeedbackContext.displaySuccess(this.props.t("The SSO settings have been saved successfully"))}catch(e){this.props.adminSsoContext.handleError(e)}this.setState({processing:!1}),this.handleCloseDialog()}handleCloseDialog(){this.props.onClose(),this.props.handleClose()}hasAllInputDisabled(){return this.state.processing}canSaveSettings(){return!this.hasAllInputDisabled()&&this.state.hasSuccessfullySignedInWithSso}get title(){return{form:this.translate("Test Single Sign-On configuration"),success:this.translate("Save Single Sign-On configuration")}[this.state.uiState]||""}get translate(){return this.props.t}render(){return n.createElement(Te,{className:"test-sso-settings-dialog sso-login-form",title:this.title,onClose:this.handleCloseDialog,disabled:this.hasAllInputDisabled()},n.createElement("form",{onSubmit:this.handleActivateSsoSettings},n.createElement("div",{className:"form-content"},this.state.uiState===ps&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(v.c,null,"Before saving the settings, we need to test if the configuration is working.")),n.createElement("button",{type:"button",className:`sso-login-button ${this.props.provider.id}`,onClick:this.handleSignInTestClick,disabled:this.hasAllInputDisabled()},n.createElement("span",{className:"provider-logo"},this.props.provider.icon),this.translate("Sign in with {{providerName}}",{providerName:this.props.provider.name}))),this.state.uiState===us&&n.createElement("p",null,this.translate("You susccessfully signed in with your {{providerName}} account. You can safely save your configuration.",{providerName:this.props.provider.name}))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:this.hasAllInputDisabled(),onClick:this.handleCloseDialog}),n.createElement(La,{disabled:!this.canSaveSettings(),processing:this.state.processing,value:this.translate("Save settings")}))))}}gs.propTypes={context:o().object,adminSsoContext:o().object,onClose:o().func,t:o().func,provider:o().object,configurationId:o().string,actionFeedbackContext:o().any,handleClose:o().func,onSuccessfulSettingsActivation:o().func};const bs=I(Ms(d((0,k.Z)("common")(gs))));class fs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{processing:!1}}bindCallbacks(){this.handleConfirmDelete=this.handleConfirmDelete.bind(this)}async handleConfirmDelete(e){e.preventDefault(),this.setState({processing:!0}),await this.props.adminSsoContext.deleteSettings(),this.setState({processing:!1}),this.props.onClose()}hasAllInputDisabled(){return this.state.processing}render(){const e=this.hasAllInputDisabled();return n.createElement(Te,{className:"delete-sso-settings-dialog",title:this.props.t("Disable Single Sign-On settings?"),onClose:this.props.onClose,disabled:e},n.createElement("form",{onSubmit:this.handleConfirmDelete,noValidate:!0},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Are you sure you want to disable the current Single Sign-On settings?")),n.createElement("p",null,n.createElement(v.c,null,"This action cannot be undone. All the data associated with SSO will be permanently deleted."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement(Wt,{disabled:e,onClick:this.props.onClose}),n.createElement(La,{warning:!0,disabled:e,processing:this.state.processing,value:this.props.t("Disable")}))))}}fs.propTypes={adminSsoContext:o().object,onClose:o().func,t:o().func};const ys=Ms((0,k.Z)("common")(fs)),vs=["https://login.microsoftonline.com","https://login.microsoftonline.us","https://login.partner.microsoftonline.cn"],ks=/^https:\/\/login\.(microsoftonline\.(com|us)|partner\.microsoftonline\.cn)$/;class Es extends he{constructor(e){const t=Es.sanitizeDto(e);super(ye.validate(Es.ENTITY_NAME,t,Es.getSchema()))}static getSchema(){return{type:"object",required:["url","client_id","tenant_id","client_secret","client_secret_expiry"],properties:{url:{type:"string",pattern:ks},client_id:{type:"string",format:"uuid"},tenant_id:{type:"string",format:"uuid"},client_secret:{type:"string",minLength:1},client_secret_expiry:{type:"string",format:"date-time"},email_claim:{type:"string",enum:["email","preferred_username","upn"]},prompt:{type:"string",enum:["login","none"]}}}}static sanitizeDto(e){return e=Object.assign({},e),e?.email_claim||(e.email_claim="email"),e?.prompt||(e.prompt="login"),e}static get ENTITY_NAME(){return"AzureSsoSettings"}static get PROVIDER_ID(){return"azure"}static get SUPPORTED_URLS(){return vs}}const ws=Es;class Cs{constructor(e={}){this.url=e?.url,this.client_id=e?.client_id,this.tenant_id=e?.tenant_id,this.client_secret=e?.client_secret,this.email_claim=e?.email_claim,this.prompt=e?.prompt,e?.client_secret_expiry&&(this.client_secret_expiry=e.client_secret_expiry.toString().substring(0,10)),e?.id&&(this.id=e.id)}get provider(){return ws.PROVIDER_ID}static getSchema(){const e=ws.getSchema();return{type:"object",required:["url","client_id","tenant_id","client_secret","client_secret_expiry","email_claim","prompt"],properties:{id:{type:"string",format:"uuid"},url:e.properties.url,client_id:e.properties.client_id,tenant_id:e.properties.tenant_id,client_secret:e.properties.client_secret,client_secret_expiry:e.properties.client_secret_expiry,email_claim:e.properties.email_claim,prompt:e.properties.prompt}}}static isDataDifferent(e,t){return["url","client_id","tenant_id","client_secret","client_secret_expiry","email_claim","prompt"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Cs)||Cs.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,url:this.url,client_id:this.client_id,tenant_id:this.tenant_id,client_secret:this.client_secret,client_secret_expiry:this.client_secret_expiry,email_claim:this.email_claim,prompt:this.prompt}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Cs(a)}validate(){const e=Cs.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,url:t.url,client_id:t.client_id,tenant_id:t.tenant_id,client_secret:t.client_secret,client_secret_expiry:t.client_secret_expiry,email_claim:t.email_claim,prompt:t.prompt};return new Cs(a)}toEntityDto(){let e=this.client_secret_expiry;return this.client_secret_expiry&&(e+=" 00:00:00"),{provider:this.provider,data:{url:this.url,client_id:this.client_id,tenant_id:this.tenant_id,client_secret:this.client_secret,client_secret_expiry:e,email_claim:this.email_claim,prompt:this.prompt}}}}const Ss=Cs,xs=/^https:\/\/.+[^\/]$/;class Ns extends he{constructor(e){super(ye.validate(Ns.ENTITY_NAME,e,Ns.getSchema()))}static getSchema(){return{type:"object",required:["url","openid_configuration_path","scope","client_id","client_secret"],properties:{url:{type:"string",pattern:xs},openid_configuration_path:{type:"string",minLength:1},scope:{type:"string",minLength:1},client_id:{type:"string",minLength:1},client_secret:{type:"string",minLength:1}}}}static get ENTITY_NAME(){return"OAuth2SsoSettings"}static get PROVIDER_ID(){return"oauth2"}}const _s=Ns;class Rs{constructor(e={}){this.url=e?.url,this.openid_configuration_path=e?.openid_configuration_path,this.scope=e?.scope,this.client_id=e?.client_id,this.client_secret=e?.client_secret,e?.id&&(this.id=e.id)}get provider(){return _s.PROVIDER_ID}static getSchema(){const e=_s.getSchema();return{type:"object",required:["url","openid_configuration_path","scope","client_id","client_secret"],properties:{id:{type:"string",format:"uuid"},url:e.properties.url,openid_configuration_path:e.properties.openid_configuration_path,scope:e.properties.scope,client_id:e.properties.client_id,client_secret:e.properties.client_secret}}}static isDataDifferent(e,t){return["url","openid_configuration_path","scope","client_id","client_secret"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Rs)||Rs.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,url:this.url,openid_configuration_path:this.openid_configuration_path,scope:this.scope,client_id:this.client_id,client_secret:this.client_secret}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Rs(a)}validate(){const e=Rs.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,url:t.url,openid_configuration_path:t.openid_configuration_path,scope:t.scope,client_id:t.client_id,client_secret:t.client_secret};return new Rs(a)}toEntityDto(){return{provider:this.provider,data:{url:this.url,openid_configuration_path:this.openid_configuration_path,scope:this.scope,client_id:this.client_id,client_secret:this.client_secret}}}}const Is=Rs,As=["https://accounts.google.com"];class Ps extends he{constructor(e){super(ye.validate(Ps.ENTITY_NAME,e,Ps.getSchema()))}static getSchema(){return{type:"object",required:["client_id","client_secret"],properties:{client_id:{type:"string",minLength:1},client_secret:{type:"string",minLength:1}}}}static get ENTITY_NAME(){return"GoogleSsoSettings"}static get PROVIDER_ID(){return"google"}static get SUPPORTED_URLS(){return As}}const Ds=Ps;class Ls{constructor(e={}){this.client_id=e?.client_id,this.client_secret=e?.client_secret,e?.id&&(this.id=e.id)}get provider(){return Ds.PROVIDER_ID}static getSchema(){const e=Ds.getSchema();return{type:"object",required:["client_id","client_secret"],properties:{id:{type:"string",format:"uuid"},client_id:e.properties.client_id,client_secret:e.properties.client_secret}}}static isDataDifferent(e,t){return["client_id","client_secret"].some((a=>e[a]!==t[a]))}isDataDifferent(e){return!(e instanceof Ls)||Ls.isDataDifferent(this,e)}toDto(){return{id:this.id,provider:this.provider,client_id:this.client_id,client_secret:this.client_secret}}cloneWithMutation(e,t){const a=this.toDto();return a[e]=t,new Ls(a)}validate(){const e=Ls.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){if(!(e instanceof ue))throw e;return e}return new ue}static fromEntityDto(e){const t=e.data,a={id:e?.id,client_id:t.client_id,client_secret:t.client_secret};return new Ls(a)}toEntityDto(){return{provider:this.provider,data:{client_id:this.client_id,client_secret:this.client_secret}}}}const Ts=Ls;function Us(){return Us=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},isProcessing:()=>{},loadSsoConfiguration:()=>{},getSsoConfiguration:()=>{},getProviderList:()=>{},isSsoConfigActivated:()=>{},isDataReady:()=>{},save:()=>{},disableSso:()=>{},hasFormChanged:()=>{},validateData:()=>{},saveAndTestConfiguration:()=>{},openTestDialog:()=>{},handleError:()=>{},getErrors:()=>{},deleteSettings:()=>{},showDeleteConfirmationDialog:()=>{}});class zs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.isSsoConfigExisting=!1,this.shouldFocusOnError=!1}get defaultState(){return{ssoConfig:null,providers:[],errors:null,originalConfig:null,cachedSsoConfig:{},isLoaded:!1,processing:!1,hasBeenValidated:!1,hasFormChanged:this.hasFormChanged.bind(this),isProcessing:this.isProcessing.bind(this),isDataReady:this.isDataReady.bind(this),loadSsoConfiguration:this.loadSsoConfiguration.bind(this),getSsoConfiguration:this.getSsoConfiguration.bind(this),getProviderList:this.getProviderList.bind(this),isSsoConfigActivated:this.isSsoConfigActivated.bind(this),changeProvider:this.changeProvider.bind(this),disableSso:this.disableSso.bind(this),setValue:this.setValue.bind(this),validateData:this.validateData.bind(this),saveAndTestConfiguration:this.saveAndTestConfiguration.bind(this),handleError:this.handleError.bind(this),getErrors:this.getErrors.bind(this),deleteSettings:this.deleteSettings.bind(this),canDeleteSettings:this.canDeleteSettings.bind(this),showDeleteConfirmationDialog:this.showDeleteConfirmationDialog.bind(this),consumeFocusOnError:this.consumeFocusOnError.bind(this)}}bindCallbacks(){this.handleTestConfigCloseDialog=this.handleTestConfigCloseDialog.bind(this),this.handleSettingsActivation=this.handleSettingsActivation.bind(this)}async loadSsoConfiguration(){let e=null;try{e=await this.props.context.port.request("passbolt.sso.get-current")}catch(e){return void this.props.dialogContext.open(je,{error:e})}this.isSsoConfigExisting=Boolean(e.provider);const t=this.getSsoProviderViewModel(e);this.setState({ssoConfig:t,originalConfig:t,providers:e.providers,isLoaded:!0})}getSsoProviderViewModel(e){if(!e?.provider)return null;switch(e.provider){case ws.PROVIDER_ID:return Ss.fromEntityDto(e);case Ds.PROVIDER_ID:return Ts.fromEntityDto(e);case _s.PROVIDER_ID:return Is.fromEntityDto(e)}return null}getSsoConfiguration(){return this.state.ssoConfig}getProviderList(){return this.state.providers}getSsoConfigurationDto(){return this.state.ssoConfig.toEntityDto()}isSsoConfigActivated(){return Boolean(this.state.ssoConfig)}hasFormChanged(){return this.state.isDataModified}setValue(e,t){const a=this.state.ssoConfig.cloneWithMutation(e,t),n=!!this.state.originalConfig&&this.state.originalConfig.isDataDifferent(a);this.setState({ssoConfig:a,isDataModified:n},(()=>{this.state.hasBeenValidated&&this.validateData()}))}disableSso(){const e=this.state.cachedSsoConfig;e[this.state.ssoConfig.provider]=this.state.ssoConfig,this.setState({ssoConfig:null,cachedSsoConfig:e})}isDataReady(){return this.state.isLoaded}isProcessing(){return this.state.processing}changeProvider(e){if(e.disabled)return;const t=this.state.cachedSsoConfig,a=this.state.ssoConfig?.provider;a&&(t[a]=this.state.ssoConfig),this.setState({ssoConfig:this.getCachedSsoConfigOrDefault(e.id),cachedSsoConfig:t},(()=>{this.state.hasBeenValidated&&this.validateData()}))}getCachedSsoConfigOrDefault(e){if(this.state.cachedSsoConfig[e])return this.state.cachedSsoConfig[e];const t=hs.find((t=>t.id===e)),a={id:this.state.ssoConfig?.id,provider:e,data:t.defaultConfig};return this.getSsoProviderViewModel(a)}validateData(e=!1){const t=this.state.ssoConfig.validate(),a=t.hasErrors(),n=a?t:null;return this.setState({errors:n,hasBeenValidated:!0}),this.shouldFocusOnError=e&&a,!a}consumeFocusOnError(){const e=this.shouldFocusOnError;return this.shouldFocusOnError=!1,e}getErrors(){return this.state.errors}async saveAndTestConfiguration(){this.setState({processing:!0});const e=this.getSsoConfigurationDto();let t;try{t=await this.props.context.port.request("passbolt.sso.save-draft",e)}catch(e){return this.handleError(e),void this.setState({processing:!1})}await this.runTestConfig(t);const a=this.getSsoProviderViewModel(t);this.setState({ssoConfig:a})}canDeleteSettings(){return this.isSsoConfigExisting&&null===this.state.ssoConfig}showDeleteConfirmationDialog(){this.props.dialogContext.open(ys)}async deleteSettings(){this.setState({processing:!0});try{const e=this.state.originalConfig.id;await this.props.context.port.request("passbolt.sso.delete-settings",e),this.props.actionFeedbackContext.displaySuccess(this.props.t("The SSO settings have been deleted successfully")),this.isSsoConfigExisting=!1,this.setState({ssoConfig:null,originalConfig:null,processing:!1})}catch(e){this.handleError(e),this.setState({processing:!1})}}async runTestConfig(e){const t=hs.find((t=>t.id===e.provider));this.props.dialogContext.open(bs,{provider:t,configurationId:e.id,handleClose:this.handleTestConfigCloseDialog,onSuccessfulSettingsActivation:this.handleSettingsActivation})}handleTestConfigCloseDialog(){this.setState({processing:!1})}handleSettingsActivation(){this.isSsoConfigExisting=!0,this.setState({originalConfig:this.state.ssoConfig})}handleError(e){console.error(e),this.props.dialogContext.open(je,{error:e})}render(){return n.createElement(js.Provider,{value:this.state},this.props.children)}}function Ms(e){return class extends n.Component{render(){return n.createElement(js.Consumer,null,(t=>n.createElement(e,Us({adminSsoContext:t},this.props))))}}}zs.propTypes={context:o().any,children:o().any,accountRecoveryContext:o().object,dialogContext:o().object,actionFeedbackContext:o().object,t:o().func},I(d(g((0,k.Z)("common")(zs))));class Os extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveClick(){const e=this.props.adminSsoContext;e.canDeleteSettings()?e.showDeleteConfirmationDialog():e.validateData(!0)&&await e.saveAndTestConfiguration()}isSaveEnabled(){return Boolean(this.props.adminSsoContext.ssoConfig?.provider)||this.props.adminSsoContext.canDeleteSettings()}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Os.propTypes={adminSsoContext:o().object};const Fs=Ms((0,k.Z)("common")(Os));class qs extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks(),this.createRefs()}get defaultState(){return{advancedSettingsOpened:!1}}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handleCopyRedirectUrl=this.handleCopyRedirectUrl.bind(this),this.handleAdvancedSettingsCLick=this.handleAdvancedSettingsCLick.bind(this)}createRefs(){this.clientIdInputRef=n.createRef(),this.tenantIdInputRef=n.createRef(),this.clientSecretInputRef=n.createRef(),this.clientSecretExpiryInputRef=n.createRef()}componentDidUpdate(){if(!this.props.adminSsoContext.consumeFocusOnError())return;const e=this.props.adminSsoContext.getErrors();switch(this.getFirstFieldInError(e,["client_id","tenant_id","client_secret","client_secret_expiry"])){case"client_id":this.clientIdInputRef.current.focus();break;case"tenant_id":this.tenantIdInputRef.current.focus();break;case"client_secret":this.clientSecretInputRef.current.focus();break;case"client_secret_expiry":this.clientSecretExpiryInputRef.current.focus()}}getFirstFieldInError(e,t){for(let a=0;a({value:e,label:e})))}get emailClaimList(){return[{value:"email",label:this.translate("Email")},{value:"preferred_username",label:this.translate("Preferred username")},{value:"upn",label:this.translate("UPN")}]}get promptOptionList(){return[{value:"login",label:this.translate("Login")},{value:"none",label:this.translate("None")}]}get fullRedirectUrl(){return`${this.props.context.userSettings.getTrustedDomain()}/sso/azure/redirect`}get translate(){return this.props.t}render(){const e=this.props.adminSsoContext,t=e.getSsoConfiguration(),a=e.getErrors();return n.createElement(n.Fragment,null,n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"sso-azure-url-input"},n.createElement(v.c,null,"Login URL")),n.createElement(Ft,{id:"sso-azure-url-input",name:"url",items:this.availableUrlList,value:t.url,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"The Azure AD authentication endpoint. See ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/active-directory/develop/authentication-national-cloud#azure-ad-authentication-endpoints",rel:"noopener noreferrer",target:"_blank"},"alternatives"),"."))),n.createElement("div",{className:"input text input-wrapper "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Redirect URL")),n.createElement("div",{className:"button-inline"},n.createElement("input",{id:"sso-redirect-url-input",type:"text",className:"fluid form-element disabled",name:"redirect_url",value:this.fullRedirectUrl,placeholder:this.translate("Redirect URL"),readOnly:!0,disabled:!0}),n.createElement("button",{type:"button",onClick:this.handleCopyRedirectUrl,className:"copy-to-clipboard button-icon"},n.createElement(Re,{name:"copy-to-clipboard"}))),n.createElement("p",null,n.createElement(v.c,null,"The URL to provide to Azure when registering the application."))),n.createElement("hr",null),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Application (client) ID")),n.createElement("input",{id:"sso-azure-client-id-input",type:"text",className:"fluid form-element",name:"client_id",ref:this.clientIdInputRef,value:t.client_id,onChange:this.handleInputChange,placeholder:this.translate("Application (client) ID"),disabled:this.hasAllInputDisabled()}),a?.hasError("client_id")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_id"))),n.createElement("p",null,n.createElement(v.c,null,"The public identifier for the app in Azure in UUID format.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/healthcare-apis/register-application#application-id-client-id",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Directory (tenant) ID")),n.createElement("input",{id:"sso-azure-tenant-id-input",type:"text",className:"fluid form-element",name:"tenant_id",ref:this.tenantIdInputRef,value:t.tenant_id,onChange:this.handleInputChange,placeholder:this.translate("Directory ID"),disabled:this.hasAllInputDisabled()}),a?.hasError("tenant_id")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("tenant_id"))),n.createElement("p",null,n.createElement(v.c,null,"The Azure Active Directory tenant ID, in UUID format.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-gb/azure/active-directory/fundamentals/active-directory-how-to-find-tenant",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Secret")),n.createElement(It,{id:"sso-azure-secret-input",className:"fluid form-element",onChange:this.handleInputChange,autoComplete:"off",name:"client_secret",placeholder:this.translate("Secret"),disabled:this.hasAllInputDisabled(),value:t.client_secret,preview:!0,inputRef:this.clientSecretInputRef}),a?.hasError("client_secret")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_secret"))),n.createElement("p",null,n.createElement(v.c,null,"Allows Azure and Passbolt API to securely share information.")," ",n.createElement("a",{href:"https://learn.microsoft.com/en-us/azure/marketplace/create-or-update-client-ids-and-secrets#add-a-client-id-and-client-secret",rel:"noopener noreferrer",target:"_blank"},n.createElement(v.c,null,"Where to find it?")))),n.createElement("div",{className:"input text date-wrapper required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",null,n.createElement(v.c,null,"Secret expiry")),n.createElement("div",{className:"button-inline"},n.createElement("input",{id:"sso-azure-secret-expiry-input",type:"date",className:"fluid form-element "+(t.client_secret_expiry?"":"empty"),name:"client_secret_expiry",ref:this.clientSecretExpiryInputRef,value:t.client_secret_expiry||"",onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}),n.createElement(Re,{name:"calendar"})),a?.hasError("client_secret_expiry")&&n.createElement("div",{className:"error-message"},this.displayErrors(a.getError("client_secret_expiry")))),n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning"),": This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.")),n.createElement("div",null,n.createElement("div",{className:"accordion operation-details "+(this.state.advancedSettingsOpened?"":"closed")},n.createElement("div",{className:"accordion-header",onClick:this.handleAdvancedSettingsCLick},n.createElement("button",{type:"button",className:"link no-border",id:"advanced-settings-panel-button"},n.createElement(v.c,null,"Advanced settings")," ",n.createElement(Re,{name:this.state.advancedSettingsOpened?"caret-down":"caret-right"}))))),this.state.advancedSettingsOpened&&n.createElement(n.Fragment,null,n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"email-claim-input"},n.createElement(v.c,null,"Email claim")),n.createElement(Ft,{id:"email-claim-input",name:"email_claim",items:this.emailClaimList,value:t.email_claim,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"Defines which Azure field needs to be used as Passbolt username."))),"upn"===t.email_claim&&n.createElement("div",{className:"warning message"},n.createElement(v.c,null,n.createElement("b",null,"Warning"),": UPN is not active by default on Azure and requires a specific option set on Azure to be working.")),n.createElement("div",{className:"select-wrapper input required "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"prompt-input"},n.createElement(v.c,null,"Prompt")),n.createElement(Ft,{id:"prompt-input",name:"prompt",items:this.promptOptionList,value:t.prompt,onChange:this.handleInputChange}),n.createElement("p",null,n.createElement(v.c,null,"Defines the Azure login behaviour by prompting the user to fully login each time or not.")))))}}qs.propTypes={adminSsoContext:o().object,actionFeedbackContext:o().any,context:o().any,t:o().func};const Ws=I(d(Ms((0,k.Z)("common")(qs))));class Vs extends n.PureComponent{constructor(e){super(e),this.bindCallbacks(),this.createRefs()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this),this.handleCopyRedirectUrl=this.handleCopyRedirectUrl.bind(this)}createRefs(){this.clientIdInputRef=n.createRef(),this.clientSecretInputRef=n.createRef()}componentDidUpdate(){if(!this.props.adminSsoContext.consumeFocusOnError())return;const e=this.props.adminSsoContext.getErrors();switch(this.getFirstFieldInError(e,["client_id","client_secret"])){case"client_id":this.clientIdInputRef.current.focus();break;case"client_secret":this.clientSecretInputRef.current.focus()}}getFirstFieldInError(e,t){for(let a=0;a{const a={...t};return a.disabled=Boolean(a.disabled)||!e.includes(a.id),a})).filter((e=>!e.disabled||e.disabled&&!e?.hiddenIfDisabled))}get supportedSsoProviders(){const e=this.state.providers,t=[];return e.forEach((e=>{const a=hs.find((t=>t.id===e));a&&!a.disabled&&t.push({value:a.id,label:a.name})})),t}isReady(){return this.props.adminSsoContext.isDataReady()}render(){const e=this.props.adminSsoContext,t=e.getSsoConfiguration(),a=e.isSsoConfigActivated();return n.createElement("div",{className:"row"},n.createElement("div",{className:"third-party-provider-settings sso-settings col8 main-column"},n.createElement("h3",null,n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"ssoToggle",onChange:this.handleSsoSettingToggle,checked:a,disabled:this.hasAllInputDisabled(),id:"ssoToggle"}),n.createElement("label",{htmlFor:"ssoToggle"},n.createElement(v.c,null,"Single Sign-On")))),this.props.adminSsoContext.hasFormChanged()&&n.createElement("div",{className:"warning message",id:"sso-setting-overridden-banner"},n.createElement("p",null,n.createElement(v.c,null,"Warning, Don't forget to save your settings to apply your modification."))),this.isReady()&&!a&&n.createElement(n.Fragment,null,n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Select a provider")),n.createElement("div",{className:"provider-list"},this.allSsoProviders.map((e=>n.createElement("div",{key:e.id,className:"provider button "+(e.disabled?"disabled":""),id:e.id,onClick:()=>this.props.adminSsoContext.changeProvider(e)},n.createElement("div",{className:"provider-logo"},e.icon),n.createElement("p",{className:"provider-name"},e.name,n.createElement("br",null),e.disabled&&n.createElement(v.c,null,"(not yet available)"))))))),this.isReady()&&a&&n.createElement("form",{className:"form"},n.createElement("div",{className:"select-wrapper input"},n.createElement("label",{htmlFor:"sso-provider-input"},n.createElement(v.c,null,"Single Sign-On provider")),n.createElement(Ft,{id:"sso-provider-input",name:"provider",items:this.supportedSsoProviders,value:t?.provider,onChange:this.handleProviderInputChange})),n.createElement("hr",null),t.provider===ws.PROVIDER_ID&&n.createElement(Ws,null),t.provider===Ds.PROVIDER_ID&&n.createElement(Bs,null),t.provider===_s.PROVIDER_ID&&n.createElement(Ks,null))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help warning message",id:"sso-setting-security-warning-banner"},n.createElement("h3",null,n.createElement(v.c,null,"Important notice:")),n.createElement("p",null,n.createElement(v.c,null,"Enabling SSO changes the security risks.")," ",n.createElement(v.c,null,"For example an attacker with a local machine access maybe be able to access secrets, if the user is still logged in with the Identity provider.")," ",n.createElement(v.c,null,"Make sure users follow screen lock best practices."),n.createElement("a",{href:"https://help.passbolt.com/configure/sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Learn more")))),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about SSO, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),"azure"===t?.provider&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a AzureAD SSO?")),n.createElement("a",{className:"button",href:"https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/add-application-portal-setup-sso",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"external-link"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation")))),"google"===t?.provider&&n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"How do I configure a Google SSO?")),n.createElement("a",{className:"button",href:"https://developers.google.com/identity/openid-connect/openid-connect",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"external-link"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}Hs.propTypes={administrationWorkspaceContext:o().object,adminSsoContext:o().object,actionFeedbackContext:o().any,context:o().any,t:o().func};const $s=I(d(O(Ms((0,k.Z)("common")(Hs))))),Zs=class{constructor(e={remember_me_for_a_month:!1}){this.policy=e.policy,this.rememberMeForAMonth=e.remember_me_for_a_month}};function Ys(){return Ys=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},getSettings:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},clearContext:()=>{},save:()=>{}});class Qs extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.mfaPolicyService=new it(t)}get defaultState(){return{settings:new Zs,currentSettings:new Zs,processing:!0,getCurrentSettings:this.getCurrentSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),save:this.save.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.mfaPolicyService.find(),a=new Zs(t);this.setState({currentSettings:a}),this.setState({settings:a},e),this.setProcessing(!1)}async save(){this.setProcessing(!0);const e=new class{constructor(e={rememberMeForAMonth:!1}){this.policy=e.policy||"opt-in",this.remember_me_for_a_month=e.rememberMeForAMonth}}(this.state.settings);await this.mfaPolicyService.save(e),await this.findSettings()}getCurrentSettings(){return this.state.currentSettings}getSettings(){return this.state.settings}setSettings(e,t,a=(()=>{})){const n=Object.assign({},this.state.settings,{[e]:t});this.setState({settings:n},a)}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}render(){return n.createElement(Js.Provider,{value:this.state},this.props.children)}}Qs.propTypes={context:o().any,children:o().any,t:o().any,actionFeedbackContext:o().object};const Xs=I(Qs);function eo(e){return class extends n.Component{render(){return n.createElement(Js.Consumer,null,(t=>n.createElement(e,Ys({adminMfaPolicyContext:t},this.props))))}}}class to extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}isSaveEnabled(){return!this.props.adminMfaPolicyContext.isProcessing()}async handleSave(){if(this.isSaveEnabled())try{await this.props.adminMfaPolicyContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}finally{this.props.adminMfaPolicyContext.setProcessing(!1)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The MFA policy settings were updated."))}async handleSaveError(e){"UserAbortsOperationError"!==e.name&&(console.error(e),await this.props.actionFeedbackContext.displayError(e.message))}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}to.propTypes={adminMfaPolicyContext:o().object,actionFeedbackContext:o().object,t:o().func};const ao=eo(d((0,k.Z)("common")(to)));class no extends n.Component{constructor(e){super(e),this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(ao),await this.findSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminMfaPolicyContext.clearContext()}bindCallbacks(){this.handleInputChange=this.handleInputChange.bind(this)}async findSettings(){await this.props.adminMfaPolicyContext.findSettings()}async handleInputChange(e){const t=e.target.name;let a=e.target.value;"rememberMeForAMonth"===t&&(a=e.target.checked),this.props.adminMfaPolicyContext.setSettings(t,a)}hasAllInputDisabled(){return this.props.adminMfaPolicyContext.isProcessing()}render(){const e=this.props.adminMfaPolicyContext.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"mfa-policy-settings col8 main-column"},n.createElement("h3",{id:"mfa-policy-settings-title"},n.createElement(v.c,null,"MFA Policy")),this.props.adminMfaPolicyContext.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"mfa-policy-setting-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),n.createElement("form",{className:"form"},n.createElement("h4",{className:"no-border",id:"mfa-policy-subtitle"},n.createElement(v.c,null,"Default users multi factor authentication policy")),n.createElement("p",{id:"mfa-policy-description"},n.createElement(v.c,null,"You can choose the default behaviour of multi factor authentication for all users.")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio "+("mandatory"===e?.policy?"checked":""),id:"mfa-policy-mandatory"},n.createElement("input",{type:"radio",value:"mandatory",onChange:this.handleInputChange,name:"policy",checked:"mandatory"===e?.policy,id:"mfa-policy-mandatory-radio",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"mfa-policy-mandatory-radio"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Prompt")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Users have to enable multi factor authentication. If they don't, they will be reminded every time they log in.")))),n.createElement("div",{className:"input radio "+("opt-in"===e?.policy?"checked":""),id:"mfa-policy-opt-in"},n.createElement("input",{type:"radio",value:"opt-in",onChange:this.handleInputChange,name:"policy",checked:"opt-in"===e?.policy,id:"mfa-policy-opt-in-radio",disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"mfa-policy-opt-in-radio"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Opt-in (default)")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Users have the choice to enable multi factor authentication in their profile workspace."))))),n.createElement("h4",{id:"mfa-policy-remember-subtitle"},"Remember a device for a month"),n.createElement("span",{className:"input toggle-switch form-element "},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"rememberMeForAMonth",onChange:this.handleInputChange,disabled:this.hasAllInputDisabled(),checked:e?.rememberMeForAMonth,id:"remember-toggle-button"}),n.createElement("label",{htmlFor:"remember-toggle-button"},n.createElement(v.c,null,"Allow “Remember this device for a month.“ option during MFA."))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about MFA policy settings, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/mfa-policy",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}no.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminMfaPolicyContext:o().object,t:o().func};const io=I(O(eo((0,k.Z)("common")(no))));class so extends he{constructor(e){super(ye.validate(so.ENTITY_NAME,e,so.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",maxLength:255}}}}get id(){return this._props.id}get name(){return this._props.name}static get ENTITY_NAME(){return"Action"}}const oo=so;class ro extends he{constructor(e){super(ye.validate(ro.ENTITY_NAME,e,ro.getSchema()))}static getSchema(){return{type:"object",required:["id","name"],properties:{id:{type:"string",format:"uuid"},name:{type:"string",maxLength:255}}}}get id(){return this._props.id}get name(){return this._props.name}static get ENTITY_NAME(){return"UiAction"}}const lo=ro;class co extends he{constructor(e){super(ye.validate(co.ENTITY_NAME,e,co.getSchema())),this._props.action&&(this._action=new oo(this._props.action)),delete this._props.action,this._props.ui_action&&(this._ui_action=new lo(this._props.ui_action)),delete this._props.ui_action}static getSchema(){return{type:"object",required:["id","role_id","foreign_model","foreign_id","control_function"],properties:{id:{type:"string",format:"uuid"},role_id:{type:"string",format:"uuid"},foreign_model:{type:"string",enum:[co.FOREIGN_MODEL_ACTION,co.FOREIGN_MODEL_UI_ACTION]},foreign_id:{type:"string",format:"uuid"},control_function:{type:"string",enum:[se,oe]},action:oo.getSchema(),ui_action:lo.getSchema()}}}toDto(e){const t=Object.assign({},this._props);return e?(this._action&&e.action&&(t.action=this._action.toDto()),this._ui_action&&e.ui_action&&(t.ui_action=this._ui_action.toDto()),t):t}toUpdateDto(){return{id:this.id,control_function:this.controlFunction}}toJSON(){return this.toDto(co.ALL_CONTAIN_OPTIONS)}get id(){return this._props.id}get roleId(){return this._props.role_id}get foreignModel(){return this._props.foreign_model}get foreignId(){return this._props.foreign_id}get controlFunction(){return this._props.control_function}set controlFunction(e){ye.validateProp("control_function",e,co.getSchema().properties.control_function),this._props.control_function=e}get action(){return this._action||null}get uiAction(){return this._ui_action||null}static get ENTITY_NAME(){return"Rbac"}static get ALL_CONTAIN_OPTIONS(){return{action:!0,ui_action:!0}}static get FOREIGN_MODEL_ACTION(){return"Action"}static get FOREIGN_MODEL_UI_ACTION(){return"UiAction"}}const mo=co;class ho extends he{constructor(e,t){super(e),t?(this._props=null,this._items=t):this._items=[]}toDto(){return JSON.parse(JSON.stringify(this._items))}toJSON(){return this.toDto()}get items(){return this._items}get length(){return this._items.length}[Symbol.iterator](){let e=0;return{next:()=>eObject.prototype.hasOwnProperty.call(a._props,e)&&a._props[e]===t))}getFirst(e,t){if("string"!=typeof e||"string"!=typeof t)throw new TypeError("EntityCollection getFirst by expect propName and search to be strings");const a=this.getAll(e,t);if(a&&a.length)return a[0]}push(e){return this._items.push(e),this._items.length}unshift(e){return this._items.unshift(e),this._items.length}}const po=ho;class uo extends po{constructor(e,t=!1){super(ye.validate(uo.ENTITY_NAME,e,uo.getSchema())),this._props.forEach((e=>{try{this._items.push(new mo(e))}catch(e){if(!t)throw e}})),this._props=null}static getSchema(){return{type:"array",items:mo.getSchema()}}get rbacs(){return this._items}toBulkUpdateDto(){return this.items.map((e=>e.toUpdateDto()))}findRbacByRoleAndUiActionName(e,t){if(!(e instanceof ke))throw new Error("The role parameter should be a role entity.");if("string"!=typeof t&&!(t instanceof String))throw new Error("The name parameter should be a valid string.");return this.rbacs.find((a=>a.roleId===e.id&&a.uiAction?.name===t))}findRbacByActionName(e){if("string"!=typeof e&&!(e instanceof String))throw new Error("The name parameter should be a valid string.");return this.rbacs.find((t=>t.uiAction?.name===e))}push(e){if(!e||"object"!=typeof e)throw new TypeError("The function expect an object as parameter");e instanceof mo&&(e=e.toDto(mo.ALL_CONTAIN_OPTIONS));const t=new mo(e);super.push(t)}addOrReplace(e){const t=this.items.findIndex((t=>t.id===e.id));t>-1?this._items[t]=e:this.push(e)}remove(e){const t=this.items.length;let a=0;for(;a{},setRbacsUpdated:()=>{},save:()=>{},isProcessing:()=>{},hasSettingsChanges:()=>{},clearContext:()=>{}});class Co extends n.Component{constructor(e){super(e),this.state=this.defaultState;const t=e.context.getApiClientOptions();this.rbacService=new yo(t),this.roleService=new ko(t)}get defaultState(){return{processing:!1,rbacs:null,rbacsUpdated:new go([]),setRbacs:this.setRbacs.bind(this),setRbacsUpdated:this.setRbacsUpdated.bind(this),isProcessing:this.isProcessing.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),save:this.save.bind(this),clearContext:this.clearContext.bind(this)}}async setRbacs(e){this.setState({rbacs:e})}async setRbacsUpdated(e){this.setState({rbacsUpdated:e})}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return this.state.rbacsUpdated.rbacs.length>0}clearContext(){const{rbacs:e,rbacsUpdated:t,processing:a}=this.defaultState;this.setState({rbacs:e,rbacsUpdated:t,processing:a})}async save(){this.setProcessing(!0);try{const e=this.state.rbacsUpdated.toBulkUpdateDto(),t=await this.rbacService.updateAll(e,{ui_action:!0,action:!0}),a=this.state.rbacs;t.forEach((e=>a.addOrReplace(new mo(e))));const n=new go([]);this.setState({rbacs:a,rbacsUpdated:n})}finally{this.setProcessing(!1)}}render(){return n.createElement(wo.Provider,{value:this.state},this.props.children)}}Co.propTypes={context:o().any,children:o().any};const So=I(Co);function xo(e){return class extends n.Component{render(){return n.createElement(wo.Consumer,null,(t=>n.createElement(e,Eo({adminRbacContext:t},this.props))))}}}class No extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSaveClick=this.handleSaveClick.bind(this)}async handleSaveClick(){try{await this.props.adminRbacContext.save(),this.handleSaveSuccess()}catch(e){this.handleSaveError(e)}}isSaveEnabled(){return!this.props.adminRbacContext.isProcessing()&&this.props.adminRbacContext.hasSettingsChanges()}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The role-based access control settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message)}render(){return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:!this.isSaveEnabled(),onClick:this.handleSaveClick},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}No.propTypes={context:o().object,adminRbacContext:o().object,actionFeedbackContext:o().object,t:o().func};const _o=xo(d((0,k.Z)("common")(No)));class Ro extends n.Component{render(){return n.createElement(n.Fragment,null,n.createElement("div",{className:`flex-container inner level-${this.props.level}`},n.createElement("div",{className:"flex-item first border-right"},n.createElement("span",null,n.createElement(Re,{name:"caret-down",baseline:!0}),"  ",this.props.label)),n.createElement("div",{className:"flex-item border-right"}," "),n.createElement("div",{className:"flex-item"}," ")),this.props.children)}}Ro.propTypes={label:o().string,level:o().number,t:o().func,children:o().any};const Io=(0,k.Z)("common")(Ro);class Ao extends n.Component{constructor(e){super(e),this.handleInputChange=this.handleInputChange.bind(this)}handleInputChange(e,t){this.props.onChange(t,this.props.actionName,e.target.value)}get allowedCtlFunctions(){return[{value:se,label:this.props.t("Allow")},{value:oe,label:this.props.t("Deny")}]}get rowClassName(){return this.props.actionName.toLowerCase().replaceAll(/[^\w]/gi,"-")}getCtlFunctionForRole(e){const t=this.props.rbacsUpdated?.findRbacByRoleAndUiActionName(e,this.props.actionName)||this.props.rbacs?.findRbacByRoleAndUiActionName(e,this.props.actionName);return t?.controlFunction||null}hasChanged(){return!!this.props.rbacsUpdated.findRbacByActionName(this.props.actionName)}render(){let e=[];return this.props.roles&&(e=this.props.roles.items.filter((e=>"user"===e.name))),n.createElement(n.Fragment,null,n.createElement("div",{className:`rbac-row ${this.rowClassName} flex-container inner level-${this.props.level} ${this.hasChanged()?"highlighted":""}`},n.createElement("div",{className:"flex-item first border-right"},n.createElement("span",null,this.props.label)),n.createElement("div",{className:"flex-item border-right"},n.createElement(Ft,{className:"medium admin",items:this.allowedCtlFunctions,value:se,disabled:!0})),e.map((e=>n.createElement("div",{key:`${this.props.actionName}-${e.id}`,className:"flex-item input"},n.createElement(Ft,{className:`medium ${e.name}`,items:this.allowedCtlFunctions,value:this.getCtlFunctionForRole(e),disabled:!(this.props.rbacs?.length>0&&this.getCtlFunctionForRole(e)),onChange:t=>this.handleInputChange(t,e)}),!this.getCtlFunctionForRole(e)&&n.createElement("div",{className:"warning-message"},"There is no valid setting found for this action."))))))}}Ao.propTypes={label:o().string.isRequired,level:o().number.isRequired,actionName:o().string.isRequired,rbacs:o().object,rbacsUpdated:o().object,roles:o().object.isRequired,onChange:o().func.isRequired,t:o().func};const Po=(0,k.Z)("common")(Ao);class Do extends Error{constructor(e,t,a){if(super(a=a||"Entity collection error."),"number"!=typeof e)throw new TypeError("EntityCollectionError requires a valid position");if(!t||"string"!=typeof t)throw new TypeError("EntityCollectionError requires a valid rule");if(!a||"string"!=typeof a)throw new TypeError("EntityCollectionError requires a valid rule");this.position=e,this.rule=t}}const Lo=Do;class To extends po{constructor(e){super(ye.validate(To.ENTITY_NAME,e,To.getSchema())),this._props.forEach((e=>{this.push(new ke(e))})),this._props=null}static getSchema(){return{type:"array",items:ke.getSchema()}}get roles(){return this._items}get ids(){return this._items.map((e=>e.id))}assertUniqueId(e){if(!e.id)return;const t=this.roles.length;let a=0;for(;a{},getSettingsErrors:()=>{},setSettings:()=>{},hasSettingsChanges:()=>{},findSettings:()=>{},setProcessing:()=>{},isProcessing:()=>{},isDataValid:()=>{},clearContext:()=>{},save:()=>{},validateData:()=>{},getPasswordGeneratorMasks:()=>{},getEntropyForPassphraseConfiguration:()=>{},getEntropyForPasswordConfiguration:()=>{},getMinimalRequiredEntropy:()=>{},getMinimalAdvisedEntropy:()=>{},isSourceChanging:()=>{}});class Wo extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.hasDataBeenValidated=!1}get defaultState(){return{settings:new Oo,errors:{},currentSettings:new Oo,processing:!0,getSettings:this.getSettings.bind(this),getSettingsErrors:this.getSettingsErrors.bind(this),setSettings:this.setSettings.bind(this),findSettings:this.findSettings.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isProcessing:this.isProcessing.bind(this),setProcessing:this.setProcessing.bind(this),clearContext:this.clearContext.bind(this),save:this.save.bind(this),validateData:this.validateData.bind(this),getPasswordGeneratorMasks:this.getPasswordGeneratorMasks.bind(this),getEntropyForPassphraseConfiguration:this.getEntropyForPassphraseConfiguration.bind(this),getEntropyForPasswordConfiguration:this.getEntropyForPasswordConfiguration.bind(this),getMinimalRequiredEntropy:this.getMinimalRequiredEntropy.bind(this),getMinimalAdvisedEntropy:this.getMinimalAdvisedEntropy.bind(this),isSourceChanging:this.isSourceChanging.bind(this)}}async findSettings(e=(()=>{})){this.setProcessing(!0);const t=await this.props.context.port.request("passbolt.password-policies.get-admin-settings"),a=new Oo(t);this.setState({currentSettings:a,settings:a},e),this.setProcessing(!1)}validateData(){this.hasDataBeenValidated=!0;let e=!0;const t={},a=this.state.settings;a.mask_upper||a.mask_lower||a.mask_digit||a.mask_parenthesis||a.mask_char1||a.mask_char2||a.mask_char3||a.mask_char4||a.mask_char5||a.mask_emoji||(e=!1,t.masks=this.props.t("At least 1 set of characters must be selected")),a.passwordLength<8&&(e=!1,t.passwordLength=this.props.t("The password length must be set to 8 at least")),a.wordsCount<4&&(e=!1,t.wordsCount=this.props.t("The passphrase word count must be set to 4 at least")),a.wordsSeparator.length>10&&(e=!1,t.wordsSeparator=this.props.t("The words separator should be at a maximum of 10 characters long"));const n=this.getMinimalRequiredEntropy();return this.getEntropyForPassphraseConfiguration(){this.hasDataBeenValidated&&this.validateData()}))}isProcessing(){return this.state.processing}setProcessing(e){this.setState({processing:e})}hasSettingsChanges(){return JSON.stringify(this.state.currentSettings)!==JSON.stringify(this.state.settings)}isSourceChanging(){return"db"!==this.state.currentSettings?.source&&"default"!==this.state.currentSettings?.source}clearContext(){const{currentSettings:e,settings:t,processing:a}=this.defaultState;this.setState({currentSettings:e,settings:t,processing:a})}render(){return n.createElement(qo.Provider,{value:this.state},this.props.children)}}function Vo(e){return class extends n.Component{render(){return n.createElement(qo.Consumer,null,(t=>n.createElement(e,Fo({adminPasswordPoliciesContext:t},this.props))))}}}Wo.propTypes={context:o().any,children:o().any,t:o().any,actionFeedbackContext:o().object},I((0,k.Z)("common")(Wo));class Bo extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminPasswordPoliciesContext.isProcessing()}async handleSave(){if(this.isActionEnabled&&this.props.adminPasswordPoliciesContext.validateData())try{await this.props.adminPasswordPoliciesContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password policy settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message)}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}Bo.propTypes={adminPasswordPoliciesContext:o().object,actionFeedbackContext:o().object,t:o().func};const Go=Vo(d((0,k.Z)("common")(Bo)));class Ko extends n.Component{colorGradient(e,t,a,n){let i,s,o=e/100*2;return o>=1?(o-=1,i=this.hexToRgb(a),s=this.hexToRgb(n)):(i=this.hexToRgb(t),s=this.hexToRgb(a)),`rgb(${Math.floor(i.red+(s.red-i.red)*o)},${Math.floor(i.green+(s.green-i.green)*o)},${Math.floor(i.blue+(s.blue-i.blue)*o)})`}hexToRgb(e){const t=new RegExp("^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$","i").exec(e.trim());return t?{red:parseInt(t[1],16),green:parseInt(t[2],16),blue:parseInt(t[3],16)}:null}get complexityBarStyle(){const e=100-99/(1+Math.pow(this.props.entropy/90,10));return{background:`linear-gradient(to right, ${this.colorGradient(e,"#A40000","#FFA724","#0EAA00")} ${e}%, var(--complexity-bar-background-default) ${e}%`}}get entropy(){return(this.props.entropy||0).toFixed(1)}hasEntropy(){return null!==this.props.entropy&&void 0!==this.props.entropy}hasError(){return this.props.error}render(){const e=jn(this.props.entropy);return n.createElement("div",{className:"password-complexity"},n.createElement("span",{className:"complexity-text"},(this.hasEntropy()||this.hasError())&&n.createElement(n.Fragment,null,e.label," (",n.createElement(v.c,null,"entropy:")," ",this.entropy," bits)"),!this.hasEntropy()&&!this.hasError()&&n.createElement(v.c,null,"Quality")),n.createElement("span",{className:"progress"},n.createElement("span",{className:"progress-bar "+(this.hasError()?"error":""),style:this.hasEntropy()?this.complexityBarStyle:void 0})))}}Ko.defaultProps={entropy:null},Ko.propTypes={entropy:o().number,error:o().bool};const Ho=(0,k.Z)("common")(Ko);class $o extends n.Component{constructor(e){super(e),this.state={showPasswordSection:!1,showPassphraseSection:!1},this.bindCallbacks()}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Go),await this.props.adminPasswordPoliciesContext.findSettings()}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction(),this.props.adminPasswordPoliciesContext.clearContext()}bindCallbacks(){this.handleCheckboxInputChange=this.handleCheckboxInputChange.bind(this),this.handleMaskToggled=this.handleMaskToggled.bind(this),this.handlePasswordSectionToggle=this.handlePasswordSectionToggle.bind(this),this.handlePassphraseSectionToggle=this.handlePassphraseSectionToggle.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleSliderInputChange=this.handleSliderInputChange.bind(this),this.handleLengthChange=this.handleLengthChange.bind(this)}handlePasswordSectionToggle(){this.setState({showPasswordSection:!this.state.showPasswordSection})}handlePassphraseSectionToggle(){this.setState({showPassphraseSection:!this.state.showPassphraseSection})}get wordCaseList(){return[{value:"lowercase",label:this.props.t("Lower case")},{value:"uppercase",label:this.props.t("Upper case")},{value:"camelcase",label:this.props.t("Camel case")}]}get providerList(){return[{value:"password",label:this.props.t("Password")},{value:"passphrase",label:this.props.t("Passphrase")}]}handleCheckboxInputChange(e){const t=e.target.name;this.props.adminPasswordPoliciesContext.setSettings(t,e.target.checked)}handleSliderInputChange(e){const t=parseInt(e.target.value,10),a=e.target.name;this.props.adminPasswordPoliciesContext.setSettings(a,t)}handleInputChange(e){const t=e.target,a=t.value,n=t.name;this.props.adminPasswordPoliciesContext.setSettings(n,a)}handleLengthChange(e){const t=e.target,a=parseInt(t.value,10),n=t.name;this.props.adminPasswordPoliciesContext.setSettings(n,a)}handleMaskToggled(e){const t=!this.props.adminPasswordPoliciesContext.getSettings()[e];this.props.adminPasswordPoliciesContext.setSettings(e,t)}hasAllInputDisabled(){return this.props.adminPasswordPoliciesContext.isProcessing()}get settingsSource(){return this.props.adminPasswordPoliciesContext?.getSettings()?.source}get configurationSource(){return{legacyEnv:this.props.t("environment variables (legacy)"),env:this.props.t("environment variables"),legacyFile:this.props.t("file (legacy)"),file:this.props.t("file"),db:this.props.t("database"),default:this.props.t("default configuration")}[this.settingsSource]||this.props.t("unknown")}render(){const e=this.props.adminPasswordPoliciesContext,t=e.getSettings(),a=e.getSettingsErrors(),i=e.getMinimalAdvisedEntropy(),s=e.getEntropyForPasswordConfiguration(),o=e.getEntropyForPassphraseConfiguration(),r=e.getPasswordGeneratorMasks(),l=sn.createElement("button",{key:e,className:"button button-toggle "+(t[e]?"selected":""),onClick:()=>this.handleMaskToggled(e),disabled:this.hasAllInputDisabled()},a.label)))),a.masks&&n.createElement("div",{id:"password-mask-error",className:"error-message"},a.masks),n.createElement("div",{className:"input checkbox"},n.createElement("input",{id:"configure-password-generator-form-exclude-look-alike",type:"checkbox",name:"excludeLookAlikeCharacters",checked:t.excludeLookAlikeCharacters,onChange:this.handleCheckboxInputChange,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"configure-password-generator-form-exclude-look-alike"},n.createElement(v.c,null,"Exclude look-alike characters"))),n.createElement("p",null,n.createElement(v.c,null,"You can select the set of characters used for the passwords that are generated randomly by passbolt in the password generator.")))),n.createElement("div",{className:"accordion-header"},n.createElement("button",{id:"accordion-toggle-passphrase",className:"link no-border",type:"button",onClick:this.handlePassphraseSectionToggle},n.createElement(Re,{name:this.state.showPassphraseSection?"caret-down":"caret-right"}),n.createElement(v.c,null,"Passphrase settings"))),this.state.showPassphraseSection&&n.createElement("div",{className:"passphrase-settings"},n.createElement("div",{className:"estimated-entropy input"},n.createElement("label",null,n.createElement(v.c,null,"Estimated entropy")),n.createElement(Ho,{entropy:o}),a.passphraseMinimalRequiredEntropy&&n.createElement("div",{className:"error-message"},a.passphraseMinimalRequiredEntropy)),n.createElement("div",{className:"input text "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-word-count"},n.createElement(v.c,null,"Number of words")),n.createElement("div",{className:"slider"},n.createElement("input",{name:"wordsCount",min:"4",max:"40",value:t.wordsCount,type:"range",onChange:this.handleSliderInputChange,disabled:this.hasAllInputDisabled()}),n.createElement("input",{type:"number",id:"configure-passphrase-generator-form-word-count",name:"wordsCount",min:"4",max:"40",value:t.wordsCount,onChange:this.handleLengthChange,disabled:this.hasAllInputDisabled()})),a.wordsCount&&n.createElement("div",{id:"wordsCount-error",className:"error-message"},a.wordsCount)),n.createElement("p",null,n.createElement(v.c,null,"You can set the default length for the passphrases that are generated randomly by passbolt in the password generator.")),n.createElement("div",{className:"input text "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-words-separator"},n.createElement(v.c,null,"Words separator")),n.createElement("input",{type:"text",id:"configure-passphrase-generator-form-words-separator",name:"wordsSeparator",value:t.wordsSeparator,onChange:this.handleInputChange,placeholder:this.props.t("Type one or more characters"),disabled:this.hasAllInputDisabled()}),a.wordsSeparator&&n.createElement("div",{className:"error-message"},a.wordsSeparator)),n.createElement("div",{className:"select-wrapper input "+(this.hasAllInputDisabled()?"disabled":"")},n.createElement("label",{htmlFor:"configure-passphrase-generator-form-words-case"},n.createElement(v.c,null,"Words case")),n.createElement(Ft,{id:"configure-passphrase-generator-form-words-case",name:"wordCase",items:this.wordCaseList,value:t.wordCase,onChange:this.handleInputChange,disabled:this.hasAllInputDisabled()}))),n.createElement("h4",{id:"password-policies-external-services-subtitle"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"passphrase-policy-external-services-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"policyPassphraseExternalServices",onChange:this.handleCheckboxInputChange,checked:t?.policyPassphraseExternalServices,disabled:this.hasAllInputDisabled()}),n.createElement("label",{htmlFor:"passphrase-policy-external-services-toggle-button"},n.createElement(v.c,null,"External services")))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement(v.c,null,"Allow passbolt to access external services to check if a password has been compromised."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help",id:"password-policies-source"},n.createElement("h3",null,n.createElement(v.c,null,"Configuration source")),n.createElement("p",null,n.createElement(v.c,null,"This current configuration source is: "),this.configurationSource,".")),n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is password policy?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the password policy settings, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/password-policies",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}$o.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminPasswordPoliciesContext:o().object,t:o().func};const Zo=I(O(Vo((0,k.Z)("common")($o))));class Yo extends he{constructor(e){super(ye.validate(Yo.ENTITY_NAME,e,Yo.getSchema()))}static getSchema(){return{type:"object",required:["entropy_minimum","external_dictionary_check"],properties:{id:{type:"string",format:"uuid"},entropy_minimum:{type:"integer",gte:50,lte:224},external_dictionary_check:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"UserPassphrasePolicies"}static createFromDefault(e={}){const t=Object.assign({entropy_minimum:50,external_dictionary_check:!0},e);return new Yo(t)}}const Jo=Yo;class Qo{constructor(e={}){this.external_dictionary_check=e?.external_dictionary_check,this.entropy_minimum=e?.entropy_minimum}static getSchema(){const e=Jo.getSchema();return{type:"object",required:["entropy_minimum","external_dictionary_check"],properties:{entropy_minimum:e.properties.entropy_minimum,external_dictionary_check:e.properties.external_dictionary_check}}}static fromEntityDto(e){const t={entropy_minimum:parseInt(e?.entropy_minimum,10)||50,external_dictionary_check:Boolean(e?.external_dictionary_check)};return new Qo(t)}static isDataDifferent(e,t){return["entropy_minimum","external_dictionary_check"].some((a=>e[a]!==t[a]))}toEntityDto(){return{entropy_minimum:this.entropy_minimum,external_dictionary_check:this.external_dictionary_check}}cloneWithMutation(e,t){const a={...this,[e]:t};return new Qo(a)}validate(){const e=Qo.getSchema();try{ye.validate(this.constructor.name,this,e)}catch(e){return e}return new ue}}const Xo=Qo;function er(){return er=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},setSettings:()=>{},findSettings:()=>{},isProcessing:()=>{},validateData:()=>{},save:()=>{},getErrors:()=>{},hasSettingsChanges:()=>{}});class ar extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{processing:!1,errors:null,hasBeenValidated:!1,isDataModified:!1,settings:new Xo,findSettings:this.findSettings.bind(this),getSettings:this.getSettings.bind(this),setSettings:this.setSettings.bind(this),isProcessing:this.isProcessing.bind(this),validateData:this.validateData.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this)}}async findSettings(){this.setState({processing:!0});const e=await this.props.context.port.request("passbolt.user-passphrase-policies.find"),t=Xo.fromEntityDto(e);this.setState({settings:t,currentSettings:t,processing:!1})}getSettings(){return this.state.settings}setSettings(e,t){const a=this.state.settings.cloneWithMutation(e,t),n=Xo.isDataDifferent(a,this.state.currentSettings);if(!this.state.hasBeenValidated)return void this.setState({settings:a,isDataModified:n});const i=a.validate();this.setState({errors:i,settings:a,isDataModified:n})}isProcessing(){return this.state.processing}validateData(){const e=this.state.settings.validate(),t=e.hasErrors(),a=t?e:null;return this.setState({errors:a,hasBeenValidated:!0}),!t}async save(){this.setState({processing:!0});try{const e=this.state.settings.toEntityDto(),t=await this.props.context.port.request("passbolt.user-passphrase-policies.save",e),a=Xo.fromEntityDto(t);this.setState({settings:a,currentSettings:a,processing:!1,isDataModified:!1})}finally{this.setState({processing:!1})}}getErrors(){return this.state.errors}hasSettingsChanges(){return this.state.isDataModified}render(){return n.createElement(tr.Provider,{value:this.state},this.props.children)}}function nr(e){return class extends n.Component{render(){return n.createElement(tr.Consumer,null,(t=>n.createElement(e,er({adminUserPassphrasePoliciesContext:t},this.props))))}}}ar.propTypes={context:o().any,children:o().any,t:o().any},I((0,k.Z)("common")(ar));class ir extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminUserPassphrasePoliciesContext.isProcessing()}async handleSave(){if(this.isActionEnabled&&this.props.adminUserPassphrasePoliciesContext.validateData())try{await this.props.adminUserPassphrasePoliciesContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The user passphrase policies were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}ir.propTypes={adminUserPassphrasePoliciesContext:o().object,actionFeedbackContext:o().object,dialogContext:o().any,t:o().func};const sr=nr(d(g((0,k.Z)("common")(ir))));class or extends n.PureComponent{constructor(e){super(e),this.bindHandlers()}bindHandlers(){this.handleRangeOptionClick=this.handleRangeOptionClick.bind(this),this.handleRangeChange=this.handleRangeChange.bind(this)}handleRangeOptionClick(e){this.props.disabled||this.props.onChange(this.props.id,e)}handleRangeChange(e){const t=e.target;this.props.onChange(t.name,this.values[t.value].value)}getComputedStyleForEntropyStep(e,t){return{left:e*(100/(t-1))+"%"}}getValueIndex(e){return this.values.findIndex((t=>t.value===e))}get values(){return[{label:"50 bits",value:50},{label:"64 bits",value:64},{label:"80 bits",value:80},{label:"96 bits",value:96},{label:"128 bits",value:128},{label:"160 bits",value:160},{label:"192 bits",value:192},{label:"224 bits",value:224}]}render(){const e=this.values,t=e.length,{id:a,value:i}=this.props;return n.createElement("div",{className:"range-wrapper"},n.createElement("div",{className:"range-labels"},n.createElement("label",{key:"min"},n.createElement(v.c,null,"Weak")),n.createElement("label",{key:"max"},n.createElement(v.c,null,"Secure"))),n.createElement("div",{className:"range-input-wrapper"},n.createElement("input",{type:"range",className:"range-input",id:a,name:a,min:0,max:e.length-1,value:this.getValueIndex(i),list:`${this.props.id}-values`,onChange:this.handleRangeChange,required:!0,disabled:this.props.disabled}),n.createElement("ul",{className:"range-options"},e.map(((e,a)=>n.createElement("li",{key:`li-${a}`,onClick:()=>this.handleRangeOptionClick(e.value),style:this.getComputedStyleForEntropyStep(a,t),className:"range-option "+(i===e.value?"range-option--active":""),disabled:this.props.disabled},e.label))))))}}or.propTypes={value:o().number.isRequired,id:o().string.isRequired,onChange:o().func,disabled:o().bool};const rr=(0,k.Z)("common")(or);class lr extends n.PureComponent{constructor(e){super(e),this.state=this.defaultState,this.bindCallbacks()}get defaultState(){return{isReady:!1}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(sr),await this.props.adminUserPassphrasePoliciesContext.findSettings(),this.setState({isReady:!0})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction()}bindCallbacks(){this.handleMinimumEntropyChange=this.handleMinimumEntropyChange.bind(this),this.handleCheckboxInputChange=this.handleCheckboxInputChange.bind(this)}hasAllInputDisabled(){return this.props.adminUserPassphrasePoliciesContext.isProcessing()}handleMinimumEntropyChange(e,t){const a=parseInt(t,10)||0;this.props.adminUserPassphrasePoliciesContext.setSettings(e,a)}handleCheckboxInputChange(e){const t=e.target,a=t.name,n=Boolean(t.checked);this.props.adminUserPassphrasePoliciesContext.setSettings(a,n)}isWeakSettings(e){return e.entropy_minimum<80}render(){if(!this.state.isReady)return null;const e=this.hasAllInputDisabled(),t=this.props.adminUserPassphrasePoliciesContext,a=t.getSettings();return n.createElement("div",{className:"row"},n.createElement("div",{className:"password-policies-settings col8 main-column"},n.createElement("h3",{id:"user-passphrase-policies-title"},n.createElement(v.c,null,"User Passphrase Policies")),t.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"user-passphrase-policies-save-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),this.isWeakSettings(a)&&n.createElement("div",{className:"warning message",id:"user-passphrase-policies-weak-settings-banner"},n.createElement("p",null,n.createElement(v.c,null,"Passbolt recommends passphrase strength to be at minimum of ",{MINIMAL_ADVISED_ENTROPY:80}," bits to be safe."))),n.createElement("h4",{id:"user-passphrase-policies-entropy-minimum",className:"title title--required no-border"},n.createElement(v.c,null,"User passphrase minimal entropy")),n.createElement("div",{className:"input range"},n.createElement(rr,{id:"entropy_minimum",onChange:this.handleMinimumEntropyChange,value:a.entropy_minimum,disabled:e})),n.createElement("div",null,n.createElement(v.c,null,"You can set the minimal entropy for the users' private key passphrase.")," ",n.createElement(v.c,null,"This is the passphrase that is asked during sign in or recover.")),n.createElement("h4",{id:"user-passphrase-policies-external-services-subtitle"},n.createElement("span",{className:"input toggle-switch form-element ready"},n.createElement("input",{id:"user-passphrase-policies-external-services-toggle-button",type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"external_dictionary_check",onChange:this.handleCheckboxInputChange,checked:a?.external_dictionary_check,disabled:e}),n.createElement("label",{htmlFor:"user-passphrase-policies-external-services-toggle-button"},n.createElement(v.c,null,"External password dictionary check")))),n.createElement("span",{className:"input toggle-switch form-element"},n.createElement(v.c,null,"Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"What is user passphrase policies?")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the user passphrase policies, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/user-passphrase-policies",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}lr.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminUserPassphrasePoliciesContext:o().object,t:o().func};const cr=I(O(nr((0,k.Z)("common")(lr))));class mr extends he{constructor(e){super(ye.validate(mr.ENTITY_NAME,e,mr.getSchema()))}static getSchema(){return{type:"object",required:["automatic_expiry","automatic_update"],properties:{id:{type:"string",format:"uuid"},default_expiry_period:{type:"null"},policy_override:{type:"boolean"},automatic_expiry:{type:"boolean"},automatic_update:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"PasswordExpirySettings"}static createFromDefault(e={}){const t={default_expiry_period:null,policy_override:!1,automatic_expiry:!1,automatic_update:!1,...e};return new mr(t)}}const dr=mr;class hr extends he{constructor(e){super(ye.validate(hr.ENTITY_NAME,e,hr.getSchema()))}static getSchema(){return{type:"object",required:["automatic_expiry","automatic_update","policy_override"],properties:{id:{type:"string",format:"uuid"},default_expiry_period:{anyOf:[{type:"integer",gte:1,lte:999},{type:"null"}]},policy_override:{type:"boolean"},automatic_expiry:{type:"boolean"},automatic_update:{type:"boolean"},created:{type:"string",format:"date-time"},created_by:{type:"string",format:"uuid"},modified:{type:"string",format:"date-time"},modified_by:{type:"string",format:"uuid"}}}}static get ENTITY_NAME(){return"passwordExpiryProSettingsEntity"}static createFromDefault(e={}){const t={default_expiry_period:null,policy_override:!1,automatic_expiry:!0,automatic_update:!0,...e};return new hr(t)}}const pr=hr;class ur{constructor(e={}){this.automatic_update=Boolean(e?.automatic_update),this.policy_override=Boolean(e?.policy_override),this.automatic_expiry=Boolean(e?.automatic_expiry);const t=parseInt(e?.default_expiry_period,10);this.default_expiry_period=isNaN(t)?null:t,this.default_expiry_period_toggle=void 0!==e?.default_expiry_period_toggle?Boolean(e.default_expiry_period_toggle):Boolean(this.default_expiry_period),e?.id&&(this.id=e?.id)}static getSchema(e=!1){const t=e?pr.getSchema():dr.getSchema();return this.getDefaultSchema(t,e)}static getDefaultSchema(e,t=!1){const a={type:"object",required:["automatic_expiry","automatic_update"],properties:{id:e.properties.id,automatic_expiry:e.properties.automatic_expiry,automatic_update:e.properties.automatic_update,policy_override:e.properties.policy_override,default_expiry_period:e.properties.default_expiry_period}};return t&&a.required.push("policy_override"),a}static fromEntityDto(e){const t={automatic_expiry:Boolean(e?.automatic_expiry),automatic_update:Boolean(e?.automatic_update),policy_override:Boolean(e?.policy_override),default_expiry_period:null!==e?.default_expiry_period?parseInt(e?.default_expiry_period,10):null};return e?.id&&(t.id=e.id),new ur(t)}static isDataDifferent(e,t){return["automatic_expiry","automatic_update","policy_override","default_expiry_period"].some((a=>e[a]!==t[a]))}toEntityDto(){const e=this.default_expiry_period_toggle?this.default_expiry_period:null;return{automatic_expiry:this.automatic_expiry,automatic_update:this.automatic_update,policy_override:this.policy_override,default_expiry_period:e}}cloneWithMutation(e,t){const a={...this,[e]:t};return new ur(a)}validate(e=!1){const t=new ue,a=ur.getSchema(e);try{ye.validate(this.constructor.name,this,a),this.validateFormInput(t,e)}catch(t){if(!(t instanceof ue))throw t;return this.validateFormInput(t,e),t}return t}validateFormInput(e,t){t&&this.default_expiry_period_toggle&&null===this.default_expiry_period&&e.addError("default_expiry_period","required","The default_expiry_period is required.")}get isSettingsDisabled(){return!this.id}}const gr=ur;function br(){return br=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},get:()=>{},setSettingsBulk:()=>{},findSettings:()=>{},isProcessing:()=>{},validateData:()=>{},save:()=>{},getErrors:()=>{},isFeatureToggleEnabled:()=>{},setFeatureToggle:()=>{},hasSettingsChanges:()=>{},isSubmitted:()=>{},setSubmitted:()=>{},setDefaultExpiryToggle:()=>{}});class yr extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{processing:!1,errors:null,hasBeenValidated:!1,isDataModified:!1,submitted:!1,currentSettings:new gr,featureToggleEnabled:!1,settings:new gr,findSettings:this.findSettings.bind(this),getSettings:this.getSettings.bind(this),setSettingsBulk:this.setSettingsBulk.bind(this),isProcessing:this.isProcessing.bind(this),validateData:this.validateData.bind(this),save:this.save.bind(this),getErrors:this.getErrors.bind(this),hasSettingsChanges:this.hasSettingsChanges.bind(this),isFeatureToggleEnabled:this.isFeatureToggleEnabled.bind(this),setFeatureToggle:this.setFeatureToggle.bind(this),setDefaultExpiryToggle:this.setDefaultExpiryToggle.bind(this),isSubmitted:this.isSubmitted.bind(this),setSubmitted:this.setSubmitted.bind(this)}}async findSettings(){this.setState({processing:!0}),this.setState({submitted:!1});const e=await this.props.context.port.request("passbolt.password-expiry.get-or-find",!0),t=gr.fromEntityDto(e);this.setState({toggleEnabled:t?.id,settings:t,currentSettings:t,processing:!1})}setDefaultExpiryToggle(e){let t=this.state.settings.default_expiry_period;e&&null===this.state.settings.default_expiry_period&&(t=90),this.setSettingsBulk({default_expiry_period_toggle:e,default_expiry_period:t})}getSettings(){return this.state.settings}setSubmitted(e){this.setState({submitted:e})}isSubmitted(){return this.state.submitted}setSettingsBulk(e){let t=this.state.settings;const a=Object.keys(e);for(let n=0;nn.createElement(e,br({adminPasswordExpiryContext:t},this.props))))}}}yr.propTypes={context:o().any,children:o().any,t:o().any},I((0,k.Z)("common")(yr));class kr extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSave=this.handleSave.bind(this)}get isActionEnabled(){return!this.props.adminPasswordExpiryContext.isProcessing()}async handleSave(){if(this.props.adminPasswordExpiryContext.setSubmitted(!0),this.isActionEnabled&&this.props.adminPasswordExpiryContext.validateData())try{await this.props.adminPasswordExpiryContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password expiry settings were updated."))}async handleSaveError(e){console.error(e),await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}render(){const e=!this.isActionEnabled;return n.createElement("div",{className:"col2_3 actions-wrapper"},n.createElement("div",{className:"actions"},n.createElement("ul",null,n.createElement("li",null,n.createElement("button",{type:"button",disabled:e,id:"save-settings",onClick:this.handleSave},n.createElement(Re,{name:"save"}),n.createElement("span",null,n.createElement(v.c,null,"Save settings")))))))}}kr.propTypes={adminPasswordExpiryContext:o().object,actionFeedbackContext:o().object,dialogContext:o().any,t:o().func};const Er=d(vr(g((0,k.Z)("common")(kr))));class wr extends n.PureComponent{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleInputChange=this.handleInputChange.bind(this),this.handleExpiryPeriodToggleClick=this.handleExpiryPeriodToggleClick.bind(this)}handleInputChange(e){const{type:t,checked:a,value:n,name:i}=e.target,s="checkbox"===t?a:parseInt(n,10);this.props.adminPasswordExpiryContext.setSettingsBulk({[i]:s})}handleExpiryPeriodToggleClick(e){const t=e.target.checked;this.props.adminPasswordExpiryContext.setDefaultExpiryToggle(t)}async handleFormSubmit(e){if(e.preventDefault(),this.props.adminPasswordExpiryContext.setSubmitted(!0),!this.props.adminPasswordExpiryContext.isProcessing()&&this.props.adminPasswordExpiryContext.validateData())try{await this.props.adminPasswordExpiryContext.save(),await this.handleSaveSuccess()}catch(e){await this.handleSaveError(e)}}async handleSaveSuccess(){await this.props.actionFeedbackContext.displaySuccess(this.props.t("The password expiry settings were updated."))}async handleSaveError(e){await this.props.actionFeedbackContext.displayError(e.message),this.props.dialogContext.open(je,{error:e})}hasAllInputDisabled(){return this.props.adminPasswordExpiryContext.isProcessing()}get settings(){return this.props.adminPasswordExpiryContext.getSettings()}get errors(){const e=this.props.adminPasswordExpiryContext.getErrors();return e?.details}render(){const e=this.props.adminPasswordExpiryContext.isSubmitted(),t=this.settings.default_expiry_period||"",a=Boolean(this.settings?.default_expiry_period_toggle);return n.createElement("div",{id:"password-expiry-form-advanced"},n.createElement("form",{className:"form",onSubmit:this.handleFormSubmit},n.createElement("h4",{className:"no-border",id:"expiry-policies-subtitle"},n.createElement(v.c,null,"Expiry Policies")),n.createElement("p",{id:"expiry-policies-description"},n.createElement(v.c,null,"In this section you can choose the default behaviour of password expiry policy for all users.")),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{id:"default-expiry-period",className:"input toggle-switch form-element "+(this.errors?.default_expiry_period&&e?"has-error":"")},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"defaultExpiryPeriodToggle",onChange:this.handleExpiryPeriodToggleClick,checked:a,disabled:this.hasAllInputDisabled(),id:"default-expiry-period-toggle"}),n.createElement("label",{htmlFor:"defaultExpiryPeriodToggle"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Default password expiry period")),n.createElement("span",{className:"info-input"},n.createElement(v.c,null,n.createElement("span",null,"When a user creates a resource, a default expiry date is set to "),n.createElement("input",{type:"text",className:"toggle-input",id:"default-expiry-period-input",name:"default_expiry_period",onChange:this.handleInputChange,maxLength:3,value:t,disabled:this.hasAllInputDisabled()||!a,placeholder:"90"}),n.createElement("span",null,"days"))))),this.errors?.default_expiry_period&&e&&n.createElement("div",{className:"input"},!this.errors.default_expiry_period.required&&n.createElement("div",{className:"default-expiry-period-gte error-message"},n.createElement(v.c,null,"The default password expiry period should be a number between 1 and 999 days.")),this.errors?.default_expiry_period.required&&n.createElement("div",{className:"default-expiry-period-required error-message"},n.createElement(v.c,null,"The default password expiry period should be a valid number.")))),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"policy-override"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"policy_override",onChange:this.handleInputChange,checked:this.settings.policy_override,disabled:this.hasAllInputDisabled(),id:"policy-override-toggle"}),n.createElement("label",{htmlFor:"policy_override"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Policy Override")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Allow users to override the default policy."))))),n.createElement("h4",{className:"no-border",id:"automatic-workflow-subtitle"},n.createElement(v.c,null,"Automatic workflows")),n.createElement("p",{id:"automatic-workflow-description"},n.createElement(v.c,null,"In this section you can choose automatic behaviours.")),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"automatic-expiry"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"automatic_expiry",onChange:this.handleInputChange,checked:this.settings.automatic_expiry,disabled:this.hasAllInputDisabled(),id:"automatic-expiry-toggle"}),n.createElement("label",{htmlFor:"automatic_expiry"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic Expiry")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list."))))),n.createElement("div",{className:"togglelist-alt"},n.createElement("span",{className:"input toggle-switch form-element",id:"automatic-update"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"automatic_update",onChange:this.handleInputChange,checked:this.settings.automatic_update,disabled:this.hasAllInputDisabled(),id:"automatic-update-toggle"}),n.createElement("label",{htmlFor:"automatic_update"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic Update")),n.createElement("span",{className:"info"},a?n.createElement(v.c,null,"Password expiry date is renewed based on the default password expiry period whenever a password is updated."):n.createElement(v.c,null,"Password is no longer marked as expired whenever the password is updated.")))))))}}wr.propTypes={context:o().object,adminPasswordExpiryContext:o().object,actionFeedbackContext:o().object,dialogContext:o().object,t:o().func};const Cr=I(vr(d(g((0,k.Z)("common")(wr)))));class Sr extends n.PureComponent{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{isReady:!1}}async componentDidMount(){this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(Er),await this.props.adminPasswordExpiryContext.findSettings(),this.setState({isReady:!0})}componentWillUnmount(){this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction()}hasAllInputDisabled(){return this.props.adminPasswordExpiryContext.isProcessing()}get canUseAdvancedSettings(){return this.props.context.siteSettings.canIUse("passwordExpiryPolicies")}render(){if(!this.state.isReady)return null;const e=this.props.adminPasswordExpiryContext,t=e.isFeatureToggleEnabled();return n.createElement("div",{className:"row"},n.createElement("div",{className:"password-expiry-settings col8 main-column"},n.createElement("h3",{id:"password-expiry-settings-title"},n.createElement("span",{className:"input toggle-switch form-element"},n.createElement("input",{type:"checkbox",className:"toggle-switch-checkbox checkbox",name:"passwordExpirySettingsToggle",onChange:()=>e.setFeatureToggle(!t),checked:t,disabled:this.hasAllInputDisabled(),id:"passwordExpirySettingsToggle"}),n.createElement("label",{htmlFor:"passwordExpirySettingsToggle"},n.createElement(v.c,null,"Password Expiry")))),e.hasSettingsChanges()&&n.createElement("div",{className:"warning message",id:"password-expiry-settings-save-banner"},n.createElement("p",null,n.createElement(v.c,null,"Don't forget to save your settings to apply your modification."))),!t&&n.createElement("p",{className:"description"},n.createElement(v.c,null,"No Password Expiry is configured. Enable it to activate automatic password expiration and automatic password expiration reset workflows.")),t&&n.createElement(n.Fragment,null,this.canUseAdvancedSettings?n.createElement(Cr,null):n.createElement("div",{id:"password-expiry-settings-form"},n.createElement("h4",{id:"password-expiry-settings-automatic-workflows",className:"title title--required no-border"},n.createElement(v.c,null,"Automatic workflows")),n.createElement("div",{className:"radiolist-alt"},n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"passwordExpiryAutomaticExpiry"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic expiry")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.")))),n.createElement("div",{className:"input radio"},n.createElement("label",{htmlFor:"passwordExpiryAutomatiUpdate"},n.createElement("span",{className:"name"},n.createElement(v.c,null,"Automatic update")),n.createElement("span",{className:"info"},n.createElement(v.c,null,"Password is no longer marked as expired whenever the password is updated.")))))))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"About password expiry")),n.createElement("p",null,n.createElement(v.c,null,"For more information about the password expiry, checkout the dedicated page on the help website.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/configure/password-expiry",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"life-ring"}),n.createElement("span",null,n.createElement(v.c,null,"Read the documentation"))))))}}Sr.propTypes={context:o().object,administrationWorkspaceContext:o().object,adminPasswordExpiryContext:o().object,t:o().func};const xr=I(O(vr((0,k.Z)("common")(Sr))));class Nr extends n.Component{isMfaSelected(){return F.MFA===this.props.administrationWorkspaceContext.selectedAdministration}isMfaPolicySelected(){return F.MFA_POLICY===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordPoliciesSelected(){return F.PASSWORD_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isUserDirectorySelected(){return F.USER_DIRECTORY===this.props.administrationWorkspaceContext.selectedAdministration}isEmailNotificationsSelected(){return F.EMAIL_NOTIFICATION===this.props.administrationWorkspaceContext.selectedAdministration}isSubscriptionSelected(){return F.SUBSCRIPTION===this.props.administrationWorkspaceContext.selectedAdministration}isInternationalizationSelected(){return F.INTERNATIONALIZATION===this.props.administrationWorkspaceContext.selectedAdministration}isAccountRecoverySelected(){return F.ACCOUNT_RECOVERY===this.props.administrationWorkspaceContext.selectedAdministration}isSmtpSettingsSelected(){return F.SMTP_SETTINGS===this.props.administrationWorkspaceContext.selectedAdministration}isSelfRegistrationSelected(){return F.SELF_REGISTRATION===this.props.administrationWorkspaceContext.selectedAdministration}isSsoSelected(){return F.SSO===this.props.administrationWorkspaceContext.selectedAdministration}isRbacSelected(){return F.RBAC===this.props.administrationWorkspaceContext.selectedAdministration}isUserPassphrasePoliciesSelected(){return F.USER_PASSPHRASE_POLICIES===this.props.administrationWorkspaceContext.selectedAdministration}isPasswordExpirySelected(){return F.PASSWORD_EXPIRY===this.props.administrationWorkspaceContext.selectedAdministration}render(){const e=this.props.administrationWorkspaceContext.administrationWorkspaceAction;return n.createElement("div",{id:"container",className:"page administration"},n.createElement("div",{id:"app",tabIndex:"1000"},n.createElement("div",{className:"header first"},n.createElement(Me,null)),n.createElement("div",{className:"header second"},n.createElement(Fe,null),n.createElement(Ra,{disabled:!0}),n.createElement(ht,{baseUrl:this.props.context.trustedDomain||this.props.context.userSettings.getTrustedDomain(),user:this.props.context.loggedInUser})),n.createElement("div",{className:"header third"},n.createElement("div",{className:"col1 main-action-wrapper"}),n.createElement(e,null)),n.createElement("div",{className:"panel main"},n.createElement("div",null,n.createElement("div",{className:"panel left"},n.createElement(ut,null)),n.createElement("div",{className:"panel middle"},n.createElement(zt,null),n.createElement("div",{className:"grid grid-responsive-12"},this.isMfaSelected()&&n.createElement(Pt,null),this.isMfaPolicySelected()&&n.createElement(io,null),this.isPasswordPoliciesSelected()&&n.createElement(Zo,null),this.isUserDirectorySelected()&&n.createElement(ba,null),this.isEmailNotificationsSelected()&&n.createElement(Na,null),this.isSubscriptionSelected()&&n.createElement(Ha,null),this.isInternationalizationSelected()&&n.createElement(an,null),this.isAccountRecoverySelected()&&n.createElement(ci,null),this.isSmtpSettingsSelected()&&n.createElement(Hi,null),this.isSelfRegistrationSelected()&&n.createElement(ds,null),this.isSsoSelected()&&n.createElement($s,null),this.isRbacSelected()&&n.createElement(zo,null),this.isUserPassphrasePoliciesSelected()&&n.createElement(cr,null),this.isPasswordExpirySelected()&&n.createElement(xr,null)))))))}}Nr.propTypes={context:o().any,administrationWorkspaceContext:o().object};const _r=I(O(Nr));class Rr extends n.Component{get privacyUrl(){return this.props.context.siteSettings.privacyLink}get creditsUrl(){return"https://www.passbolt.com/credits"}get unsafeUrl(){return"https://help.passbolt.com/faq/hosting/why-unsafe"}get termsUrl(){return this.props.context.siteSettings.termsLink}get versions(){const e=[],t=this.props.context.siteSettings.version;return t&&e.push(`${this.props.t("Server")} ${t}`),this.props.context.extensionVersion&&e.push(`${this.props.t("Client")} ${this.props.context.extensionVersion}`),e.join(" / ")}get isUnsafeMode(){if(!this.props.context.siteSettings)return!1;const e=this.props.context.siteSettings.debug,t=this.props.context.siteSettings.url.startsWith("http://");return e||t}render(){return n.createElement("footer",null,n.createElement("div",{className:"footer"},n.createElement("ul",{className:"footer-links"},this.isUnsafeMode&&n.createElement("li",{className:"error-message"},n.createElement("a",{href:this.unsafeUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Unsafe mode"))),this.termsUrl&&n.createElement("li",null,n.createElement("a",{href:this.termsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Terms"))),this.privacyUrl&&n.createElement("li",null,n.createElement("a",{href:this.privacyUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Privacy"))),n.createElement("li",null,n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(v.c,null,"Credits"))),n.createElement("li",null,this.versions&&n.createElement(De,{message:this.versions,direction:"left"},n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}))),!this.versions&&n.createElement("a",{href:this.creditsUrl,target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"heart-o"}))))))}}Rr.propTypes={context:o().any,t:o().func};const Ir=I((0,k.Z)("common")(Rr));class Ar extends n.Component{get isMfaEnabled(){return this.props.context.siteSettings.canIUse("multiFactorAuthentication")}get canIUseThemeCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountSettings")}get canIUseMobileCapability(){return this.props.rbacContext.canIUseUiAction(ne)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("mobile")}get canIUseDesktopCapability(){return this.props.rbacContext.canIUseUiAction(ie)&&this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("desktop")}get canIUseAccountRecoveryCapability(){return this.props.context.siteSettings&&this.props.context.siteSettings.canIUse("accountRecovery")}render(){const e=e=>this.props.location.pathname.endsWith(e);return n.createElement("div",{className:"navigation-secondary navigation-shortcuts"},n.createElement("ul",null,n.createElement("li",null,n.createElement("div",{className:"row "+(e("profile")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsProfileRequested},n.createElement("span",null,n.createElement(v.c,null,"Profile"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("keys")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsKeysRequested},n.createElement("span",null,n.createElement(v.c,null,"Keys inspector"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("passphrase")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsPassphraseRequested},n.createElement("span",null,n.createElement(v.c,null,"Passphrase"))))))),n.createElement("li",null,n.createElement("div",{className:"row "+(e("security-token")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsSecurityTokenRequested},n.createElement("span",null,n.createElement(v.c,null,"Security token"))))))),this.canIUseThemeCapability&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("theme")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsThemeRequested},n.createElement("span",null,n.createElement(v.c,null,"Theme"))))))),this.isMfaEnabled&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("mfa")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsMfaRequested},n.createElement("span",null,n.createElement(v.c,null,"Multi Factor Authentication")),this.props.hasPendingMfaChoice&&n.createElement(Re,{name:"exclamation",baseline:!0})))))),this.canIUseAccountRecoveryCapability&&n.createElement("li",null,n.createElement("div",{className:"row "+(e("account-recovery")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsAccountRecoveryRequested},n.createElement("span",null,n.createElement(v.c,null,"Account Recovery")),this.props.hasPendingAccountRecoveryChoice&&n.createElement(Re,{name:"exclamation",baseline:!0})))))),this.canIUseMobileCapability&&n.createElement("li",{id:"navigation-item-mobile-setup"},n.createElement("div",{className:"row "+(e("mobile")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsMobileRequested},n.createElement("span",null,n.createElement(v.c,null,"Mobile setup"))))))),this.canIUseDesktopCapability&&n.createElement("li",{id:"navigation-item-desktop-setup"},n.createElement("div",{className:"row "+(e("desktop")?"selected":"")},n.createElement("div",{className:"main-cell-wrapper"},n.createElement("div",{className:"main-cell"},n.createElement("button",{className:"link no-border",type:"button",onClick:this.props.navigationContext.onGoToUserSettingsDesktopRequested},n.createElement("span",null,n.createElement(v.c,null,"Desktop app setup")),n.createElement("span",{className:"chips beta"},"beta"))))))))}}Ar.propTypes={context:o().any,navigationContext:o().any,history:o().object,location:o().object,hasPendingAccountRecoveryChoice:o().bool,hasPendingMfaChoice:o().bool,rbacContext:o().any};const Pr=I(Ne((0,N.EN)(J((0,k.Z)("common")(Ar)))));class Dr extends n.Component{get items(){return[n.createElement(Ut,{key:"bread-1",name:this.translate("All users"),onClick:this.props.navigationContext.onGoToUsersRequested}),n.createElement(Ut,{key:"bread-2",name:this.loggedInUserName,onClick:this.props.navigationContext.onGoToUserSettingsProfileRequested}),n.createElement(Ut,{key:"bread-3",name:this.getLastBreadcrumbItemName,onClick:this.onLastBreadcrumbClick.bind(this)})]}get loggedInUserName(){const e=this.props.context.loggedInUser;return e?`${e.profile.first_name} ${e.profile.last_name}`:""}get getLastBreadcrumbItemName(){const e={profile:this.translate("Profile"),passphrase:this.translate("Passphrase"),"security-token":this.translate("Security token"),theme:this.translate("Theme"),mfa:this.translate("Multi Factor Authentication"),duo:this.translate("Multi Factor Authentication"),keys:this.translate("Keys inspector"),mobile:this.translate("Mobile transfer"),"account-recovery":this.translate("Account Recovery"),"smtp-settings":this.translate("Email server")};return e[Object.keys(e).find((e=>this.props.location.pathname.endsWith(e)))]}async onLastBreadcrumbClick(){const e=this.props.location.pathname;this.props.history.push({pathname:e})}get translate(){return this.props.t}render(){return n.createElement(Lt,{items:this.items})}}Dr.propTypes={context:o().any,location:o().object,history:o().object,navigationContext:o().any,t:o().func};const Lr=I((0,N.EN)(J((0,k.Z)("common")(Dr))));class Tr extends n.Component{getProvider(){const e=this.props.match.params.provider;return Object.values(gt).includes(e)?e:(console.warn("The provider should be a valid provider ."),null)}render(){const e=this.getProvider();return n.createElement(n.Fragment,null,!e&&n.createElement(N.l_,{to:"/app/settings/mfa"}),e&&n.createElement("iframe",{id:"setup-mfa",src:`${this.props.context.trustedDomain}/mfa/setup/${e}`,width:"100%",height:"100%"}))}}Tr.propTypes={match:o().any,history:o().any,context:o().any};const Ur=I(Tr);class jr extends n.Component{get isRunningUnderHttps(){const e=this.props.context.trustedDomain;return"https:"===new URL(e).protocol}render(){return n.createElement(n.Fragment,null,this.isRunningUnderHttps&&n.createElement("iframe",{id:"setup-mfa",src:`${this.props.context.trustedDomain}/mfa/setup/select`,width:"100%",height:"100%"}),!this.isRunningUnderHttps&&n.createElement(n.Fragment,null,n.createElement("div",{className:"grid grid-responsive-12 profile-detailed-information"},n.createElement("div",{className:"row"},n.createElement("div",{className:"profile col6 main-column"},n.createElement("h3",null,n.createElement(v.c,null,"Multi Factor Authentication")),n.createElement("h4",{className:"no-border"},n.createElement(v.c,null,"Sorry the multi factor authentication feature is only available in a secure context (HTTPS).")),n.createElement("p",null,n.createElement(v.c,null,"Please contact your administrator to enable multi-factor authentication."))),n.createElement("div",{className:"col4 last"},n.createElement("div",{className:"sidebar-help"},n.createElement("h3",null,n.createElement(v.c,null,"Need some help?")),n.createElement("p",null,n.createElement(v.c,null,"Contact your administrator with the error details.")),n.createElement("p",null,n.createElement(v.c,null,"Alternatively you can also get in touch with support on community forum or via the paid support channels.")),n.createElement("a",{className:"button",href:"https://help.passbolt.com/",target:"_blank",rel:"noopener noreferrer"},n.createElement(Re,{name:"document"}),n.createElement("span",null,n.createElement(v.c,null,"Help site")))))))))}}jr.propTypes={context:o().any};const zr=I(jr);class Mr extends n.Component{get isMfaChoiceRequired(){return this.props.mfaContext.isMfaChoiceRequired()}render(){return n.createElement("div",null,n.createElement("div",{className:"header second"},n.createElement(Fe,null),n.createElement(Ra,{disabled:!0}),n.createElement(ht,{baseUrl:this.props.context.trustedDomain,user:this.props.context.loggedInUser})),n.createElement("div",{className:"header third"}),n.createElement("div",{className:"panel main"},n.createElement("div",{className:"panel left"},n.createElement(Pr,{hasPendingMfaChoice:this.isMfaChoiceRequired})),n.createElement("div",{className:"panel middle"},n.createElement(Lr,null),n.createElement(N.AW,{exact:!0,path:"/app/settings/mfa/:provider",component:Ur}),n.createElement(N.AW,{exact:!0,path:"/app/settings/mfa",component:zr}))))}}Mr.propTypes={context:o().any,mfaContext:o().object};const Or=(0,N.EN)(I(mt(Mr)));class Fr extends n.Component{constructor(e){super(e),this.initEventHandlers(),this.createReferences()}initEventHandlers(){this.handleCloseClick=this.handleCloseClick.bind(this)}createReferences(){this.loginLinkRef=n.createRef()}handleCloseClick(){this.goToLogin()}goToLogin(){this.loginLinkRef.current.click()}get loginUrl(){let e=this.props.context.userSettings&&this.props.context.userSettings.getTrustedDomain();return e=e||this.props.context.trustedDomain,`${e}/auth/login`}render(){return n.createElement(Te,{title:this.props.t("Session Expired"),onClose:this.handleCloseClick,className:"session-expired-dialog"},n.createElement("div",{className:"form-content"},n.createElement("p",null,n.createElement(v.c,null,"Your session has expired, you need to sign in."))),n.createElement("div",{className:"submit-wrapper clearfix"},n.createElement("a",{ref:this.loginLinkRef,href:this.loginUrl,className:"primary button",target:"_parent",role:"button",rel:"noopener noreferrer"},n.createElement(v.c,null,"Sign in"))))}}Fr.propTypes={context:o().any,t:o().func};const qr=I((0,N.EN)((0,k.Z)("common")(Fr)));class Wr extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleSessionExpiredEvent=this.handleSessionExpiredEvent.bind(this)}componentDidMount(){this.props.context.onExpiredSession(this.handleSessionExpiredEvent)}handleSessionExpiredEvent(){this.props.dialogContext.open(qr)}render(){return n.createElement(n.Fragment,null)}}Wr.propTypes={context:o().any,dialogContext:o().any};const Vr=I(g(Wr));function Br(){return Br=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},close:()=>{}});class Kr extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{announcements:[],show:(e,t)=>{const a=(0,r.Z)();return this.setState({announcements:[...this.state.announcements,{key:a,Announcement:e,AnnouncementProps:t}]}),a},close:async e=>await this.setState({announcements:this.state.announcements.filter((t=>e!==t.key))})}}render(){return n.createElement(Gr.Provider,{value:this.state},this.props.children)}}function Hr(e){return class extends n.Component{render(){return n.createElement(Gr.Consumer,null,(t=>n.createElement(e,Br({announcementContext:t},this.props))))}}}Kr.displayName="AnnouncementContextProvider",Kr.propTypes={children:o().any};class $r extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleClose=this.handleClose.bind(this)}handleClose(){this.props.onClose()}render(){return n.createElement("div",{className:`${this.props.className} announcement`},n.createElement("div",{className:"announcement-content"},this.props.canClose&&n.createElement("button",{type:"button",className:"announcement-close dialog-close button-transparent",onClick:this.handleClose},n.createElement(Re,{name:"close"}),n.createElement("span",{className:"visually-hidden"},n.createElement(v.c,null,"Close"))),this.props.children))}}$r.propTypes={children:o().node,className:o().string,canClose:o().bool,onClose:o().func};const Zr=(0,k.Z)("common")($r);class Yr extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!0},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription key will expire")," ",Ga(this.props.expiry,this.props.t,this.props.context.locale),".",n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}Yr.propTypes={context:o().any,expiry:o().string,navigationContext:o().any,onClose:o().func,t:o().func};const Jr=I(J(Hr((0,k.Z)("common")(Yr))));class Qr extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!1},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription requires your attention. The stability of the application is at risk."),n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}Qr.propTypes={navigationContext:o().any,onClose:o().func,i18n:o().any};const Xr=J(Hr((0,k.Z)("common")(Qr)));class el extends n.Component{render(){return n.createElement(Zr,{className:"subscription",onClose:this.props.onClose,canClose:!1},n.createElement("p",null,n.createElement(v.c,null,"Warning:")," ",n.createElement(v.c,null,"your subscription key is not valid. The stability of the application is at risk."),n.createElement("button",{className:"link",type:"button",onClick:this.props.navigationContext.onGoToAdministrationSubscriptionRequested},n.createElement(v.c,null,"Manage Subscription"))))}}el.propTypes={navigationContext:o().any,onClose:o().func,i18n:o().any};const tl=J(Hr((0,k.Z)("common")(el)));class al extends n.Component{constructor(e){super(e),this.bindCallbacks()}bindCallbacks(){this.handleAnnouncementSubscriptionEvent=this.handleAnnouncementSubscriptionEvent.bind(this)}componentDidMount(){this.handleAnnouncementSubscriptionEvent()}componentDidUpdate(e){this.handleRefreshSubscriptionAnnouncement(e.context.refreshSubscriptionAnnouncement)}async handleRefreshSubscriptionAnnouncement(e){this.props.context.refreshSubscriptionAnnouncement!==e&&this.props.context.refreshSubscriptionAnnouncement&&(await this.handleAnnouncementSubscriptionEvent(),this.props.context.setContext({refreshSubscriptionAnnouncement:null}))}async handleAnnouncementSubscriptionEvent(){this.hideSubscriptionAnnouncement();try{const e=await this.props.context.onGetSubscriptionKeyRequested();this.isSubscriptionGoingToExpire(e.expiry)&&this.props.announcementContext.show(Jr,{expiry:e.expiry})}catch(e){"PassboltSubscriptionError"===e.name?this.props.announcementContext.show(Xr):this.props.announcementContext.show(tl)}}hideSubscriptionAnnouncement(){const e=[Jr,Xr,tl];this.props.announcementContext.announcements.forEach((t=>{e.some((e=>e===t.Announcement))&&this.props.announcementContext.close(t.key)}))}isSubscriptionGoingToExpire(e){return Ia.ou.fromISO(e)n.createElement(t,il({key:e,onClose:()=>this.close(e)},a)))),this.props.children)}}sl.propTypes={announcementContext:o().any,children:o().any};const ol=Hr(sl);class rl{constructor(e){this.setToken(e)}setToken(e){this.validate(e),this.token=e}validate(e){if(!e)throw new TypeError("CSRF token cannot be empty.");if("string"!=typeof e)throw new TypeError("CSRF token should be a string.")}toFetchHeaders(){return{"X-CSRF-Token":this.token}}static getToken(){const e=document.cookie;if(!e)return;const t=e.split("; ");if(!t)return;const a=t.find((e=>e.startsWith("csrfToken")));if(!a)return;const n=a.split("=");return n&&2===n.length?n[1]:void 0}}class ll{setBaseUrl(e){if(!e)throw new TypeError("ApiClientOption baseUrl is required.");if("string"==typeof e)try{this.baseUrl=new URL(e)}catch(e){throw new TypeError("ApiClientOption baseUrl is invalid.")}else{if(!(e instanceof URL))throw new TypeError("ApiClientOptions baseurl should be a string or URL");this.baseUrl=e}return this}setCsrfToken(e){if(!e)throw new TypeError("ApiClientOption csrfToken is required.");if("string"==typeof e)this.csrfToken=new rl(e);else{if(!(e instanceof rl))throw new TypeError("ApiClientOption csrfToken should be a string or a valid CsrfToken.");this.csrfToken=e}return this}setResourceName(e){if(!e)throw new TypeError("ApiClientOptions.setResourceName resourceName is required.");if("string"!=typeof e)throw new TypeError("ApiClientOptions.setResourceName resourceName should be a valid string.");return this.resourceName=e,this}getBaseUrl(){return this.baseUrl}getResourceName(){return this.resourceName}getHeaders(){if(this.csrfToken)return this.csrfToken.toFetchHeaders()}}class cl extends Error{constructor(e,t={}){super(e),this.name="PassboltSubscriptionError",this.subscription=t}}const ml=cl;class dl extends bo{constructor(e){super(e,dl.RESOURCE_NAME)}static get RESOURCE_NAME(){return"/rbacs/me"}static getSupportedContainOptions(){return["action","ui_action"]}async findMe(e){const t=e?this.formatContainOptions(e,dl.getSupportedContainOptions()):null;return(await this.apiClient.findAll(t)).body}}const hl=dl;class pl extends n.Component{constructor(e){super(e),this.state=this.defaultState,this.authService=new class{constructor(e){this.apiClientOptions=e,e.setResourceName("auth"),this.apiClient=new at(this.apiClientOptions)}async logout(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("POST",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)return this._logoutLegacy()}async _logoutLegacy(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/logout`,{}),t=await this.apiClient.sendRequest("GET",e,null,{redirect:"manual"});if(!t.ok&&0!==t.status)throw new Ye("An unexpected error happened during the legacy logout process",{code:t.status})}async getServerKey(){const e=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/verify`,{}),t=await this.apiClient.fetchAndHandleResponse("GET",e);return this.mapGetServerKey(t.body)}mapGetServerKey(e){const{keydata:t,fingerprint:a}=e;return{armored_key:t,fingerprint:a}}async verify(e,t){const a=this.apiClient.buildUrl(`${this.apiClient.baseUrl}/verify`,{}),n=new FormData;n.append("data[gpg_auth][keyid]",e),n.append("data[gpg_auth][server_verify_token]",t);const i=this.apiClient.buildFetchOptions();let s,o;i.method="POST",i.body=n,delete i.headers["content-type"];try{s=await fetch(a.toString(),i)}catch(e){throw new et(e.message)}try{o=await s.json()}catch(e){throw new Qe}if(!s.ok){const e=o.header.message;throw new Ye(e,{code:s.status,body:o.body})}return s}}(this.getApiClientOptions())}async componentDidMount(){await this.getLoggedInUser(),await this.getSiteSettings(),await this.getRbacs(),this.initLocale(),this.removeSplashScreen()}componentWillUnmount(){clearTimeout(this.state.onExpiredSession)}get defaultState(){return{name:"api",loggedInUser:null,rbacs:null,siteSettings:null,trustedDomain:this.baseUrl,basename:new URL(this.baseUrl).pathname,getApiClientOptions:this.getApiClientOptions.bind(this),locale:null,displayTestUserDirectoryDialogProps:{userDirectoryTestResult:null},setContext:e=>{this.setState(e)},onLogoutRequested:()=>this.onLogoutRequested(),onCheckIsAuthenticatedRequested:()=>this.onCheckIsAuthenticatedRequested(),onExpiredSession:this.onExpiredSession.bind(this),onGetSubscriptionKeyRequested:()=>this.onGetSubscriptionKeyRequested(),onRefreshLocaleRequested:this.onRefreshLocaleRequested.bind(this)}}get isReady(){return null!==this.state.loggedInUser&&null!==this.state.rbacs&&null!==this.state.siteSettings&&null!==this.state.locale}get baseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ll).setBaseUrl(this.state.trustedDomain).setCsrfToken(rl.getToken())}async getLoggedInUser(){const e=this.getApiClientOptions().setResourceName("users"),t=new at(e),a=(await t.get("me")).body;this.setState({loggedInUser:a})}async getRbacs(){let e=[];if(this.state.siteSettings.canIUse("rbacs")){const t=this.getApiClientOptions(),a=new hl(t);e=await a.findMe({ui_action:!0})}const t=new go(e,!0);this.setState({rbacs:t})}async getSiteSettings(){const e=this.getApiClientOptions().setResourceName("settings"),t=new at(e),a=await t.findAll();await this.setState({siteSettings:new Kn(a.body)})}async initLocale(){const e=await this.getUserLocale();if(e)return this.setState({locale:e.locale});const t=this.state.siteSettings.locale;return this.setState({locale:t})}async getUserLocale(){const e=(await this.getUserSettings()).find((e=>"locale"===e.property));if(e)return this.state.siteSettings.supportedLocales.find((t=>t.locale===e.value))}async getUserSettings(){const e=this.getApiClientOptions().setResourceName("account/settings"),t=new at(e);return(await t.findAll()).body}removeSplashScreen(){document.getElementsByTagName("html")[0].classList.remove("launching")}async onLogoutRequested(){await this.authService.logout(),window.location.href=this.state.trustedDomain}async onCheckIsAuthenticatedRequested(){try{const e=this.getApiClientOptions().setResourceName("auth"),t=new at(e);return await t.get("is-authenticated"),!0}catch(e){if(e instanceof Ye&&401===e.data.code)return!1;throw e}}onExpiredSession(e){this.scheduledCheckIsAuthenticatedTimeout=setTimeout((async()=>{await this.onCheckIsAuthenticatedRequested()?this.onExpiredSession(e):e()}),6e4)}async onGetSubscriptionKeyRequested(){try{const e=this.getApiClientOptions().setResourceName("ee/subscription"),t=new at(e);return(await t.get("key")).body}catch(e){if(e instanceof Ye&&e.data&&402===e.data.code){const t=e.data.body;throw new ml(e.message,t)}throw e}}onRefreshLocaleRequested(e){this.state.siteSettings.setLocale(e),this.initLocale()}render(){return n.createElement(A.Provider,{value:this.state},this.isReady&&this.props.children)}}pl.propTypes={children:o().any};const ul=pl;var gl=a(2092),bl=a(7031),fl=a(5538);class yl extends n.Component{constructor(e){super(e),this.state=this.defaultState}get defaultState(){return{ready:!1}}async componentDidMount(){await gl.ZP.use(bl.Db).use(fl.Z).init({lng:this.locale,load:"currentOnly",interpolation:{escapeValue:!1},react:{useSuspense:!1},backend:{loadPath:this.props.loadingPath||"/locales/{{lng}}/{{ns}}.json"},supportedLngs:this.supportedLocales,fallbackLng:!1,ns:["common"],defaultNS:"common",keySeparator:!1,nsSeparator:!1,debug:!1}),this.setState({ready:!0})}get supportedLocales(){return this.props.context.siteSettings?.supportedLocales?this.props.context.siteSettings?.supportedLocales.map((e=>e.locale)):[this.locale]}get locale(){return this.props.context.locale}async componentDidUpdate(e){await this.handleLocaleChange(e.context.locale)}async handleLocaleChange(e){this.locale!==e&&await gl.ZP.changeLanguage(this.locale)}get isReady(){return this.state.ready}render(){return n.createElement(n.Fragment,null,this.isReady&&this.props.children)}}yl.propTypes={context:o().any,loadingPath:o().any,children:o().any};const vl=I(yl);class kl{constructor(){this.baseUrl=this.getBaseUrl()}async getOrganizationAccountRecoverySettings(){const e=this.getApiClientOptions().setResourceName("account-recovery/organization-policies"),t=new at(e);return(await t.findAll()).body}getBaseUrl(){const e=document.getElementsByTagName("base")&&document.getElementsByTagName("base")[0];return e?e.attributes.href.value.replace(/\/*$/g,""):(console.error("Unable to retrieve the page base tag"),"")}getApiClientOptions(){return(new ll).setBaseUrl(this.baseUrl).setCsrfToken(this.getCsrfToken())}getCsrfToken(){const e=document.cookie;if(!e)return;const t=e.split("; ");if(!t)return;const a=t.find((e=>e.startsWith("csrfToken")));if(!a)return;const n=a.split("=");return n&&2===n.length?n[1]:void 0}}class El extends n.Component{render(){const e=new kl;return n.createElement(ul,null,n.createElement(A.Consumer,null,(t=>n.createElement(vl,{loadingPath:`${t.trustedDomain}/locales/{{lng}}/{{ns}}.json`},n.createElement(xe,null,n.createElement(Be,{accountRecoveryUserService:e},n.createElement(ct,null,n.createElement(m,null,n.createElement(u,null,n.createElement(Kr,null,n.createElement(y,null,n.createElement(S,null),n.createElement(Vr,null),t.loggedInUser&&"admin"===t.loggedInUser.role.name&&t.siteSettings.canIUse("ee")&&n.createElement(nl,null),n.createElement(x.VK,{basename:t.basename},n.createElement(Y,null,n.createElement(N.rs,null,n.createElement(N.AW,{exact:!0,path:["/app/administration/subscription","/app/administration/account-recovery","/app/administration/password-policies","/app/administration/user-passphrase-policies","/app/administration/password-expiry"]}),n.createElement(N.AW,{path:"/app/administration"},n.createElement(z,null,n.createElement(Ti,null,n.createElement(K,null),n.createElement(ol,null),n.createElement(ta,null,n.createElement(ns,null,n.createElement(V,null),n.createElement(kt,null,n.createElement(Xs,null,n.createElement(Ea,null,n.createElement(Ja,null,n.createElement(So,null,n.createElement(_r,null))))))))))),n.createElement(N.AW,{path:["/app/settings/mfa"]},n.createElement(V,null),n.createElement(K,null),n.createElement(ol,null),n.createElement("div",{id:"container",className:"page settings"},n.createElement("div",{id:"app",className:"app",tabIndex:"1000"},n.createElement("div",{className:"header first"},n.createElement(Me,null)),n.createElement(Or,null))))))),n.createElement(Ir,null))))))))))))}}const wl=El,Cl=document.createElement("div");document.body.appendChild(Cl),i.render(n.createElement(wl,null),Cl)}},i={};function s(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}};return n[e].call(a.exports,a,a.exports,s),a.exports}s.m=n,e=[],s.O=(t,a,n,i)=>{if(!a){var o=1/0;for(m=0;m=i)&&Object.keys(s.O).every((e=>s.O[e](a[l])))?a.splice(l--,1):(r=!1,i0&&e[m-1][2]>i;m--)e[m]=e[m-1];e[m]=[a,n,i]},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var i=Object.create(null);s.r(i);var o={};t=t||[null,a({}),a([]),a(a)];for(var r=2&n&&e;"object"==typeof r&&!~t.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,s.d(i,o),i},s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.j=978,(()=>{var e={978:0};s.O.j=t=>0===e[t];var t=(t,a)=>{var n,i,[o,r,l]=a,c=0;if(o.some((t=>0!==e[t]))){for(n in r)s.o(r,n)&&(s.m[n]=r[n]);if(l)var m=l(s)}for(t&&t(a);cs(9494)));o=s.O(o)})(); \ No newline at end of file diff --git a/webroot/locales/de-DE/common.json b/webroot/locales/de-DE/common.json index b8d50340bd..08faddd577 100644 --- a/webroot/locales/de-DE/common.json +++ b/webroot/locales/de-DE/common.json @@ -7,7 +7,7 @@ "(tag)": "(Tag)", "{column.label}": "{column.label}", "{errors.get(key)}": "{errors.get(key)}", - "{this.creatorName} did not initiate this request.": "{this.creatorName} did not initiate this request.", + "{this.creatorName} did not initiate this request.": "{this.creatorName} hat diese Anfrage nicht initiiert.", "{this.state.warnings.get(key)}": "{this.state.warnings.get(key)}", "@your-domain.com": "@your-domain.com", "<0>{{activityCreatorName}} accepted the account recovery policy": "<0>{{activityCreatorName}} hat die Kontowiederherstellungsrichtlinie akzeptiert", @@ -1145,7 +1145,7 @@ "use on this page": "auf dieser Seite verwenden", "Use this option when user entries do not include an email address by default": "Diese Option verwenden, wenn Benutzereinträge standardmäßig keine E-Mail-Adresse enthalten", "Use TLS": "TLS verwenden", - "user": "Benutzer*innen", + "user": "Benutzer", "User": "Benutzer", "User custom filters": "Individuelle Benutzer-Filter", "User custom filters are used in addition to the base DN and user path while searching users.": "Individuelle Benutzerfilter werden zusätzlich zum Basis-DN und Benutzerpfad während der Benutzersuche verwendet.", diff --git a/webroot/locales/es-ES/common.json b/webroot/locales/es-ES/common.json index 310bce89dd..c908a5ca01 100644 --- a/webroot/locales/es-ES/common.json +++ b/webroot/locales/es-ES/common.json @@ -3,11 +3,11 @@ "(Folder) new owner:": "(Folder) nuevo propietario:", "(group)": "(grupo)", "(not yet available)": "(no disponible todavía)", - "(suspended)": "(suspended)", + "(suspended)": "(suspendido)", "(tag)": "(etiqueta)", "{column.label}": "{column.label}", "{errors.get(key)}": "{errors.get(key)}", - "{this.creatorName} did not initiate this request.": "{this.creatorName} did not initiate this request.", + "{this.creatorName} did not initiate this request.": "{this.creatorName} no ha iniciado esta solicitud.", "{this.state.warnings.get(key)}": "{this.state.warnings.get(key)}", "@your-domain.com": "@su-dominio.com", "<0>{{activityCreatorName}} accepted the account recovery policy": "<0>{{activityCreatorName}} aceptó la solicitud de la política de recuperación", @@ -26,20 +26,20 @@ "<0><0>{{activityCreatorName}} rejected the account recovery request": "<0><0>{{activityCreatorName}} rechazó la solicitud de recuperación de la cuenta", "<0>4. Scan the QR codes with your phone.": "<0>4. Escanee los códigos QR con su teléfono.", "<0>5. And you are done!": "<0>5. ¡Y ya está!", - "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.": "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.", - "<0>Warning: Suspension is scheduled for the {this.suspendedDate}": "<0>Warning: Suspension is scheduled for the {this.suspendedDate}", + "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.": "<0>Advertencia: Revise la <1><0><0>documentación<2> para ver qué información es compatible.", + "<0>Warning: Suspension is scheduled for the {this.suspendedDate}": "<0>Advertencia: La suspensión está programada para el {this.suspendedDate}", "<0>Warning: These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.": "<0>Advertencia: Estos son los parámetros proporcionados por un archivo de configuración. Si lo guarda, se ignorará la configuración en el archivo y se usará la de la base de datos.", "<0>Warning: This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.": "<0>Advertencia: Este secreto expirará después de algún tiempo (normalmente unos pocos meses). Asegúrese de guardar la fecha de caducidad y rotarla a tiempo.", "<0>Warning: UPN is not active by default on Azure and requires a specific option set on Azure to be working.": "<0>Advertencia: UPN no está activo de forma predeterminada en Azure y requiere una opción específica establecida en Azure para que funcione.", - "<0>When a user creates a resource, a default expiry date is set to <1><2>days": "<0>When a user creates a resource, a default expiry date is set to <1><2>days", - "1. Click download the account kit.": "1. Click download the account kit.", + "<0>When a user creates a resource, a default expiry date is set to <1><2>days": "<0>Cuando un usuario crea un recurso, se establece una fecha de caducidad predeterminada a <1><2>días", + "1. Click download the account kit.": "1. Haga clic en descargar el kit de la cuenta.", "1. Install the application from the store.": "1. Instale la aplicación desde la tienda.", "2. Install the application from the store.": "2. Instale la aplicación desde la tienda.", "2. Open the application on your phone.": "2. Abra la aplicación en su teléfono.", "3. Click start, here, in your browser.": "3. Haga clic en iniciar, aquí, en su navegador.", - "3. Open the application.": "3. Open the application.", + "3. Open the application.": "3. Abra la aplicación.", "4. Scan the QR codes with your phone.": "4. Escanee los códigos QR con su teléfono.", - "4. Upload the account kit on the desktop app.": "4. Upload the account kit on the desktop app.", + "4. Upload the account kit on the desktop app.": "4. Suba el kit de la cuenta en la aplicación de escritorio.", "5. And you are done!": "5. ¡Y ya está!", "A comment is required.": "Se requiere un comentario.", "A comment must be less than 256 characters": "Un comentario debe tener menos de 256 caracteres", @@ -54,7 +54,7 @@ "A last name is required.": "Se requiere un apellido.", "A name can not be more than 256 char in length.": "Un nombre no puede tener más de 256 caracteres de longitud.", "A name is required.": "Se requiere un nombre.", - "A OTP code is required.": "A OTP code is required.", + "A OTP code is required.": "Se requiere un código OTP.", "A passphrase is required.": "Se requiere una frase de contraseña.", "A password is required.": "Se requiere una contraseña.", "A port is required.": "Se requiere un puerto.", @@ -63,12 +63,12 @@ "A tag name is required.": "Se requiere un nombre de etiqueta.", "A username is required.": "Se requiere un nombre de usuario.", "A Users Directory is configured. The users and groups of passbolt will synchronize with it.": "Un directorio de usuarios está configurado. Los usuarios y grupos de passbolt se sincronizarán con él.", - "About password expiry": "About password expiry", + "About password expiry": "Sobre la caducidad de la contraseña", "Accept": "Aceptar", "Accept new key": "Aceptar nueva clave", "Accept the new SSO provider": "Aceptar el nuevo proveedor de SSO", "Access to this service requires an invitation.": "El acceso a este servicio requiere una invitación.", - "Account kit": "Account kit", + "Account kit": "Kit de la cuenta", "Account recovery": "Recuperación de la cuenta", "Account Recovery": "Recuperación de la cuenta", "Account recovery enrollment": "Inscripción de recuperación de la cuenta", @@ -76,7 +76,7 @@ "Account Recovery Policy": "Política de recuperación de la cuenta", "Activated": "Activo", "Activation pending": "Activación pendiente", - "active": "active", + "active": "activo", "Active Directory": "Active Directory", "Activity": "Actividad", "Add": "Añadir", @@ -93,7 +93,7 @@ "Admin": "Administrador", "administration": "administración", "Administration": "Administración", - "Administrators can add and delete users. They can also create groups and assign group managers. By default they can not see all passwords.": "Administrators can add and delete users. They can also create groups and assign group managers. By default they can not see all passwords.", + "Administrators can add and delete users. They can also create groups and assign group managers. By default they can not see all passwords.": "Los administradores pueden añadir y eliminar usuarios. También pueden crear grupos y asignar administradores de grupos. Por defecto no pueden ver todas las contraseñas.", "Advanced settings": "Configuración avanzada", "after clicking on send, a test email will be sent to the recipient email in order to check that your configuration is correct.": "después de hacer clic en enviar, se enviará un correo electrónico de prueba al destinatario para comprobar que su configuración es correcta.", "Algorithm": "Algoritmo", @@ -105,14 +105,14 @@ "All users": "Todos los usuarios", "Allow": "Permitir", "Allow “Remember this device for a month.“ option during MFA.": "Permitir “Recordar este dispositivo durante un mes.“ opción durante la MFA.", - "Allow group manager": "Allow group manager", - "Allow passbolt to access external services to check if a password has been compromised.": "Allow passbolt to access external services to check if a password has been compromised.", - "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.": "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.", - "Allow users to override the default policy.": "Allow users to override the default policy.", + "Allow group manager": "Permitir administrador de grupo", + "Allow passbolt to access external services to check if a password has been compromised.": "Permitir que Passbolt acceda a servicios externos para comprobar si una contraseña ha sido comprometida.", + "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.": "Permitir que Passbolt acceda a servicios externos para comprobar si la contraseña del usuario se ha visto comprometida cuando el usuario la crea.", + "Allow users to override the default policy.": "Permitir a los usuarios reemplazar la política predeterminada.", "Allowed domains": "Dominios permitidos", "Allows Azure and Passbolt API to securely share information.": "Permita que Azure y Passbolt API compartan información de forma segura.", "Allows Google and Passbolt API to securely share information.": "Permita que Google y Passbolt API compartan información de forma segura.", - "Allows your OAuth2 provider and Passbolt API to securely share information.": "Allows your OAuth2 provider and Passbolt API to securely share information.", + "Allows your OAuth2 provider and Passbolt API to securely share information.": "Permite a su proveedor de OAuth2 y a la API de Passbolt compartir información de forma segura.", "Also delete items inside this folder.": "Elimine también los elementos dentro de esta carpeta.", "Alternatively you can also get in touch with support on community forum or via the paid support channels.": "También puede ponerse en contacto con soporte en el foro de la comunidad o a través de los canales de soporte pagados.", "An account kit is required to transfer your profile and private key to the desktop app.": "Se requiere un kit de cuenta para transferir su perfil y clave privada a la aplicación de escritorio.", @@ -128,19 +128,19 @@ "Are you sure you want to delete the comment?": "¿Está seguro de que desea eliminar el comentario?", "Are you sure you want to delete the folder <1>{{folderName}}?": "¿Está seguro de que desea eliminar la carpeta <1>{{folderName}}?", "Are you sure you want to delete the group <1>{{groupName}}?": "¿Está seguro de que desea eliminar el grupo <1>{{groupName}}?", - "Are you sure you want to delete the resource <1>{{resourceName}}?": "Are you sure you want to delete the resource <1>{{resourceName}}?", + "Are you sure you want to delete the resource <1>{{resourceName}}?": "¿Está seguro que desea eliminar el recurso <1>{{resourceName}}?", "Are you sure you want to delete the tag <1>{{tagName}}?": "¿Está seguro de que desea eliminar la etiqueta <1>{{tagName}}?", "Are you sure you want to disable the current Single Sign-On settings?": "¿Está seguro de que desea desactivar la configuración actual del inicio de sesión único?", "Are you sure?": "¿Estás seguro?", "As soon as an administrator validates your request you will receive an email link to complete the process.": "Tan pronto como un administrador valide su solicitud, recibirá un enlace de correo electrónico para completar el proceso.", - "At least 1 set of characters must be selected": "At least 1 set of characters must be selected", + "At least 1 set of characters must be selected": "Debe seleccionar al menos un conjunto de caracteres", "Authentication method": "Método de autenticación", "Authentication token is missing from server response.": "No se ha encontrado el token de autenticación en la respuesta del servidor.", - "Automatic expiry": "Automatic expiry", - "Automatic Expiry": "Automatic Expiry", - "Automatic update": "Automatic update", - "Automatic Update": "Automatic Update", - "Automatic workflows": "Automatic workflows", + "Automatic expiry": "Caducidad automática", + "Automatic Expiry": "Caducidad automática", + "Automatic update": "Actualización automática", + "Automatic Update": "Actualización automática", + "Automatic workflows": "Flujos de trabajo automáticos", "Avatar": "Avatar", "Avatar of the {{group_name}} group.": "Avatar del grupo {{group_name}}.", "Avatar of user {{first_name}} {{last_name}}.": "Avatar del usuario {{first_name}} {{last_name}}.", @@ -161,8 +161,8 @@ "Can preview": "Puede previsualizar", "can read": "puede leer", "Can read": "Puede leer", - "Can see desktop application setup": "Can see desktop application setup", - "Can see mobile setup": "Can see mobile setup", + "Can see desktop application setup": "Puede ver la configuración de la aplicación de escritorio", + "Can see mobile setup": "Puede ver la configuración del móvil", "Can see password activities": "Puede ver la actividad de las contraseñas", "Can see password comments": "Puede ver los comentarios de las contraseñas", "Can see users workspace": "Puede ver el área de trabajo de los usuarios", @@ -197,7 +197,7 @@ "Complete recovery": "Recuperación completa", "Completing recover. Please wait...": "Completando recuperación. Por favor, espere...", "Completing setup, please wait...": "Completando configuración, espere por favor...", - "Configuration source": "Configuration source", + "Configuration source": "Fuente de la configuración", "Configure another phone": "Configurar otro teléfono", "Configuring SSO access, please wait...": "Configurando el acceso SSO, por favor espere...", "Confirm Organization Recovery Key download": "Confirmar descarga de la clave de recuperación de la organización", @@ -223,7 +223,7 @@ "Copy the link to this user": "Copiar el enlace a este usuario", "Copy to clipboard": "Copiar al portapapeles", "Copy TOTP": "Copiar TOTP", - "Copy TOTP to clipboard": "Copy TOTP to clipboard", + "Copy TOTP to clipboard": "Copiar TOTP al portapapeles", "Copy URI": "Copiar URI", "Copy username": "Copiar nombre de usuario", "Copy username to clipboard": "Copiar nombre de usuario al portapapeles", @@ -249,16 +249,16 @@ "currently:": "actualmente:", "Customer id:": "ID del cliente:", "database": "base de datos", - "days from now.": "days from now.", + "days from now.": "días a partir de ahora.", "Decrypting": "Descifrando", - "Decrypting secret": "Desencriptando secreto", + "Decrypting secret": "Desencriptando secreto...", "Decryption failed, click here to retry": "Error al descifrar, pulsa aquí para reintentar", "Default": "Predeterminado", "Default admin": "Administrador predeterminado", - "default configuration": "default configuration", + "default configuration": "configuración predeterminada", "Default group admin": "Grupo de administradores por defecto", - "Default password expiry period": "Default password expiry period", - "Default password type": "Default password type", + "Default password expiry period": "Período de caducidad de la contraseña predeterminado", + "Default password type": "Tipo de contraseña predeterminado", "Default users multi factor authentication policy": "Política de autentificación por defecto de usuarios de múltiple factor", "Defines the Azure login behaviour by prompting the user to fully login each time or not.": "Define el comportamiento de inicio de sesión de Azure solicitando al usuario que inicie sesión cada vez o no.", "Defines which Azure field needs to be used as Passbolt username.": "Define qué campo de Azure necesita ser utilizado como nombre de usuario de Passbolt.", @@ -275,7 +275,7 @@ "deleted": "eliminado", "Deny": "Denegar", "Description": "Descripción", - "Desktop app setup": "Desktop app setup", + "Desktop app setup": "Configuración de la aplicación de escritorio", "digits": "dígitos", "Directory (tenant) ID": "ID del directorio (inquilino)", "Directory configuration": "Configuración del directorio", @@ -292,7 +292,7 @@ "Do not store sensitive data or click here to enable encryption for the description field.": "No almacenes información sensible o pulsa aquí para activar el cifrado para el campo de descripción.", "Do not store sensitive data. Unlike the password, this data is not encrypted. Upgrade to version 3 to encrypt this information.": "No almacenes datos sensibles. A diferencia de la contraseña, estos datos no están cifrados. Actualice a la versión 3 para cifrar esta información.", "Do you need help?": "¿Necesita ayuda?", - "documentation": "documentation", + "documentation": "documentación", "domain": "dominio", "Domain": "Dominio", "Don't forget to save your settings to apply your modification.": "No olvide guardar su configuración para aplicar su modificación.", @@ -300,17 +300,17 @@ "Download again": "Descargar otra vez", "Download backup": "Descargar respaldo", "Download extension": "Descargar extensión", - "Download the desktop app": "Download the desktop app", + "Download the desktop app": "Descargar la aplicación de escritorio", "Download the kit again!": "¡Descarga el kit de nuevo!", "Download the mobile app": "Descargar la aplicación móvil", - "Download your account kit": "Download your account kit", + "Download your account kit": "Descargar su kit de la cuenta", "Edit": "Editar", "Edit Avatar": "Editar avatar", "Edit group": "Editar grupo", "Edit in passbolt": "Editar en passbolt", "Edit profile": "Editar perfil", "Edit resource": "Editar recurso", - "Edit standalone TOTP": "Edit standalone TOTP", + "Edit standalone TOTP": "Editar TOTP independiente", "Edit subscription key": "Editar clave de suscripción", "Edit tag": "Editar etiqueta", "Edit TOTP": "Editar TOTP", @@ -340,14 +340,14 @@ "Enter the private key used by your organization for account recovery": "Introduzca la clave privada utilizada por su organización para la recuperación de cuenta", "Enter the six digit number as presented on your phone or tablet.": "Introduzca el número de seis dígitos tal y como aparece en su teléfono o tableta.", "entropy:": "entropía:", - "entropy: {this.formatEntropy(this.props.entropy)} / {this.formatEntropy(this.props.targetEntropy)} bits": "entropy: {this.formatEntropy(this.props.entropy)} / {this.formatEntropy(this.props.targetEntropy)} bits", - "environment variables": "environment variables", - "environment variables (legacy)": "environment variables (legacy)", + "entropy: {this.formatEntropy(this.props.entropy)} / {this.formatEntropy(this.props.targetEntropy)} bits": "entropía: {this.formatEntropy(this.props.entropy)} / {this.formatEntropy(this.props.targetEntropy)} bits", + "environment variables": "variables de entorno", + "environment variables (legacy)": "variables de entorno (antiguo)", "Error": "Error", "Error details": "Detalles del error", "Error, this is not the current organization recovery key.": "Error, esta no es la clave actual de recuperación de la organización.", "Errors:": "Errores", - "Estimated entropy": "Estimated entropy", + "Estimated entropy": "Entropía estimada", "Every user can decide to provide a copy of their private key and passphrase by default during the setup, but they can opt in.": "Cada usuario puede decidir proporcionar una copia de su clave privada y contraseña por defecto durante la configuración, pero pueden optar por incluirla.", "Every user is required to provide a copy of their private key and passphrase during setup.": "Cada usuario debe proporcionar una copia de su clave privada y contraseña durante la configuración.", "Every user will be prompted to provide a copy of their private key and passphrase by default during the setup, but they can opt out.": "Se pedirá a cada usuario que proporcione una copia de su clave privada y contraseña por defecto durante la configuración, pero puede optar por excluirla.", @@ -357,19 +357,19 @@ "expired ": "caducado ", "Expires": "Caduca", "Expires on:": "Caduca el:", - "Expiry": "Expiry", - "Expiry Policies": "Expiry Policies", + "Expiry": "Caducidad", + "Expiry Policies": "Políticas de caducidad", "Export": "Exportar", "Export all": "Exportar todo", "Export passwords": "Exportar contraseñas", - "External password dictionary check": "External password dictionary check", - "External services": "External services", + "External password dictionary check": "Comprobar diccionario de contraseñas externo", + "External services": "Servicios externos", "Fair": "Justo", "FAQ: Why are my emails not sent?": "Preguntas Frecuentes: ¿Por qué no se envían mis correos electrónicos?", "Favorite": "Favorito", "Favorites": "Favoritos", - "file": "file", - "file (legacy)": "file (legacy)", + "file": "archivo", + "file (legacy)": "archivo (antiguo)", "Filters": "Filtros", "Fingerprint": "Huella", "First complete the configuration steps described in the current tab.": "Primero complete los pasos de configuración descritos en la pestaña actual.", @@ -385,9 +385,9 @@ "For more information about email notification, checkout the dedicated page on the help website.": "Para más información acerca de las notificaciones por correo electrónico, consulte la página dedicada en el sitio web de ayuda.", "For more information about MFA policy settings, checkout the dedicated page on the help website.": "Para más información sobre los ajustes de políticas de AMF, consulte la página dedicada en el sitio web de ayuda.", "For more information about SSO, checkout the dedicated page on the help website.": "Para más información acerca del SSO, consulte la página dedicada en el sitio web de ayuda.", - "For more information about the password expiry, checkout the dedicated page on the help website.": "For more information about the password expiry, checkout the dedicated page on the help website.", - "For more information about the password policy settings, checkout the dedicated page on the help website.": "For more information about the password policy settings, checkout the dedicated page on the help website.", - "For more information about the user passphrase policies, checkout the dedicated page on the help website.": "For more information about the user passphrase policies, checkout the dedicated page on the help website.", + "For more information about the password expiry, checkout the dedicated page on the help website.": "Para más información sobre la caducidad de la contraseña, compruebe la página dedicada en el sitio web de ayuda.", + "For more information about the password policy settings, checkout the dedicated page on the help website.": "Para obtener más información sobre la configuración de la política de contraseñas, consulte la página dedicada en el sitio web de ayuda.", + "For more information about the user passphrase policies, checkout the dedicated page on the help website.": "Para más información sobre las políticas de contraseñas del usuario, consulte la página dedicada en el sitio web de ayuda.", "For Openldap only. Defines which group object to use.": "Sólo para Openldap. Define qué grupo se desea usar.", "For Openldap only. Defines which user object to use.": "Solo para Openldap. Determina qué usuario se desea usar.", "For security reasons please check with your administrator that this is a change that they initiated.": "Por razones de seguridad, por favor compruebe con su administrador que este es un cambio que iniciaron.", @@ -399,7 +399,7 @@ "Generate new key instead": "Generar nueva clave en su lugar", "Generate password": "Generar contraseña", "Get started": "Empezar", - "Get started !": "Empezar !", + "Get started !": "¡Empezar!", "Get started in 5 easy steps": "Empieza en 5 sencillos pasos", "Getting started with Time based One Time Password (TOTP)": "Primeros pasos con la contraseña de un solo uso basada en el tiempo (TOTP)", "Go back": "Volver", @@ -440,8 +440,8 @@ "I do not agree to share this info with my organization recovery contacts": "No estoy de acuerdo en compartir esta información con mis contactos de recuperación de la organización", "I do not want to share a copy of my private key & passphrase with my organization recovery contacts.": "No quiero compartir una copia de mi clave privada y contraseña con mis contactos de recuperación de la organización.", "I lost my passphrase, generate a new private key.": "Perdí mi contraseña, genera una nueva clave privada.", - "I safely stored my recovery kit.": "I safely stored my recovery kit.", - "I verified with <1>{this.creatorName} that the request is valid.": "I verified with <1>{this.creatorName} that the request is valid.", + "I safely stored my recovery kit.": "He guardado mi kit de recuperación de forma segura.", + "I verified with <1>{this.creatorName} that the request is valid.": "He verificado con <1>{this.creatorName} que la solicitud es válida.", "I want to try again.": "Quiero intentarlo de nuevo.", "If there was an issue during the transfer, either the operation was cancelled on the mobile side, or the authentication token expired.": "Si hubo un problema durante la transferencia, o bien la operación fue cancelada en el lado del teléfono móvil, o el token de autenticación caducó.", "If this does not work get in touch with support.": "Si esto no funciona, contacta con soporte.", @@ -455,20 +455,20 @@ "If you still need to recover your account, you will need to start the process from scratch.": "Si todavía necesita recuperar su cuenta, necesitará iniciar el proceso desde cero.", "Ignored:": "Ignorado", "Import": "Importar", - "Import account": "Import account", + "Import account": "Importar cuenta", "Import an OpenPGP Public key": "Importar una clave pública OpenPGP", - "Import another account": "Import another account", + "Import another account": "Importar otra cuenta", "Import folders": "Importar carpetas", "Import passwords": "Importar contraseñas", "Import success!": "¡Importación exitosa!", "Import/Export": "Importar/Exportar", "Important notice:": "Aviso importante:", - "Importing account kit": "Importing account kit", + "Importing account kit": "Importando kit de la cuenta...", "In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.": "Para utilizar el método de autenticación "Nombre de usuario y contraseña" con Google, necesitará activar MFA en su cuenta de Google. La contraseña no debe ser su contraseña de inicio de sesión, tiene que crear una "Contraseña de la aplicación" generada por Google. Sin embargo, el correo electrónico sigue siendo el mismo.", "In this section you can adjust the composition of the emails, e.g. which information will be included in the notification.": "En esta sección puedes ajustar la composición de los correos electrónicos. Por ejemplo, qué información se incluirá en la notificación.", - "In this section you can choose automatic behaviours.": "In this section you can choose automatic behaviours.", + "In this section you can choose automatic behaviours.": "En esta sección se pueden elegir comportamientos automáticos.", "In this section you can choose the default behavior of account recovery for all users.": "En esta sección puede elegir el comportamiento predeterminado de la recuperación de la cuenta para todos los usuarios.", - "In this section you can choose the default behaviour of password expiry policy for all users.": "In this section you can choose the default behaviour of password expiry policy for all users.", + "In this section you can choose the default behaviour of password expiry policy for all users.": "En esta sección puede elegir el comportamiento predeterminado de la política de caducidad de las contraseñas para todos los usuarios.", "In this section you can choose which email notifications will be sent.": "En esta sección puedes determinar qué notificaciones de correo electrónico se enviarán.", "In this section you can choose which multi factor authentication will be available.": "En esta sección usted puede elegir qué autenticación de múltiples factores estará disponible.", "In this section you can define access controls for each user role.": "En esta sección puede definir los controles de acceso para cada rol de usuario.", @@ -478,7 +478,7 @@ "Invalid permission type for share permission item.": "Tipo de permiso inválido para elemento de permiso compartido.", "is owner": "es propietario", "Is owner": "Es propietario", - "Issuer": "Issuer", + "Issuer": "Emisor", "It does feel a bit empty here.": "Parece un poco vacío esto.", "It is mandatory to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?": "Es obligatorio compartir de forma segura una copia de su clave privada con los contactos de recuperación de su organización. ¿Desea continuar?", "It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing.": "No es posible realizar una configuración de una nueva cuenta ya que todavía está conectado. Necesita cerrar la sesión primero antes de continuar.", @@ -496,7 +496,7 @@ "Keepass file format not recognized": "Formato de archivo Keepass no reconocido", "Keepass key file (optional)": "Keepass key file (opcional)", "Keepass password": "Contraseña de keepass", - "Key": "Key", + "Key": "Clave", "Key Id": "Id de clave", "Key length": "Longitud de la clave", "Key Size": "Tamaño de Clave", @@ -524,14 +524,14 @@ "Make sure your print it or store it in a safe place. You may need it later!": "Asegúrese de guardarlo en un lugar seguro. Puede que lo necesite más tarde!", "Manage Subscription": "Administrar suscripción", "Mandatory": "Necesario", - "Mark as expired": "Mark as expired", + "Mark as expired": "Marcar como caducado", "Member": "Miembro", "Members": "Miembros", "Metadata": "Metadatos", "MFA": "MFA", "MFA Policy": "Política de MFA", - "Minimal recommendation": "Minimal recommendation", - "Minimal requirement": "Minimal requirement", + "Minimal recommendation": "Recomendación mínima", + "Minimal requirement": "Requisito mínimo", "Mobile Apps": "Aplicaciones móviles", "Mobile setup": "Configuración del teléfono móvil", "Mobile transfer": "Transferencia del teléfono móvil", @@ -544,7 +544,7 @@ "Multi factor authentication": "Autenticación de múltiples factores", "Multi Factor Authentication": "Autenticación de múltiples factores", "Multi resource and folder share is not implemented.": "No se ha implementado el compartido de multiples recursos y carpetas.", - "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).": "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).", + "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).": "La autenticación de múltiples factores (MFA) es un método para confirmar la identidad de un usuario que requiere presentar dos o más evidencias (o factores).", "Multi-factor authentication has been disabled successfully": "La autenticación de múltiples factores se ha desactivado correctamente", "My tags": "Mis etiquetas", "n/a": "n/a", @@ -562,14 +562,14 @@ "New Organization Recovery Key": "Añadir una clave de recuperación de la organización", "new owner": "nuevo propietario", "New password": "Nueva contraseña", - "New TOTP": "New TOTP", + "New TOTP": "Nuevo TOTP", "New user": "Nuevo usuario", "Next": "Siguiente", "No": "No", "No access": "Sin acceso", "No file selected": "Ningún archivo seleccionado", "No key file selected": "Ningún archivo de clave seleccionado", - "No Password Expiry is configured. Enable it to activate automatic password expiration and automatic password expiration reset workflows.": "No Password Expiry is configured. Enable it to activate automatic password expiration and automatic password expiration reset workflows.", + "No Password Expiry is configured. Enable it to activate automatic password expiration and automatic password expiration reset workflows.": "No se ha configurado una caducidad de contraseña. Actívelo para habilitar la caducidad automática de contraseñas y los flujos de trabajo de restablecimiento de contraseña automáticos.", "No passwords are marked with this tag yet. Mark a password with this tag or wait for a team member to mark a password with this tag.": "Todavía no hay contraseñas marcadas con esta etiqueta. Marque una contraseña con esta etiqueta o espere a que un miembro del equipo marque una contraseña con esta etiqueta.", "No passwords are shared with this group yet.": "Aún no hay contraseñas compartidas con este grupo.", "No passwords are shared with this group yet. Share a password with this group or wait for a team member to share one with this group.": "No hay contraseñas compartidas con este grupo todavía. Comparta una contraseña con este grupo o espere a que un miembro del equipo comparta una con este grupo.", @@ -577,9 +577,9 @@ "No passwords are shared with you yet. It does feel a bit empty here, wait for a team member to share a password with you.": "Aún no hay contraseñas compartidas contigo. Se siente un poco vacío aquí, espere a que un miembro del equipo comparta una contraseña con usted.", "No passwords are yet tagged. It does feel a bit empty here, tag your first password.": "Aún no hay contraseñas etiquetadas. Se siente un poco vacío aquí, etiquete su primera contraseña.", "No passwords found for the current page. You can use the search.": "No se han encontrado contraseñas en esta página actual. Puede utilizar la búsqueda.", - "No passwords have expired yet.": "No passwords have expired yet.", + "No passwords have expired yet.": "Ninguna contraseña ha caducado aún.", "No passwords in this folder yet.": "Aún no hay contraseñas en esta carpeta.", - "No QR code found.": "No QR code found.", + "No QR code found.": "No se ha encontrado ningún código QR.", "No resources have been synchronized.": "Ningún recurso ha sido sincronizado.", "No resources will be synchronized.": "Ningún recurso será sincronizado.", "No result match your search. Try with another search term.": "Ningún resultado coincide con su búsqueda. Intente con otro término de búsqueda.", @@ -594,25 +594,25 @@ "None of your passwords are yet marked as favorite. Add stars to passwords you want to easily find later.": "No tiene ninguna contraseña marcada como favorita. Añada estrellas a las contraseñas que desee encontrar facilmente.", "None of your passwords matched this search.": "Ninguna de las contraseñas coincide con esta búsqueda.", "not available": "no está disponible", - "Not set": "Not set", - "Note that this will not prevent a user from customizing the settings while generating a password.": "Note that this will not prevent a user from customizing the settings while generating a password.", + "Not set": "Sin definir", + "Note that this will not prevent a user from customizing the settings while generating a password.": "Tenga en cuenta que esto no impedirá que un usuario personalice la configuración mientras genera una contraseña.", "Number of recovery": "Número de recuperación", "Number of words": "Número de palabras", "Ok": "Aceptar", "OK": "Aceptar", "Ok, I understand what I need to do.": "De acuerdo, entiendo lo que tengo que hacer.", "Once expired you will not be able to connect to your account.": "Una vez que haya caducado, no podrá conectarse a su cuenta.", - "Once the comment is deleted, it will be removed permanently and will not be recoverable.": "Once the comment is deleted, it will be removed permanently and will not be recoverable.", - "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "Once the resource is deleted, it will be removed permanently and will not be recoverable.", - "Once the tag is deleted, it will be removed permanently and will not be recoverable.": "Once the tag is deleted, it will be removed permanently and will not be recoverable.", - "Once you enter this code, you can log in.": "Una vez ingresado este código, podrás iniciar sesión.", - "One Time Password (OTP)": "One Time Password (OTP)", + "Once the comment is deleted, it will be removed permanently and will not be recoverable.": "Una vez que el comentario sea eliminado, se eliminará permanentemente y no será recuperable.", + "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "Una vez eliminado el recurso, se eliminará permanentemente y no será recuperable.", + "Once the tag is deleted, it will be removed permanently and will not be recoverable.": "Una vez que la etiqueta sea eliminada, se eliminará permanentemente y no será recuperable.", + "Once you enter this code, you can log in.": "Una vez ingresado este código, podrá iniciar sesión.", + "One Time Password (OTP)": "Contraseña de un solo uso (OTP)", "Only administrators can invite users to register.": "Solo los administradores pueden invitar a los usuarios a registrarse.", "Only administrators would be able to invite users to register. ": "Solo los administradores podrían invitar a los usuarios a registrarse. ", - "Only alphanumeric, dash and underscore characters are accepted.": "Only alphanumeric, dash and underscore characters are accepted.", + "Only alphanumeric, dash and underscore characters are accepted.": "Sólo se aceptan caracteres alfanuméricos, guiones y guiones bajos.", "Only numeric characters allowed.": "Sólo se permiten caracteres numéricos.", - "Only passbolt format is allowed.": "Only passbolt format is allowed.", - "Only PNG or JPEG file are accepted.": "Only PNG or JPEG file are accepted.", + "Only passbolt format is allowed.": "Sólo se permite el formato Passbolt.", + "Only PNG or JPEG file are accepted.": "Sólo se aceptan archivos PNG o JPEG.", "Only synchronize enabled users (AD)": "Sincronizar solo usuarios habilitados (AD)", "Only the group manager can add new people to a group.": "Solo el administrador del grupo puede añadir nuevos miembros a un grupo.", "Oops, something went wrong": "Ups, algo salió mal", @@ -622,7 +622,7 @@ "Open Ldap": "OpenLDAP", "open passbolt in a new tab": "abrir passbolt en una nueva pestaña", "Open URI in a new Tab": "Abrir en una nueva pestaña", - "OpenId Configuration Path": "OpenId Configuration Path", + "OpenId Configuration Path": "Ruta de configuración del OpenID", "Opt-in (default)": "Habilitar (por defecto)", "Optional": "Opcional", "Optional, Opt-in": "Opcional, incluir", @@ -634,40 +634,40 @@ "or, contact us": "o, contáctenos", "Organization": "Organización", "Organization key passphrase": "Frase de contraseña de la organización", - "Organization key passphrase confirmation": "Organization key passphrase confirmation", + "Organization key passphrase confirmation": "Confirmación de la contraseña de la clave de la organización", "Organization Recovery Key": "Añadir una clave de recuperación de la organización", "Otherwise, you may lose access to your data.": "De lo contrario, puede perder el acceso a sus datos.", "Owned by me": "Mío", "Passbolt is available on AppStore & PlayStore": "Passbolt está disponible en AppStore & PlayStore", "Passbolt is available on the Windows store.": "Passbolt está disponible en la tienda de Windows.", "Passbolt needs an smtp server in order to send invitation emails after an account creation and to send email notifications.": "Passbolt necesita un servidor SMTP para enviar mensajes de invitación después de la creación de una cuenta y para enviar notificaciones por correo electrónico.", - "Passbolt recommends a minimum of {{minimalAdvisedEntropy}} bits to be safe.": "Passbolt recommends a minimum of {{minimalAdvisedEntropy}} bits to be safe.", - "Passbolt recommends passphrase strength to be at minimum of {{MINIMAL_ADVISED_ENTROPY}} bits to be safe.": "Passbolt recommends passphrase strength to be at minimum of {{MINIMAL_ADVISED_ENTROPY}} bits to be safe.", + "Passbolt recommends a minimum of {{minimalAdvisedEntropy}} bits to be safe.": "Passbolt recomienda un mínimo de {{minimalAdvisedEntropy}} bits para que sea seguro.", + "Passbolt recommends passphrase strength to be at minimum of {{MINIMAL_ADVISED_ENTROPY}} bits to be safe.": "Passbolt recomienda que la fuerza de la contraseña sea como mínimo de {{MINIMAL_ADVISED_ENTROPY}} bits para que sea segura.", "Passphrase": "Contraseña", - "Passphrase confirmation": "Passphrase confirmation", + "Passphrase confirmation": "Confirmación de la contraseña", "Passphrase required": "Se requiere contraseña", - "Passphrase settings": "Passphrase settings", + "Passphrase settings": "Configuración de contraseña", "Password": "Contraseña", - "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.": "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.", - "Password expiry": "Password expiry", - "Password Expiry": "Password Expiry", - "Password expiry date is renewed based on the default password expiry period whenever a password is updated.": "Password expiry date is renewed based on the default password expiry period whenever a password is updated.", + "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.": "La contraseña caduca automáticamente cuando un usuario o grupo con un usuario que ha accedido a la contraseña se elimina de la lista de permisos.", + "Password expiry": "Caducidad de la contraseña", + "Password Expiry": "Caducidad de la contraseña", + "Password expiry date is renewed based on the default password expiry period whenever a password is updated.": "La fecha de caducidad de la contraseña se renueva basándose en el período de caducidad de la contraseña predeterminado cada vez que se actualiza una contraseña.", "Password Generator": "Generador de contraseñas", - "Password generator default settings": "Password generator default settings", - "Password is no longer marked as expired whenever the password is updated.": "Password is no longer marked as expired whenever the password is updated.", + "Password generator default settings": "Configuración predeterminada del generador de contraseñas", + "Password is no longer marked as expired whenever the password is updated.": "La contraseña ya no se marcará como caducada cuando se actualice la contraseña.", "Password must be a valid string": "La contraseña debe ser una cadena de texto válida", - "Password Policy": "Password Policy", + "Password Policy": "Política de contraseñas", "passwords": "contraseñas", "Passwords": "Contraseñas", - "Passwords settings": "Passwords settings", + "Passwords settings": "Configuración de contraseñas", "Paste the OpenPGP Private key here": "Pegue la clave privada OpenPGP aquí", "Pending": "Pendiente", "Pick a color and enter three characters.": "Escoge un color e introduce tres caracteres.", "Please authenticate with the Single Sign-On provider to continue.": "Por favor, autentifíquese con el proveedor de inicio de sesión único para continuar.", - "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.": "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.", + "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.": "Por favor, confirme que realmente desea eliminar los recursos. Después de hacer clic en ok, los recursos serán eliminados permanentemente.", "Please contact your administrator to enable multi-factor authentication.": "Póngase en contacto con su administrador para habilitar la autenticación de múltiples factores.", "Please contact your administrator to enable the account recovery feature.": "Póngase en contacto con su administrador para activar la función de recuperación de la cuenta.", - "Please contact your administrator to fix this issue.": "Please contact your administrator to fix this issue.", + "Please contact your administrator to fix this issue.": "Por favor, póngase en contacto con su administrador para solucionar este problema.", "Please contact your administrator to request an invitation link.": "Por favor contacte a su administrador para solicitar un enlace de invitación.", "Please double check with the user in case they still need some help to log in.": "Por favor, compruebe con el usuario en caso de que necesite ayuda para iniciar sesión.", "Please download one of these browsers to get started with passbolt:": "Por favor, descargue uno de estos navegadores para empezar con Passbolt:", @@ -681,7 +681,7 @@ "Please enter your passphrase to continue.": "Por favor, introduzca su contraseña para continuar.", "Please enter your passphrase.": "Por favor, introduzca su contraseña.", "Please enter your private key to continue.": "Bienvenido, por favor ingrese su clave privada para continuar.", - "Please follow these instructions:": "Please follow these instructions:", + "Please follow these instructions:": "Por favor, sigue estas instrucciones:", "Please install the browser extension.": "Por favor, instale la extensión del navegador.", "Please make sure there is at least one group manager.": "Por favor, asegúrese de que hay al menos un administrador de grupo.", "Please make sure there is at least one owner.": "Por favor, asegúrese de que haya al menos un propietario.", @@ -692,7 +692,7 @@ "Please try again.": "Por favor, inténtelo de nuevo.", "Please wait, while your request is processed.": "Por favor, espere, mientras su solicitud es procesada.", "Please wait...": "Por favor espere...", - "Policy Override": "Policy Override", + "Policy Override": "Reemplazar la política", "Port": "Puerto", "Port must be a number between 1 and 65535": "El puerto debe ser un número entre 1 y 65535", "Port must be a valid number": "El puerto debe ser un número válido", @@ -708,7 +708,7 @@ "Public": "Público", "Public key": "Clave pública", "Public key block": "Bloque de clave pública", - "QR code picture": "QR code picture", + "QR code picture": "Imagen del código QR", "Quality": "Calidad", "Randomize": "Aleatorizar", "Read RBAC doc": "Leer documento CABR", @@ -775,8 +775,8 @@ "Save Settings Summary": "Guardar resumen de ajustes", "Save Single Sign-On configuration": "Guardar configuración de inicio de sesión único", "Save the data entered as a new credential": "Guardar los datos introducidos como una nueva credencial", - "Scan this bar code": "Escanear este código de barras", - "Scope": "Scope", + "Scan this bar code": "Escanee este código de barras", + "Scope": "Ámbito de aplicación", "Search": "Buscar", "Search among available credentials": "Buscar entre las credenciales disponibles", "Search passwords": "Buscar contraseñas", @@ -787,18 +787,18 @@ "Secret": "Secreto", "Secret expiry": "Caducidad del secreto", "Secret key": "Clave secreta", - "Secure": "Secure", + "Secure": "Segura", "Security token": "Token de seguridad", "See error details": "Ver detalles del error", "See list": "Ver lista", "See structure": "Ver estructura", "See the {settings.provider.name} documentation": "Ver la documentación de {settings.provider.name}", - "Select a file": "Select a file", + "Select a file": "Seleccione un archivo", "Select a file to import": "Seleccione un archivo a importar", "Select a provider": "Seleccione un proveedor", "Select all": "Seleccionar todo", "Select user": "Seleccionar usuario", - "Selected set of characters": "Selected set of characters", + "Selected set of characters": "Conjunto de caracteres seleccionados", "Self Registration": "Auto-registro", "Send": "Enviar", "Send test email": "Enviar correo electrónico de prueba", @@ -814,9 +814,9 @@ "Server response is empty.": "La respuesta del servidor está vacía.", "Server url": "Url del servidor", "Session Expired": "Sesión Caducada", - "Set expiry date": "Set expiry date", - "Set the date automatically:": "Set the date automatically:", - "Set the date manually:": "Set the date manually:", + "Set expiry date": "Establecer fecha de caducidad", + "Set the date automatically:": "Establecer la fecha automáticamente:", + "Set the date manually:": "Establecer la fecha manualmente:", "Settings": "Ajustes", "Settings have been found in your database as well as in your passbolt.php (or environment variables).": "Se han encontrado configuraciones en su base de datos así como en su passbolt.php (o variables de entorno).", "Share": "Compartir", @@ -857,8 +857,8 @@ "Something went wrong!": "¡Algo salió mal!", "Sorry no multi factor authentication is enabled for this organization.": "Lo sentimos, la autenticación de múltiples factores no está habilitada para esta organización.", "Sorry the account recovery feature is not enabled for this organization.": "Lo sentimos, la función de recuperación de cuenta no está habilitada para esta organización.", - "Sorry the Mobile app setup feature is only available in a secure context (HTTPS).": "Sorry the Mobile app setup feature is only available in a secure context (HTTPS).", - "Sorry the multi factor authentication feature is only available in a secure context (HTTPS).": "Sorry the multi factor authentication feature is only available in a secure context (HTTPS).", + "Sorry the Mobile app setup feature is only available in a secure context (HTTPS).": "Lo sentimos, la función de configuración de la aplicación móvil sólo está disponible en un contexto seguro (HTTPS).", + "Sorry the multi factor authentication feature is only available in a secure context (HTTPS).": "Lo sentimos, la función de autenticación de múltiples factores sólo está disponible en un contexto seguro (HTTPS).", "sorry you can only have one key set at the moment": "lo sentimos, solo puedes tener una clave configurada en este momento", "Sorry your subscription is either missing or not readable.": "Lo sentimos, tu suscripción no está disponible o no se puede leer.", "Sorry, it is not possible to proceed. The first QR code is empty.": "Lo sentimos, no es posible continuar. El primer código QR está vacío.", @@ -875,7 +875,7 @@ "Start typing a person name": "Comenzar a escribir un nombre de persona", "Start typing a user or group name": "Comenzar a escribir un nombre de usuario o grupo", "Status": "Estado", - "Store your recovery kit in a safe place.": "Store your recovery kit in a safe place.", + "Store your recovery kit in a safe place.": "Guarde su kit de recuperación en un lugar seguro.", "Strong": "Fuerte", "Submit": "Enviar", "Submitting the form will overwrite those settings with the ones you choose in the form below.": "Enviar el formulario sobrescribirá la configuración.", @@ -886,10 +886,10 @@ "Success": "Éxito", "Success:": "Éxito", "Suggested": "Sugerido", - "Suspend this user": "Suspend this user", - "suspended": "suspended", - "Suspended": "Suspended", - "Suspended users": "Suspended users", + "Suspend this user": "Suspender este usuario", + "suspended": "suspendida", + "Suspended": "Suspendido", + "Suspended users": "Usuarios suspendidos", "Sync operations": "Operaciones de sincronización", "Synchronization options": "Opciones de sincronización", "Synchronize": "Sincronizar", @@ -906,7 +906,7 @@ "Test settings": "Probar ajustes", "Test settings report": "Informe de ajustes de prueba", "Test Single Sign-On configuration": "Comprobar configuración de inicio de sesión único", - "The account kit has been downloaded successfully.": "The account kit has been downloaded successfully.", + "The account kit has been downloaded successfully.": "El kit de la cuenta se ha descargado correctamente.", "The account recovery request does not exist.": "La solicitud de recuperación de cuenta no existe.", "The account recovery review has been saved successfully": "La revisión de recuperación de la cuenta se ha guardado correctamente", "The account recovery subscription setting has been updated.": "La configuración de suscripción de recuperación de cuenta ha sido actualizada.", @@ -917,15 +917,15 @@ "The comment has been added successfully": "El comentario ha sido añadido correctamente", "The comment has been deleted successfully": "El comentario se ha eliminado correctamente", "The configuration has been disabled as it needs to be checked to make it correct before using it.": "La configuración ha sido desactivada porque tiene que ser comprobada para que sea correcta antes de usarla.", - "The current configuration comes from a file or environment variables. If you save them, they will be overwritten and come from the database instead.": "The current configuration comes from a file or environment variables. If you save them, they will be overwritten and come from the database instead.", - "The current passphrase configuration generates passphrases that are not strong enough.": "The current passphrase configuration generates passphrases that are not strong enough.", - "The current password configuration generates passwords that are not strong enough.": "The current password configuration generates passwords that are not strong enough.", + "The current configuration comes from a file or environment variables. If you save them, they will be overwritten and come from the database instead.": "La configuración actual proviene de un archivo o variables de entorno. Si la guarda, se sobrescribirá y provendrá de la base de datos.", + "The current passphrase configuration generates passphrases that are not strong enough.": "La configuración de la contraseña actual genera contraseñas que no son lo suficientemente fuertes.", + "The current password configuration generates passwords that are not strong enough.": "La configuración de la contraseña actual genera contraseñas que no son lo suficientemente fuertes.", "The default admin user is the user that will perform the operations for the the directory.": "El usuario administrador por defecto es el usuario que realizará las operaciones del directorio.", "The default group manager is the user that will be the group manager of newly created groups.": "El administrador de grupos por defecto es el usuario que será el administrador de grupos de grupos recién creados.", "The default language of the organisation.": "El idioma predeterminado de la organización.", - "The default password expiry period should be a number between 1 and 999 days.": "The default password expiry period should be a number between 1 and 999 days.", - "The default password expiry period should be a valid number.": "The default password expiry period should be a valid number.", - "The default type is": "The default type is", + "The default password expiry period should be a number between 1 and 999 days.": "El período de caducidad predeterminado de la contraseña debe ser un número entre 1 y 999 días.", + "The default password expiry period should be a valid number.": "El período de caducidad predeterminado de la contraseña debe ser un número válido.", + "The default type is": "El tipo predeterminado es", "The description content will be encrypted.": "El contenido de la descripción será encriptado.", "The description has been updated successfully": "La descripción se ha actualizado correctamente", "The dialog has been closed.": "Se ha cerrado el diálogo.", @@ -950,26 +950,26 @@ "The invitation is expired.": "La invitación ha caducado.", "The invite has been resent successfully": "La invitación se ha reenviado correctamente", "The key can't be empty.": "La clave no puede estar vacía.", - "The key is not valid.": "The key is not valid.", - "The key is required.": "The key is required.", + "The key is not valid.": "La clave no es válida.", + "The key is required.": "Se requiere la clave.", "The MFA policy settings were updated.": "Se actualizaron los ajustes de la política de MFA.", "The multi factor authentication settings for the organization were updated.": "Se actualizaron las opciones de autenticación de múltiples factores en la organización.", - "The name is required.": "The name is required.", + "The name is required.": "Se requiere el nombre.", "The new organization recovery key should not be a formerly used organization recovery key.": "La nueva clave de recuperación de la organización no debe ser una clave de recuperación de la organización usada anteriormente.", "The new SSO provider: {this.props.newProvider.name}": "El nuevo proveedor de SSO: {this.props.newProvider.name}", - "The OAuth2 authentication endpoint.": "The OAuth2 authentication endpoint.", - "The OpenId configuration relative path from the given login url.": "The OpenId configuration relative path from the given login url.", - "The OpenId scope.": "The OpenId scope.", + "The OAuth2 authentication endpoint.": "El punto final de autenticación OAuth2.", + "The OpenId configuration relative path from the given login url.": "Ruta relativa a la configuración del OpenID desde la url de inicio de sesión dada.", + "The OpenId scope.": "El ámbito de aplicación del OpenID.", "The operation failed with the following error:": "La operación falló con el siguiente error:", "The operation has been aborted.": "La operación ha sido abortada.", "The operation was cancelled.": "La operación fue cancelada.", "The operation was successful.": "La operación fue exitosa.", "The organization private recovery key should not be stored in passbolt.": "La clave de recuperación privada de la organización no debe almacenarse en passbolt.", "The organization recovery policy has been updated successfully": "La política de recuperación de la organización se ha actualizado correctamente", - "The passphrase confirmation is required.": "The passphrase confirmation is required.", - "The passphrase confirmation should match the passphrase": "The passphrase confirmation should match the passphrase", + "The passphrase confirmation is required.": "Se requiere la confirmación de la contraseña.", + "The passphrase confirmation should match the passphrase": "La confirmación de la contraseña debe coincidir con la contraseña", "The passphrase from the SSO kit doesn't match your private key: {{error}}": "La contraseña del kit del SSO no coincide con su clave privada: {{error}}", - "The passphrase generator will not generate strong enough passphrase. Minimum of {{minimum}}bits is required": "The passphrase generator will not generate strong enough passphrase. Minimum of {{minimum}}bits is required", + "The passphrase generator will not generate strong enough passphrase. Minimum of {{minimum}}bits is required": "El generador de contraseñas no generará una contraseña lo suficientemente fuerte. Se requiere un mínimo de {{minimum}} bits", "The passphrase is invalid.": "La contraseña no es válida.", "The passphrase is part of an exposed data breach.": "La contraseña es parte de una brecha de datos expuesta.", "The passphrase is stored on your device and never sent server side.": "La contraseña se almacena en su dispositivo y nunca se envía al servidor.", @@ -977,21 +977,21 @@ "The passphrase should not be empty.": "La contraseña no puede estar vacía.", "The passphrase should not be part of an exposed data breach.": "La contraseña no debe formar parte de una brecha de datos expuesta.", "The passphrase was updated!": "¡La contraseña ha sido actualizada!", - "The passphrase word count must be set to 4 at least": "The passphrase word count must be set to 4 at least", + "The passphrase word count must be set to 4 at least": "El recuento de palabras de la contraseña debe establecerse al menos en 4", "The passphrase you defined when initiating the account recovery is required to complete the operation.": "La contraseña que definió al iniciar la recuperación de la cuenta es necesaria para completar la operación.", - "The password expiry settings were updated.": "The password expiry settings were updated.", - "The password generator will not generate strong enough password. Minimum of {{minimum}}bits is required": "The password generator will not generate strong enough password. Minimum of {{minimum}}bits is required", + "The password expiry settings were updated.": "Se ha actualizado la configuración de caducidad de la contraseña.", + "The password generator will not generate strong enough password. Minimum of {{minimum}}bits is required": "El generador de contraseñas no generará una contraseña suficientemente segura. Se requiere un mínimo de {{minimum}} bits", "The password has been added as a favorite": "La contraseña ha sido añadida marcada como favorita", "The password has been added successfully": "La contraseña se ha añadido correctamente", "The password has been copied to clipboard": "La contraseña ha sido copiada al portapapeles", "The password has been removed from favorites": "La contraseña ha sido quitada de favoritas", "The password has been updated successfully": "La contraseña se ha actualizado correctamente", - "The password is empty and cannot be copied to clipboard.": "The password is empty and cannot be copied to clipboard.", - "The password is empty and cannot be previewed.": "The password is empty and cannot be previewed.", + "The password is empty and cannot be copied to clipboard.": "La contraseña está vacía y no se puede copiar al portapapeles.", + "The password is empty and cannot be previewed.": "La contraseña está vacía y no se puede previsualizar.", "The password is empty.": "La contraseña está vacía.", "The password is part of an exposed data breach.": "La contraseña es parte de una brecha de datos expuesta.", - "The password length must be set to 8 at least": "The password length must be set to 8 at least", - "The password policy settings were updated.": "The password policy settings were updated.", + "The password length must be set to 8 at least": "La longitud de la contraseña debe establecerse al menos en 8", + "The password policy settings were updated.": "La configuración de la política de contraseñas fue actualizada.", "The passwords have been exported successfully": "Las contraseñas han sido exportadas con éxito", "The permalink has been copied to clipboard": "El enlace permanente ha sido copiado al portapapeles", "The permissions do not match the destination folder permissions.": "Los permisos no coinciden con los permisos de la carpeta de destino.", @@ -1001,18 +1001,18 @@ "The private key should not have an expiry date.": "La clave privada no debería tener una fecha de caducidad.", "The public identifier for the app in Azure in UUID format.": "El identificador público para la aplicación en Azure en formato UUID.", "The public identifier for the app in Google in UUID format.": "El identificador público para la aplicación en formato UUID de Google.", - "The public identifier for the OpenId app.": "The public identifier for the OpenId app.", + "The public identifier for the OpenId app.": "El identificador público para la aplicación del OpenID.", "The public key has been copied to clipboard": "La clave pública ha sido copiada al portapapeles", "The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach": "El servicio \"pwnedpasswords\" (https://haveibeenpwned.com) no está disponible, su contraseña podría ser parte de una brecha de datos expuesta", "The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.": "El servicio pwnedpasswords no está disponible, su contraseña podría ser parte de una brecha de datos expuesta.", "The pwnedpasswords service is unavailable, your password might be part of an exposed data breach": "El servicio pwnedpasswords no está disponible, su contraseña podría ser parte de una brecha de datos expuesta", - "The QR code is incomplete.": "The QR code is incomplete.", + "The QR code is incomplete.": "El código QR está incompleto.", "The redirection URL has been copied to the clipboard.": "La URL de redirección se ha copiado al portapapeles.", "The request is expired.": "El token ha expirado.", "The role-based access control settings were updated.": "Los ajustes de control de acceso basados en roles han sido actualizados.", "The secret has been copied to clipboard": "La clave ha sido copiada al portapapeles", "The security token code should be 3 characters long.": "El código de token de seguridad debe tener 3 caracteres.", - "The security token code should contains only alphanumeric, dash and underscore characters.": "The security token code should contains only alphanumeric, dash and underscore characters.", + "The security token code should contains only alphanumeric, dash and underscore characters.": "El código del token de seguridad debe contener sólo caracteres alfanuméricos, guión y guiones bajos.", "The security token code should not be empty.": "El código de token de seguridad no debe estar vacío.", "The security token has been updated successfully": "El token de seguridad se ha actualizado correctamente", "The self registration settings for the organization were updated.": "Se actualizó la configuración del auto-registro de la organización.", @@ -1020,8 +1020,8 @@ "The settings displayed in the form below are the one stored in your database and have precedence over others.": "Los ajustes mostrados en el formulario siguiente están guardados en su base de datos y tienen precedencia sobre otros ajustes.", "The SMTP settings have been saved successfully": "La configuración SMTP se ha guardado correctamente", "The SSO kit is outdated and can't be used to decrypt your passphrase: {{error}}": "El kit SSO está desactualizado y no se puede utilizar para descifrar su contraseña: {{error}}", - "The SSO settings have been deleted successfully": "The SSO settings have been deleted successfully", - "The SSO settings have been saved successfully": "The SSO settings have been saved successfully", + "The SSO settings have been deleted successfully": "La configuración del SSO se ha eliminado correctamente", + "The SSO settings have been saved successfully": "La configuración del SSO se ha guardado correctamente", "The subscription key has been updated successfully.": "La clave de la suscripción ha sido actualizada correctamente.", "The subscription key is invalid.": "La clave de suscripción no es válida.", "The tag has been deleted successfully": "La etiqueta ha sido borrada correctamente", @@ -1032,28 +1032,28 @@ "The theme has been updated successfully": "La apariencia ha sido actualizada correctamente", "The Time-based One Time Password provider is disabled for all users.": "El proveedor de una contraseña única, basado en el tiempo, está deshabilitado para todos los usuarios.", "The Time-based One Time Password provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.": "El proveedor Duo está habilitado para todos los usuarios. Pueden configurar este proveedor en su perfil y usarlo como factor de autenticación de segundo paso.", - "The TOTP has been added successfully": "The TOTP has been added successfully", - "The TOTP has been copied to clipboard": "The TOTP has been copied to clipboard", - "The TOTP has been updated successfully": "The TOTP has been updated successfully", - "The TOTP is empty and cannot be copied to clipboard.": "The TOTP is empty and cannot be copied to clipboard.", - "The TOTP is empty and cannot be previewed.": "The TOTP is empty and cannot be previewed.", + "The TOTP has been added successfully": "El TOTP se ha añadido correctamente", + "The TOTP has been copied to clipboard": "El TOTP se ha copiado al portapapeles", + "The TOTP has been updated successfully": "El TOTP se ha actualizado correctamente", + "The TOTP is empty and cannot be copied to clipboard.": "El TOTP está vacío y no se puede copiar al portapapeles.", + "The TOTP is empty and cannot be previewed.": "El TOTP está vacío y no se puede previsualizar.", "The transfer was cancelled because the other client returned an error.": "La transferencia se canceló porque el otro cliente devolvió un error.", "The uri has been copied to clipboard": "El uri ha sido copiado al portapapeles", "The URL to provide to Azure when registering the application.": "La URL para proporcionar a Azure cuando se registra la aplicación.", "The URL to provide to Google when registering the application.": "La URL a proporcionar a Google cuando se registra la aplicación.", - "The URL to provide to the OAuth2 platform when registering the application.": "The URL to provide to the OAuth2 platform when registering the application.", + "The URL to provide to the OAuth2 platform when registering the application.": "La URL para proporcionar a la plataforma OAuth2 al registrar la aplicación.", "The user directory settings for the organization were updated.": "Se actualizaron los ajustes del directorio de usuario para la organización.", "The user has been added successfully": "El usuario ha sido añadido correctamente", "The user has been deleted successfully": "El usuario ha sido eliminado correctamente", "The user has been updated successfully": "El usuario ha sido actualizado correctamente", "The user is not a member of any group yet": "El usuario aún no es miembro de ningún grupo", - "The user passphrase policies were updated.": "The user passphrase policies were updated.", + "The user passphrase policies were updated.": "Las políticas de contraseña del usuario fueron actualizadas.", "The user username field mapping cannot be empty": "La asignación del campo de nombre de usuario no puede estar vacío", "The user username field mapping cannot exceed 128 characters.": "La asignación del campo de nombre de usuario no puede exceder los 128 caracteres.", "The user who requested an account recovery does not exist.": "El usuario que ha solicitado una recuperación de cuenta no existe.", "The username has been copied to clipboard": "El nombre de usuario ha sido copiado al portapapeles", "The username should be a valid username address.": "El nombre de usuario debe ser una dirección de correo electrónico válida.", - "The words separator should be at a maximum of 10 characters long": "The words separator should be at a maximum of 10 characters long", + "The words separator should be at a maximum of 10 characters long": "El separador de palabras debe tener como máximo 10 caracteres de longitud", "The Yubikey provider is disabled for all users.": "El proveedor de Yubikey está desactivado para todos los usuarios.", "The Yubikey provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.": "El proveedor Yubikey está habilitado para todos los usuarios. Pueden configurar este proveedor en su perfil y usarlo como autenticación de segundo paso.", "Theme": "Tema", @@ -1066,10 +1066,10 @@ "There was an unexpected error...": "Ha habido un error inesperado...", "They will be able to help you in case you lose it.": "Ellos podrán ayudarle en caso de que lo pierda.", "This action cannot be undone. All the data associated with SSO will be permanently deleted.": "Esta acción no se puede deshacer. Todos los datos asociados con el SSO se eliminarán permanentemente.", - "This action cannot be undone. All the data associated with this user will be permanently deleted.": "This action cannot be undone. All the data associated with this user will be permanently deleted.", - "This action cannot be undone. Other users may lose access.": "This action cannot be undone. Other users may lose access.", - "This action cannot be undone. Users in this group may lose access to the content shared with it.": "This action cannot be undone. Users in this group may lose access to the content shared with it.", - "This current configuration source is: ": "This current configuration source is: ", + "This action cannot be undone. All the data associated with this user will be permanently deleted.": "Esta acción no se puede deshacer. Todos los datos asociados con este usuario se eliminarán permanentemente.", + "This action cannot be undone. Other users may lose access.": "Esta acción no se puede deshacer. Otros usuarios pueden perder el acceso.", + "This action cannot be undone. Users in this group may lose access to the content shared with it.": "Esta acción no se puede deshacer. Los usuarios de este grupo pueden perder el acceso al contenido compartido con este.", + "This current configuration source is: ": "La fuente de configuración actual es: ", "This domain already exist": "Este dominio ya existe", "This email is not associated with any approved users on this domain.": "Este correo electrónico no está asociado con algún usuario aprobado en este dominio.", "This group is the sole owner of some content. You need to transfer the ownership to others to continue.": "Este grupo es el único propietario de algún contenido. Necesitas transferir la propiedad a otros para continuar.", @@ -1077,7 +1077,7 @@ "This is the email address users will see in their mail box when passbolt sends a notification.<1>It's a good practice to provide a working email address that users can reply to.": "Esta es la dirección de correo electrónico que los usuarios verán en su casilla de correo cuando Passbolt envíe una notificación.<1>Es una buena práctica proporcionar una dirección de correo electrónico que funcione a la que los usuarios puedan responder.", "this is the maximum size for this field, make sure your data was not truncated": "este es el tamaño máximo para este campo, asegúrese de que sus datos no han sido truncados.", "This is the name users will see in their mailbox when passbolt sends a notification.": "Este es el nombre que los usuarios verán en su buzón de correo cuando Passbolt envíe una notificación.", - "This is the passphrase that is asked during sign in or recover.": "This is the passphrase that is asked during sign in or recover.", + "This is the passphrase that is asked during sign in or recover.": "Esta es la contraseña que se pregunta durante el inicio de sesión o la recuperación.", "This OTP is not valid.": "Este OTP no es válido.", "This passphrase is the only passphrase you will need to remember from now on, choose wisely!": "Esta contraseña es la única contraseña que necesitarás recordar a partir de ahora, ¡elige sabiamente!", "This security token will be displayed when your passphrase is requested, so you can quickly verify the form is coming from passbolt.": "Este token de seguridad se mostrará cuando se solicite su contraseña, por lo que puede verificar rápidamente que el formulario proviene de passbolt.", @@ -1089,7 +1089,7 @@ "This tag is already present": "Esta etiqueta ya existe", "This user is an administrator": "Este usuario es un administrador", "This user is the sole owner of some content. You need to transfer the ownership to others to continue.": "Este usuario es el único propietario de algunos contenidos. Necesitas transferir la propiedad a otros para continuar.", - "This user will not be able to sign in to passbolt and receive email notifications. Other users can share resource with it and add this user to a group.": "This user will not be able to sign in to passbolt and receive email notifications. Other users can share resource with it and add this user to a group.", + "This user will not be able to sign in to passbolt and receive email notifications. Other users can share resource with it and add this user to a group.": "Este usuario no podrá iniciar sesión en Passbolt ni recibir notificaciones por correo electrónico. Otros usuarios pueden compartir recursos con él y añadir este usuario a un grupo.", "This will help protect you from <1>phishing attacks.": "Esto te ayudará a protegerte de <1>ataques de phishing.", "Time based One Time Password (TOTP)": "Contraseña de un solo uso basada en el tiempo (TOTP)", "Time is up": "El tiempo ha expirado", @@ -1098,16 +1098,16 @@ "TLS must be set to 'Yes' or 'No'": "El TLS debe estar configurado como 'Sí' o 'No'", "To proceed you need to install an application that supports Time Based One Time Passwords (TOTP) on your phone or tablet such as:": "Para continuar, debe instalar una aplicación que admita contraseñas de un solo uso basadas en el tiempo (TOTP) en su teléfono o tableta, como:", "TOTP": "TOTP", - "TOTP expiry": "Caducidad TOTP", - "TOTP expiry is required.": "TOTP expiry is required.", - "TOTP expiry must be greater than 0.": "TOTP expiry must be greater than 0.", + "TOTP expiry": "Caducidad del TOTP", + "TOTP expiry is required.": "Se requiere la caducidad del TOTP.", + "TOTP expiry must be greater than 0.": "La caducidad del TOTP debe ser mayor que 0.", "TOTP length": "Longitud del TOTP", - "TOTP length is required.": "TOTP length is required.", - "TOTP length must be between 6 and 8.": "TOTP length must be between 6 and 8.", + "TOTP length is required.": "Se requiere la longitud del TOTP.", + "TOTP length must be between 6 and 8.": "La longitud del TOTP debe estar entre 6 y 8.", "Transfer complete!": "¡Transferencia completada!", "Transfer in progress...": "Transferencia en curso...", "Transfer your account key": "Transfiere su clave de cuenta", - "Transfer your account kit": "Transfer your account kit", + "Transfer your account kit": "Transfiera su kit de cuenta", "Try again": "Inténtelo de nuevo", "Try another search or use the left panel to navigate into your organization.": "Prueba otra búsqueda, o usa el panel de la izquierda para navegar en tu organización.", "Try another search or use the left panel to navigate into your passwords.": "Prueba otra búsqueda o utiliza el panel izquierdo para navegar a tus contraseñas.", @@ -1116,12 +1116,12 @@ "Type one or more characters": "Escriba uno o más caracteres", "UI Permissions": "Permisos de UI", "Uid": "Uid", - "Unable to copy the TOTP": "Unable to copy the TOTP", - "Unable to preview the TOTP": "Unable to preview the TOTP", + "Unable to copy the TOTP": "No se pudo copiar el TOTP", + "Unable to preview the TOTP": "No se pudo previsualizar el TOTP", "Unable to use the password on this page. Copy and paste the information instead.": "No se puede utilizar la contraseña en esta página. Copia y pega la información en su lugar.", "Unchanged": "Sin cambios", "Unfortunately you need your passphrase in order to continue. If you forgot it, please contact your administrator.": "Desafortunadamente necesita su contraseña para continuar. Si la olvidó, por favor contacte a su administrador.", - "unknown": "unknown", + "unknown": "desconocido", "Unknown activity, please contact your administrator.": "Actividad desconocida, por favor contacte con su administrador.", "Unknown user": "Usuario desconocido", "Unsafe mode": "Modo no seguro", @@ -1135,8 +1135,8 @@ "updated": "actualizado", "upload": "subir", "Upload a new avatar picture": "Subir una nueva imagen de avatar", - "Upload a QR code": "Upload a QR code", - "Upload your account kit": "Upload your account kit", + "Upload a QR code": "Subir un código QR", + "Upload your account kit": "Suba su kit de cuenta", "UPN": "UPN", "Upper case": "Mayúsculas", "URI": "URI", @@ -1151,13 +1151,13 @@ "User custom filters are used in addition to the base DN and user path while searching users.": "Los filtros personalizados de usuario se utilizan además del DN base y la ruta del usuario durante la búsqueda de usuarios.", "User ids": "Id de usuario", "User object class": "Clase de objeto de usuario", - "User passphrase minimal entropy": "User passphrase minimal entropy", - "User Passphrase Policies": "User Passphrase Policies", + "User passphrase minimal entropy": "Entropía mínima de la contraseña del usuario", + "User Passphrase Policies": "Políticas de contraseña del usuario", "User path": "Ruta del usuario", "User path is used in addition to base DN while searching users.": "La ruta de usuario se utiliza además de la base de DN durante la búsqueda de usuarios.", "User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.": "El auto-registro de usuario permite a los usuarios con un correo electrónico de un dominio en la lista blanca crear su cuenta de Passbolt sin previa invitación de un administrador.", "User self registration is disabled.": "El auto-registro de usuarios está desactivado.", - "User settings": "User settings", + "User settings": "Configuración de usuario", "User username field mapping": "Asignación del campo de nombre de usuario", "Username": "Nombre de usuario", "Username / Email": "Usuario / Email", @@ -1181,7 +1181,7 @@ "View": "Ver", "View detail": "Ver detalle", "View it in passbolt": "Ver en passbolt", - "Wait for a password to expire.": "Wait for a password to expire.", + "Wait for a password to expire.": "Espere a que caduque una contraseña.", "Wait for a team member to share a password with you.": "Espere a que un miembro del equipo comparta una contraseña contigo.", "Want to contribute?": "¿Quiere contribuir?", "Warning, Don't forget to add an organization recovery key.": "Advertencia, no olvide añadir una clave de recuperación de la organización.", @@ -1189,7 +1189,7 @@ "Warning, we encourage you to generate your OpenPGP Organization Recovery Key separately. Make sure you keep a backup in a safe place.": "Advertencia, le animamos a generar su Clave de Recuperación de Organización OpenPGP por separado. Asegúrese de mantener una copia de seguridad en un lugar seguro.", "Warning:": "Advertencia:", "Warning: If users lose their private key and passphrase they will not be able to recover their account.": "Advertencia: Si los usuarios pierden su clave privada y contraseña no podrán recuperar su cuenta.", - "Warning: This recovery kit replace the old one.": "Warning: This recovery kit replace the old one.", + "Warning: This recovery kit replace the old one.": "Advertencia: Este kit de recuperación reemplazará el antiguo.", "Warning: You should inform your users not to store personal passwords.": "Advertencia: Debe informar a sus usuarios para que no almacenen contraseñas personales.", "We sent you a link to verify your email.": "Le hemos enviado un enlace para verificar su correo electrónico.", "Weak": "Débil", @@ -1197,13 +1197,13 @@ "Welcome back!": "¡Bienvenido de nuevo!", "Welcome to Passbolt, please select a passphrase!": "¡Bienvenido a Passbolt, por favor seleccione una contraseña!", "Welcome to passbolt!": "¡Bienvenido a passbolt!", - "Welcome to the desktop app setup": "Welcome to the desktop app setup", + "Welcome to the desktop app setup": "Bienvenido a la configuración de la aplicación de escritorio", "Welcome to the mobile app setup": "Bienvenido a la configuración de la aplicación móvil", "What if I forgot my passphrase?": "¿Qué pasa si olvido mi contraseña?", "What is multi-factor authentication?": "¿Qué es la autenticación de múltiples factores?", - "What is password policy?": "What is password policy?", + "What is password policy?": "¿Qué es la política de contraseñas?", "What is the role of the passphrase?": "¿Cuál es el papel de la frase de contraseña?", - "What is user passphrase policies?": "What is user passphrase policies?", + "What is user passphrase policies?": "¿Qué son las políticas de contraseñas del usuario?", "What is user self registration?": "¿Qué es el auto-registro de usuarios?", "When a comment is posted on a password, notify the users who have access to this password.": "Cuando se publique un comentario en una contraseña, notificar a los usuarios que tengan acceso a esta contraseña.", "When a folder is created, notify its creator.": "Cuando se cree una carpeta, notifíquelo a su autor.", @@ -1213,7 +1213,7 @@ "When a group is deleted, notify the users who were members of it.": "Cuando se elimine un grupo, notificar a los usuarios que eran miembros del mismo.", "When a password is created, notify its creator.": "Cuando se crea una contraseña, notificar a su creador.", "When a password is deleted, notify the users who had access to it.": "Cuando se elimina una contraseña, notificar a los usuarios que tengan acceso a ella.", - "When a password is expired, notify the owners to change it.": "When a password is expired, notify the owners to change it.", + "When a password is expired, notify the owners to change it.": "Cuando una contraseña haya caducado, notifique a los propietarios que la cambien.", "When a password is shared, notify the users who gain access to it.": "Cuando se comparte una contraseña, notificar a los usuarios que tengan acceso a ella.", "When a password is updated, notify the users who have access to it.": "Cuando se actualice una contraseña, notificar a los usuarios que tienen acceso a ella.", "When a user aborted a recover, notify all the administrators.": "Cuando un usuario abortó una recuperación, notificar a todos los administradores.", @@ -1226,7 +1226,7 @@ "When an account recovery policy is updated, notify all the administrators.": "Cuando se actualiza la política de recuperación de cuentas, notificar a todos los administradores.", "When an administrator answered to an account recovery request, notify all the administrators.": "Cuando un administrador respondió a una solicitud de recuperación de cuenta, notificar a todos los administradores.", "When an administrator answered to an account recovery request, notify the administrator at the origin of the action.": "Cuando un administrador responde a una solicitud de recuperación de cuenta, notificar al administrador en el origen de la acción.", - "When group managers are requested to add users to a group, notify them.": "When group managers are requested to add users to a group, notify them.", + "When group managers are requested to add users to a group, notify them.": "Cuando se solicite a los administradores del grupo que añadan usuarios a un grupo, notifíquelos.", "When members of a group change, notify the group manager(s).": "Cuando los miembros de un grupo cambien, notificar a los administradores del grupo.", "When new users are invited to passbolt, notify them.": "Cuando se invite a nuevos usuarios a passbolt, notifíqueselo.", "When user roles change in a group, notify the corresponding users.": "Cuando los roles de usuario cambien en un grupo, notificar a los usuarios correspondientes.", @@ -1234,8 +1234,8 @@ "When users are removed from a group, notify them.": "Cuando se eliminen usuarios de un grupo, notifíquelo.", "When users completed the recover of their account, notify them.": "Cuando los usuarios completen la recuperación de su cuenta, notifíqueselo.", "When users try to recover their account, notify them.": "Cuando los usuarios traten de recuperar su cuenta, notifíqueselo.", - "When using a new browser, you need an additional code from your phone.": "Cuando utilice un nuevo navegador, necesitará un código adicional de su teléfono.", - "Where can I find my account kit ?": "Where can I find my account kit ?", + "When using a new browser, you need an additional code from your phone.": "Al usar un nuevo navegador, necesitará un código adicional de su teléfono.", + "Where can I find my account kit ?": "¿Dónde puedo encontrar mi kit de cuenta?", "Where to find it?": "¿Dónde encontrarlo?", "Why do I need an SMTP server?": "¿Por qué necesito un servidor SMTP?", "Why is this token needed?": "¿Por qué es necesario este token?", @@ -1263,31 +1263,31 @@ "You can choose the default behaviour of multi factor authentication for all users.": "Puede elegir el comportamiento predeterminado de la Autenticación Multi Factor para todos los usuarios.", "You can find these newly imported passwords in the folder <1>{{folderName}}.": "Puede encontrar estas contraseñas recién importadas en la carpeta <1>{{folderName}}.", "You can find these newly imported passwords under the tag <1>{{tagName}}.": "Puede encontrar estas contraseñas recién importadas en la etiqueta <1>{{tagName}}.", - "You can modify the default settings of the passwords generator.": "You can modify the default settings of the passwords generator.", + "You can modify the default settings of the passwords generator.": "Puede modificar la configuración predeterminada del generador de contraseñas.", "You can request another invitation email by clicking on the button below.": "Puede solicitar otro correo electrónico de invitación haciendo clic en el siguiente botón.", "You can restart this process if you want to configure another phone.": "Puede reiniciar este proceso si quiere configurar otro teléfono.", - "You can select the set of characters used for the passwords that are generated randomly by passbolt in the password generator.": "You can select the set of characters used for the passwords that are generated randomly by passbolt in the password generator.", - "You can set the default length for the passphrases that are generated randomly by passbolt in the password generator.": "You can set the default length for the passphrases that are generated randomly by passbolt in the password generator.", - "You can set the default length for the passwords that are generated randomly by passbolt in the password generator.": "You can set the default length for the passwords that are generated randomly by passbolt in the password generator.", - "You can set the minimal entropy for the users' private key passphrase.": "You can set the minimal entropy for the users' private key passphrase.", + "You can select the set of characters used for the passwords that are generated randomly by passbolt in the password generator.": "Puede seleccionar el conjunto de caracteres utilizados para las contraseñas que se generan al azar por Passbolt en el generador de contraseñas.", + "You can set the default length for the passphrases that are generated randomly by passbolt in the password generator.": "Puede establecer la longitud predeterminada para las contraseñas que se generan aleatoriamente por Passbolt en el generador de contraseñas.", + "You can set the default length for the passwords that are generated randomly by passbolt in the password generator.": "Puede establecer la longitud predeterminada para las contraseñas que se generan aleatoriamente por Passbolt en el generador de contraseñas.", + "You can set the minimal entropy for the users' private key passphrase.": "Puede establecer la entropía mínima de la clave privada de los usuarios.", "You cannot delete this group!": "¡No puedes eliminar este grupo!", "You cannot delete this user!": "¡No puedes eliminar este usuario!", "You do not own any passwords yet. It does feel a bit empty here, create your first password.": "Aún no tienes ninguna contraseña. Está esto un poco vacío, crea tu primera contraseña.", "You need to click save for the changes to take place.": "Debes pulsar en guardar para que se realicen los cambios.", "You need to enter your current passphrase.": "Necesita introducir su contraseña actual.", "You need to finalize the account recovery process with the same computer you used for the account recovery request.": "Necesita finalizar el proceso de recuperación de la cuenta con el mismo equipo que utilizó para la solicitud de recuperación de la cuenta.", - "You need to upload an account kit to start using the desktop app. ": "You need to upload an account kit to start using the desktop app. ", + "You need to upload an account kit to start using the desktop app. ": "Necesita subir un kit de cuenta para empezar a usar la aplicación de escritorio. ", "You need use the same computer and browser to finalize the process.": "Necesita utilizar el mismo ordenador y navegador para finalizar el proceso.", "You need your passphrase to continue.": "Necesitas tu contraseña para continuar.", "You seem to have Email Notification Settings defined in your passbolt.php (or via environment variables).": "Parece que tienes la configuración de notificación por correo electrónico definida en tu passbolt.php (o mediante variables de entorno).", "You should inform your users not to store personal passwords.": "Debe informar a sus usuarios para que no almacenen contraseñas personales.", "You should keep it offline in a safe place.": "Deberías mantenerlo fuera de línea en un lugar seguro.", - "You sign in to passbolt just like you normally do.": "Inicie sesión en passbolt como lo hace normalmente.", + "You sign in to passbolt just like you normally do.": "Inicie sesión en Passbolt como lo hace normalmente.", "You susccessfully signed in with your {{providerName}} account. You can safely save your configuration.": "Ha iniciado sesión correctamente con su cuenta de {{providerName}}. Puede guardar su configuración de forma segura.", "You took too long to recover your account.": "Ha tardado demasiado en recuperar su cuenta.", "You took too long to set up your account.": "Ha tardado demasiado en configurar su cuenta.", "You will be able to save it after submitting": "Podrá guardarlo después del envío", - "You will need this recovery kit later to access your account (for example on a new device).": "You will need this recovery kit later to access your account (for example on a new device).", + "You will need this recovery kit later to access your account (for example on a new device).": "Necesitará este kit de recuperación más adelante para acceder a su cuenta (por ejemplo en un dispositivo nuevo).", "you@organization.com": "tu@organizacion.com", "Your browser is not configured to work with this passbolt instance.": "Su navegador no está configurado para funcionar con esta instancia de Passbolt.", "Your language is missing or you discovered an error in the translation, help us to improve passbolt.": "Falta tu idioma o descubriste un error en la traducción, ayúdanos a mejorar passbolt.", @@ -1304,7 +1304,7 @@ "your subscription key is not valid. The stability of the application is at risk.": "tu clave de suscripción no es válida. La estabilidad de la aplicación está en riesgo.", "Your subscription key is valid and up to date!": "¡Su clave de suscripción es válida y está actualizada!", "your subscription key will expire": "tu clave de suscripción va a caducar", - "your subscription requires your attention. The stability of the application is at risk.": "your subscription requires your attention. The stability of the application is at risk.", + "your subscription requires your attention. The stability of the application is at risk.": "su suscripción requiere su atención. La estabilidad de la aplicación está en riesgo.", "{{count}} entry had errors and will be ignored during synchronization._one": "{{count}} registro tuvo errores y será ignorado durante la sincronización.", "{{count}} entry had errors and will be ignored during synchronization._other": "{{count}} registros tuvieron errores y serán ignorados durante la sincronización.", "{{count}} folder has been imported successfully._one": "{{count}} carpeta se ha importado correctamente.", @@ -1331,18 +1331,18 @@ "<0>{{numberFolderSuccess}} out of {{count}} folder has been imported._other": "<0>{{numberFolderSuccess}} de {{count}} carpetas han sido importadas.", "<0>{{numberResourceSuccess}} out of {{count}} password has been imported._one": "<0>{{numberResourceSuccess}} de {{count}} contraseña ha sido importada.", "<0>{{numberResourceSuccess}} out of {{count}} password has been imported._other": "<0>{{numberResourceSuccess}} de {{count}} contraseñas han sido importadas.", - "Delete resource?_one": "Delete resource?", - "Delete resource?_other": "Delete resources?", - "Set an expiry date_one": "Set an expiry date", - "Set an expiry date_other": "Set expiry dates", - "The expiry date of the selected resource has been updated._one": "The expiry date of the selected resource has been updated.", - "The expiry date of the selected resource has been updated._other": "The expiry dates of the selected resources have been updated.", - "The resource has been deleted successfully._one": "El recurso se ha eliminado con éxito.", - "The resource has been deleted successfully._other": "The resources have been deleted successfully.", - "The resource has been marked as expired._one": "The resource has been marked as expired.", - "The resource has been marked as expired._other": "The resources have been marked as expired.", - "This resource does not need an expiry date._one": "This resource does not need an expiry date.", - "This resource does not need an expiry date._other": "These resources do not need an expiry date.", - "Unable to mark the resource as expired._one": "Unable to mark the resource as expired.", - "Unable to mark the resource as expired._other": "Unable to mark the resources as expired." + "Delete resource?_one": "¿Eliminar recurso?", + "Delete resource?_other": "¿Eliminar recursos?", + "Set an expiry date_one": "Establecer una fecha de caducidad", + "Set an expiry date_other": "Establecer fechas de caducidad", + "The expiry date of the selected resource has been updated._one": "La fecha de caducidad del recurso seleccionado ha sido actualizada.", + "The expiry date of the selected resource has been updated._other": "La fecha de caducidad de los recursos seleccionados ha sido actualizada.", + "The resource has been deleted successfully._one": "El recurso se ha eliminado correctamente.", + "The resource has been deleted successfully._other": "Los recursos se han eliminado correctamente.", + "The resource has been marked as expired._one": "El recurso se ha marcado como caducado.", + "The resource has been marked as expired._other": "Los recursos se han marcado como caducados.", + "This resource does not need an expiry date._one": "Este recurso no necesita una fecha de caducidad.", + "This resource does not need an expiry date._other": "Estos recursos no necesitan una fecha de caducidad.", + "Unable to mark the resource as expired._one": "No se puede marcar el recurso como caducado.", + "Unable to mark the resource as expired._other": "No se pueden marcar los recursos como caducados." } \ No newline at end of file diff --git a/webroot/locales/fr-FR/common.json b/webroot/locales/fr-FR/common.json index 3d18eaedaf..279908734e 100644 --- a/webroot/locales/fr-FR/common.json +++ b/webroot/locales/fr-FR/common.json @@ -2,12 +2,12 @@ "(folder)": "(dossier)", "(Folder) new owner:": "(Dossier) nouveau propriétaire:", "(group)": "(groupe)", - "(not yet available)": "(not yet available)", - "(suspended)": "(suspended)", + "(not yet available)": "(pas encore disponible)", + "(suspended)": "(suspendu)", "(tag)": "(tag)", "{column.label}": "{column.label}", "{errors.get(key)}": "{errors.get(key)}", - "{this.creatorName} did not initiate this request.": "{this.creatorName} did not initiate this request.", + "{this.creatorName} did not initiate this request.": "{this.creatorName} n'a pas initié cette demande.", "{this.state.warnings.get(key)}": "{this.state.warnings.get(key)}", "@your-domain.com": "@votre-domaine.com", "<0>{{activityCreatorName}} accepted the account recovery policy": "<0>{{activityCreatorName}} a accepté la politique de récupération de compte", @@ -32,14 +32,14 @@ "<0>Warning: This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.": "<0>Warning: This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.", "<0>Warning: UPN is not active by default on Azure and requires a specific option set on Azure to be working.": "<0>Warning: UPN is not active by default on Azure and requires a specific option set on Azure to be working.", "<0>When a user creates a resource, a default expiry date is set to <1><2>days": "<0>When a user creates a resource, a default expiry date is set to <1><2>days", - "1. Click download the account kit.": "1. Click download the account kit.", + "1. Click download the account kit.": "1. Cliquez sur télécharger le kit de compte.", "1. Install the application from the store.": "1. Installez l'application depuis la boutique.", "2. Install the application from the store.": "2. Installez l'application depuis la boutique.", "2. Open the application on your phone.": "2. Ouvrez l'application sur votre téléphone.", "3. Click start, here, in your browser.": "3. Cliquez sur démarrer, ici, dans votre navigateur.", - "3. Open the application.": "3. Open the application.", + "3. Open the application.": "3. Ouvrez l'application.", "4. Scan the QR codes with your phone.": "4. Scannez les QR codes avec votre téléphone.", - "4. Upload the account kit on the desktop app.": "4. Upload the account kit on the desktop app.", + "4. Upload the account kit on the desktop app.": "4. Téléchargez le kit de compte sur l'application de bureau.", "5. And you are done!": "5. Et vous avez terminé !", "A comment is required.": "Un commentaire est requis.", "A comment must be less than 256 characters": "Un commentaire doit avoir moins de 256 caractères", @@ -54,7 +54,7 @@ "A last name is required.": "Un nom est requis.", "A name can not be more than 256 char in length.": "Un nom ne peut pas comporter plus de 256 caractères.", "A name is required.": "Un nom est requis.", - "A OTP code is required.": "A OTP code is required.", + "A OTP code is required.": "Un code OTP est requis.", "A passphrase is required.": "Une phrase de passe est requise.", "A password is required.": "Un mot de passe est requis.", "A port is required.": "Un port est requis.", @@ -63,12 +63,12 @@ "A tag name is required.": "Un nom de tag est requis.", "A username is required.": "Un nom d'utilisateur est requis.", "A Users Directory is configured. The users and groups of passbolt will synchronize with it.": "Un répertoire d'utilisateurs est configuré. Les utilisateurs et groupes de passbolt seront synchronisés avec.", - "About password expiry": "About password expiry", + "About password expiry": "A propos de l'expiration de mot de passe", "Accept": "Accepter", "Accept new key": "Accepter la nouvelle clé", - "Accept the new SSO provider": "Accept the new SSO provider", + "Accept the new SSO provider": "Accepter le nouveau fournisseur SSO", "Access to this service requires an invitation.": "L'accès à ce service requiert une invitation.", - "Account kit": "Account kit", + "Account kit": "Kit de compte", "Account recovery": "Récupération de compte", "Account Recovery": "Récupération de compte", "Account recovery enrollment": "Inscription à la récupération du compte", @@ -76,7 +76,7 @@ "Account Recovery Policy": "Politique de récupération de compte", "Activated": "Activé", "Activation pending": "Activation en attente", - "active": "active", + "active": "actif", "Active Directory": "Active Directory", "Activity": "Activité", "Add": "Ajouter", @@ -87,7 +87,7 @@ "Add Open PGP Public key": "Ajouter une clé publique OpenPGP", "Add people": "Ajouter des personnes", "Add stars to passwords you want to easily find later.": "Ajoutez des étoiles aux mots de passe que vous souhaitez retrouver facilement plus tard.", - "Add TOTP": "Add TOTP", + "Add TOTP": "Ajouter un TOTP", "Add User": "Ajouter un utilisateur", "admin": "administrateur", "Admin": "Administrateur", @@ -103,19 +103,19 @@ "All tags": "Tous les tags", "All the users with an email address ending with the domain in the safe list are allowed to register on passbolt.": "Tous les utilisateurs avec une adresse e-mail se terminant par le domaine dans la liste autorisée peuvent à s'inscrire sur passbolt.", "All users": "Tous les utilisateurs", - "Allow": "Allow", + "Allow": "Autoriser", "Allow “Remember this device for a month.“ option during MFA.": "Allow “Remember this device for a month.“ option during MFA.", - "Allow group manager": "Allow group manager", + "Allow group manager": "Autoriser le gestionnaire de groupe", "Allow passbolt to access external services to check if a password has been compromised.": "Allow passbolt to access external services to check if a password has been compromised.", "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.": "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.", - "Allow users to override the default policy.": "Allow users to override the default policy.", + "Allow users to override the default policy.": "Permettre aux utilisateurs de remplacer la politique par défaut.", "Allowed domains": "Domaines autorisés", "Allows Azure and Passbolt API to securely share information.": "Permet à Azure et l'API Passbolt de partager des informations de manière sécurisée.", - "Allows Google and Passbolt API to securely share information.": "Allows Google and Passbolt API to securely share information.", + "Allows Google and Passbolt API to securely share information.": "Permet à l'API Google et Passbolt de partager des informations de manière sécurisée.", "Allows your OAuth2 provider and Passbolt API to securely share information.": "Allows your OAuth2 provider and Passbolt API to securely share information.", "Also delete items inside this folder.": "Supprimez également les éléments de ce dossier.", "Alternatively you can also get in touch with support on community forum or via the paid support channels.": "Vous pouvez également prendre obtenir de l'aide sur le forum de la communauté ou via les canaux de support payant.", - "An account kit is required to transfer your profile and private key to the desktop app.": "An account kit is required to transfer your profile and private key to the desktop app.", + "An account kit is required to transfer your profile and private key to the desktop app.": "Un kit de compte est nécessaire pour transférer votre profil et votre clé privée sur l'application de bureau.", "An email is required.": "Un e-mail est requis.", "An error occured during the sign-in via SSO.": "Une erreur est survenue lors de la connexion via SSO.", "An organization key is required.": "Une clé d'organisation est requise.", @@ -128,7 +128,7 @@ "Are you sure you want to delete the comment?": "Êtes vous sûr de vouloir supprimer le commentaire ?", "Are you sure you want to delete the folder <1>{{folderName}}?": "Êtes vous sûr de vouloir supprimer le dossier <1>{{folderName}} ?", "Are you sure you want to delete the group <1>{{groupName}}?": "Êtes vous sûr de vouloir supprimer le groupe <1>{{groupName}} ?", - "Are you sure you want to delete the resource <1>{{resourceName}}?": "Are you sure you want to delete the resource <1>{{resourceName}}?", + "Are you sure you want to delete the resource <1>{{resourceName}}?": "Êtes-vous sûr de vouloir supprimer la ressource <1>{{resourceName}}?", "Are you sure you want to delete the tag <1>{{tagName}}?": "Êtes vous sûr de vouloir supprimer le tag <1>{{tagName}} ?", "Are you sure you want to disable the current Single Sign-On settings?": "Êtes-vous sûr de vouloir désactiver les paramètres actuels d'authentification unique ?", "Are you sure?": "Êtes-vous sûr ?", @@ -136,17 +136,17 @@ "At least 1 set of characters must be selected": "At least 1 set of characters must be selected", "Authentication method": "Méthode d'authentification", "Authentication token is missing from server response.": "Le jeton d'authentification est manquant dans la réponse du serveur.", - "Automatic expiry": "Automatic expiry", - "Automatic Expiry": "Automatic Expiry", - "Automatic update": "Automatic update", - "Automatic Update": "Automatic Update", - "Automatic workflows": "Automatic workflows", + "Automatic expiry": "Expiration automatique", + "Automatic Expiry": "Expiration Automatique", + "Automatic update": "Mise à jour automatique", + "Automatic Update": "Mise à jour Automatique", + "Automatic workflows": "Workflows automatiques", "Avatar": "Avatar", - "Avatar of the {{group_name}} group.": "Avatar of the {{group_name}} group.", - "Avatar of user {{first_name}} {{last_name}}.": "Avatar of user {{first_name}} {{last_name}}.", + "Avatar of the {{group_name}} group.": "Avatar du groupe {{group_name}}.", + "Avatar of user {{first_name}} {{last_name}}.": "Avatar de l'utilisateur {{first_name}} {{last_name}}.", "Backup of the private key and passphrase will not be stored. This is the safest option.": "La sauvegarde de la clé privée et de la phrase secrète ne seront pas stockées. C'est l'option la plus sûre.", "Base DN": "DN de base", - "Basic": "Basic", + "Basic": "Basique", "Before getting started...": "Avant de commencer...", "Before saving the settings, we need to test if the configuration is working.": "Avant d'enregistrer les paramètres, nous devons vérifier si la configuration fonctionne.", "Both the private key and passphrase are required to recover your account.": "La clé privée et la phrase de passe sont nécessaires pour récupérer votre compte.", @@ -154,22 +154,22 @@ "Browse credentials": "Parcourir les identifiants", "Build email based on a prefix and suffix?": "Construire un e-mail basé sur un préfixe et un suffixe ?", "Camel case": "Camel case", - "Can copy": "Can copy", + "Can copy": "Peut copier", "Can edit": "Peut modifier", - "Can export": "Can export", - "Can import": "Can import", - "Can preview": "Can preview", + "Can export": "Peut exporter", + "Can import": "Peut importer", + "Can preview": "Peu prévisualiser", "can read": "peut lire", "Can read": "Peut lire", - "Can see desktop application setup": "Can see desktop application setup", - "Can see mobile setup": "Can see mobile setup", - "Can see password activities": "Can see password activities", - "Can see password comments": "Can see password comments", + "Can see desktop application setup": "Peut voir le paramétrage de l'application de bureau", + "Can see mobile setup": "Peut voir la configuration mobile", + "Can see password activities": "Peut voir les activités des mots de passe", + "Can see password comments": "Peut voir les commentaires des mots de passe", "Can see users workspace": "Can see users workspace", - "Can see with whom passwords are shared with": "Can see with whom passwords are shared with", + "Can see with whom passwords are shared with": "Permet de voir avec qui les mots de passe sont partagés", "can update": "peut modifier", - "Can use folders": "Can use folders", - "Can use tags": "Can use tags", + "Can use folders": "Peut utiliser les dossiers", + "Can use tags": "Peut utiliser les tags", "Cancel": "Annuler", "Cancel the operation": "Annuler l'opération", "Cannot decrypt the file, invalid credentials.": "Impossible de déchiffrer le fichier, identifiants invalides.", @@ -188,7 +188,7 @@ "Click here to start once the mobile application is installed and opened on your phone and you are ready to scan QR codes.": "Cliquez ici pour commencer une fois que l'application mobile est installée et ouverte sur votre téléphone et que vous êtes prêt à scanner des codes QR.", "Click save to apply your pending changes.": "Cliquez sur enregistrer pour appliquer vos modifications en attente.", "Client": "Client", - "Client id": "Client id", + "Client id": "Identifiant client", "Client identifier": "Identifiant Client", "Client secret": "Client secret", "Close": "Fermer", @@ -207,8 +207,8 @@ "Contact your administrator with the error details.": "Contactez votre administrateur avec les détails de l'erreur.", "Continue": "Continuer", "Continue import": "Continuer l'import", - "Continue with my email.": "Continue with my email.", - "Continue with SSO.": "Continue with SSO.", + "Continue with my email.": "Continuer avec mon email.", + "Continue with SSO.": "Continuer avec SSO.", "Contribute": "Contribuer", "Copy": "Copier", "Copy email address": "Copier l'adresse e-mail", @@ -223,7 +223,7 @@ "Copy the link to this user": "Copiez le lien vers cet utilisateur", "Copy to clipboard": "Copier dans le presse-papier", "Copy TOTP": "Copier le TOTP", - "Copy TOTP to clipboard": "Copy TOTP to clipboard", + "Copy TOTP to clipboard": "Copier le TOTP dans le presse-papiers", "Copy URI": "Copier URI", "Copy username": "Copier nom d'utilisateur", "Copy username to clipboard": "Copier le nom d'utilisateur dans le presse-papier", @@ -249,16 +249,16 @@ "currently:": "actuellement:", "Customer id:": "Identifiant du client:", "database": "base de données", - "days from now.": "days from now.", + "days from now.": "jours à partir de maintenant.", "Decrypting": "Déchiffrement", "Decrypting secret": "Déchiffrement du secret", "Decryption failed, click here to retry": "Le déchiffrement a échoué, cliquez ici pour réessayer", "Default": "Valeur par défaut", "Default admin": "Administrateur par défaut", - "default configuration": "default configuration", + "default configuration": "configuration par défaut", "Default group admin": "Gestionnaire de groupes par défaut", - "Default password expiry period": "Default password expiry period", - "Default password type": "Default password type", + "Default password expiry period": "Période d'expiration par défaut du mot de passe", + "Default password type": "Type de mot de passe par défaut", "Default users multi factor authentication policy": "Default users multi factor authentication policy", "Defines the Azure login behaviour by prompting the user to fully login each time or not.": "Defines the Azure login behaviour by prompting the user to fully login each time or not.", "Defines which Azure field needs to be used as Passbolt username.": "Defines which Azure field needs to be used as Passbolt username.", @@ -273,14 +273,14 @@ "Delete user?": "Supprimer l'utilisateur ?", "Delete users": "Suppression d'utilisateurs", "deleted": "supprimer", - "Deny": "Deny", + "Deny": "Refuser", "Description": "Description", - "Desktop app setup": "Desktop app setup", + "Desktop app setup": "Configuration de l'application de bureau", "digits": "chiffres", - "Directory (tenant) ID": "Directory (tenant) ID", + "Directory (tenant) ID": "ID du répertoire (tenant)", "Directory configuration": "Configuration du répertoire", "Directory group's users field to map to Passbolt group's field.": "Directory group's users field to map to Passbolt group's field.", - "Directory ID": "Directory ID", + "Directory ID": "ID du répertoire", "Directory type": "Type de répertoire", "Directory user's username field to map to Passbolt user's username field.": "Directory user's username field to map to Passbolt user's username field.", "Disable": "Désactiver", @@ -303,7 +303,7 @@ "Download the desktop app": "Download the desktop app", "Download the kit again!": "Téléchargez à nouveau le kit !", "Download the mobile app": "Télécharger l'application mobile", - "Download your account kit": "Download your account kit", + "Download your account kit": "Téléchargez votre kit de compte", "Edit": "Modifier", "Edit Avatar": "Modifier Avatar", "Edit group": "Modifier le groupe", @@ -330,10 +330,10 @@ "Email suffix": "Suffixe de l'e-mail", "Email:": "E-mail:", "empty": "vide", - "Enable Multi Factor Authentication": "Enable Multi Factor Authentication", + "Enable Multi Factor Authentication": "Activer l'authentification multi-facteurs", "Enabled": "Activé", "Enabled users only": "Uniquement les utilisateurs actifs", - "Enabling SSO changes the security risks.": "Enabling SSO changes the security risks.", + "Enabling SSO changes the security risks.": "L'activation de SSO modifie les risques de sécurité.", "Encrypted secret": "Secret chiffré", "Enter a description": "Entrer une description", "Enter the password and/or key file": "Entrer le mot de passe et/ou le fichier clé", @@ -358,18 +358,18 @@ "Expires": "Expire", "Expires on:": "Expire le :", "Expiry": "Expiry", - "Expiry Policies": "Expiry Policies", + "Expiry Policies": "Politiques d'expiration", "Export": "Exporter", "Export all": "Exporter tout", "Export passwords": "Exporter les mots de passe", "External password dictionary check": "External password dictionary check", - "External services": "External services", + "External services": "Services externes", "Fair": "Convenable", "FAQ: Why are my emails not sent?": "FAQ: Pourquoi mes e-mails ne sont-ils pas envoyés ?", "Favorite": "Favori", "Favorites": "Favoris", - "file": "file", - "file (legacy)": "file (legacy)", + "file": "fichier", + "file (legacy)": "fichier (obsolète)", "Filters": "Filtres", "Fingerprint": "Empreinte digitale", "First complete the configuration steps described in the current tab.": "Tout d'abord, terminez les étapes de configuration décrites dans l'onglet courant.", @@ -403,7 +403,7 @@ "Get started in 5 easy steps": "Démarrez en 5 étapes simples", "Getting started with Time based One Time Password (TOTP)": "Démarrer avec le mot de passe à usage unique basé sur le temps (TOTP)", "Go back": "Retour en arrière", - "Go to MFA settings": "Go to MFA settings", + "Go to MFA settings": "Accéder aux paramètres MFA", "Group": "Groupe", "Group custom filters": "Group custom filters", "Group custom filters are used in addition to the base DN and group path while searching groups.": "Group custom filters are used in addition to the base DN and group path while searching groups.", @@ -427,8 +427,8 @@ "host": "hôte", "Hostname": "Hostname", "How do I configure a {settings.provider.name} SMTP server?": "Comment configurer un serveur SMTP {settings.provider.name}?", - "How do I configure a AzureAD SSO?": "How do I configure a AzureAD SSO?", - "How do I configure a Google SSO?": "How do I configure a Google SSO?", + "How do I configure a AzureAD SSO?": "Comment configurer un SSO AzureAD ?", + "How do I configure a Google SSO?": "Comment configurer un SSO Google ?", "How do you want to proceed?": "Comment veux-tu procéder ?", "How does it work?": "Comment ça marche ?", "I accept the <1>privacy policy": "J’accepte la <1>politique de confidentialité", @@ -440,13 +440,13 @@ "I do not agree to share this info with my organization recovery contacts": "Je n'accepte pas de partager cette information avec les contacts de récupération de mon organisation", "I do not want to share a copy of my private key & passphrase with my organization recovery contacts.": "Je ne veux pas partager une copie de ma clé privée et de mon mot de passe avec les contacts de récupération de mon organisation.", "I lost my passphrase, generate a new private key.": "J'ai perdu ma phrase de passe, générer une nouvelle clé privée.", - "I safely stored my recovery kit.": "I safely stored my recovery kit.", - "I verified with <1>{this.creatorName} that the request is valid.": "I verified with <1>{this.creatorName} that the request is valid.", + "I safely stored my recovery kit.": "J'ai stocké mon kit de récupération en toute sécurité.", + "I verified with <1>{this.creatorName} that the request is valid.": "J'ai vérifié avec <1>{this.creatorName} que la requête est valide.", "I want to try again.": "Je souhaite essayer à nouveau.", "If there was an issue during the transfer, either the operation was cancelled on the mobile side, or the authentication token expired.": "S'il y a eu un problème pendant le transfert, soit l'opération a été annulée du côté mobile, soit le jeton d'authentification a expiré.", "If this does not work get in touch with support.": "Si cela ne fonctionne pas, contactez le support.", "If this is empty then it will be queried from the RootDSE.": "Si cela est vide, alors il sera interrogé à partir du RootDSE.", - "If users lose their private key and passphrase they will not be able to recover their account.": "If users lose their private key and passphrase they will not be able to recover their account.", + "If users lose their private key and passphrase they will not be able to recover their account.": "Si les utilisateurs perdent leur clé privée et leur mot de passe, ils ne seront pas en mesure de récupérer leur compte.", "If you changed systems, or reinstalled passbolt web extension in the meantime, you will need to start the account recovery process from scratch.": "Si vous avez changé de système, ou si vous avez réinstallé l'extension passbolt web en attendant, vous devrez démarrer le processus de récupération du compte à partir de zéro.", "If you do not have access, you can request a new account recovery to an administrator.": "Si vous n'avez pas accès, vous pouvez demander à un administrateur de récupérer un nouveau compte.", "If you do not have access, you can request an account recovery to an administrator.": "Si vous n'avez pas accès, vous pouvez demander à un administrateur de récupérer un nouveau compte.", @@ -455,15 +455,15 @@ "If you still need to recover your account, you will need to start the process from scratch.": "Si vous avez encore besoin de récupérer votre compte, vous devrez démarrer le processus à partir de zéro.", "Ignored:": "Ignoré", "Import": "Importer", - "Import account": "Import account", + "Import account": "Importer le compte", "Import an OpenPGP Public key": "Importer une clé publique OpenPGP", - "Import another account": "Import another account", + "Import another account": "Importer un autre compte", "Import folders": "Importer les dossiers", "Import passwords": "Importer des mots de passe", "Import success!": "Importés avec succès!", - "Import/Export": "Import/Export", - "Important notice:": "Important notice:", - "Importing account kit": "Importing account kit", + "Import/Export": "Importer/Exporter", + "Important notice:": "Remarque importante :", + "Importing account kit": "Importation du kit de compte", "In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.": "In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.", "In this section you can adjust the composition of the emails, e.g. which information will be included in the notification.": "Dans cette section, vous pouvez ajuster la composition des e-mails, par exemple quelles informations seront incluses dans la notification.", "In this section you can choose automatic behaviours.": "In this section you can choose automatic behaviours.", @@ -478,7 +478,7 @@ "Invalid permission type for share permission item.": "Type d'autorisation invalide pour l'élément d'autorisation de partage.", "is owner": "est propriétaire", "Is owner": "Est propriétaire", - "Issuer": "Issuer", + "Issuer": "Émetteur", "It does feel a bit empty here.": "Cela semble un peu vide ici.", "It is mandatory to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?": "Il est obligatoire de partager en toute sécurité une copie de votre clé privée avec les contacts de récupération de votre entreprise. Voulez-vous continuer ?", "It is not possible to perform a setup of a new account as you are still logged in. You need to log out first before continuing.": "Il n'est pas possible d'effectuer une configuration d'un nouveau compte car vous êtes toujours connecté. Vous devez vous déconnecter avant de continuer.", @@ -496,7 +496,7 @@ "Keepass file format not recognized": "Format de fichier Keepass non reconnu", "Keepass key file (optional)": "Fichier clé Keepass (optionnel)", "Keepass password": "Mot de passe Keepass", - "Key": "Key", + "Key": "Clé", "Key Id": "Id clé", "Key length": "Longueur de la clé", "Key Size": "Taille de la clé", @@ -505,10 +505,10 @@ "Language": "Langue", "Last logged in": "Dernière connexion", "Last name": "Nom", - "Later": "Later", + "Later": "Plus tard", "Learn how to <1>generate a key separately.": "Apprenez comment <1>générer une clé séparément.", "Learn more": "En savoir plus", - "Leave empty if no additional filter is required.": "Leave empty if no additional filter is required.", + "Leave empty if no additional filter is required.": "Laisser vide si aucun filtre supplémentaire n'est requis.", "Leave empty if users and groups are in the same DN.": "Laisser vide si les utilisateurs et les groupes sont dans le même DN.", "Length": "Longueur", "loading...": "chargement...", @@ -516,22 +516,22 @@ "Location": "Emplacement", "login": "connexion", "Login": "Login", - "Login URL": "Login URL", + "Login URL": "URL de connexion", "Logs": "Logs", "Lower case": "Minuscule", - "Make sure users follow screen lock best practices.": "Make sure users follow screen lock best practices.", + "Make sure users follow screen lock best practices.": "Assurez-vous que les utilisateurs suivent les meilleures pratiques de verrouillage d'écran.", "Make sure your passphrase is hard to guess but also that is long enough. For example you can use your favorite lyric from a song, grab the first couple of characters from the words in your favorite line.": "Assurez-vous que votre phrase de passe est difficile à deviner, mais aussi qu'elle est assez longue. Par exemple, vous pouvez utiliser les paroles de votre chanson préférées, et prendre les premiers caractères des mots de votre passage préféré.", "Make sure your print it or store it in a safe place. You may need it later!": "Assurez-vous de l'imprimer ou de le stocker dans un endroit sûr. Vous pouvez en avoir besoin plus tard !", "Manage Subscription": "Gérer la souscription", "Mandatory": "Obligatoire", - "Mark as expired": "Mark as expired", + "Mark as expired": "Marquer comme expiré", "Member": "Membre", "Members": "Membres", - "Metadata": "Metadata", + "Metadata": "Métadonnées", "MFA": "MFA", - "MFA Policy": "MFA Policy", - "Minimal recommendation": "Minimal recommendation", - "Minimal requirement": "Minimal requirement", + "MFA Policy": "Politique MFA", + "Minimal recommendation": "Recommandation minimale", + "Minimal requirement": "Prérequis minimaux", "Mobile Apps": "Applications mobiles", "Mobile setup": "Configuration mobile", "Mobile transfer": "Transfert mobile", @@ -539,12 +539,12 @@ "Modified by": "Modifié par", "modify": "modifier", "More": "Plus", - "More informations": "More informations", + "More informations": "Plus d'informations", "Move": "Déplacer", "Multi factor authentication": "Authentification multi-facteurs", "Multi Factor Authentication": "Multiple Facteurs d'Authentification", "Multi resource and folder share is not implemented.": "Le partage de plusieurs ressources et dossiers n'est pas implémenté.", - "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).": "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).", + "Multi-factor authentication (MFA) is a method of confirming a user's identity that requires presenting two or more pieces of evidence (or factor).": "L'authentification multi-facteurs (MFA) est une méthode de confirmation de l'identité d'un utilisateur qui nécessite de présenter deux ou plusieurs éléments de preuve (ou facteur).", "Multi-factor authentication has been disabled successfully": "L'authentification multifacteur a été désactivée avec succès", "My tags": "Mes tags", "n/a": "n/a", @@ -562,7 +562,7 @@ "New Organization Recovery Key": "Clé de récupération d'une nouvelle organisation", "new owner": "nouveau propriétaire", "New password": "Nouveau mot de passe", - "New TOTP": "New TOTP", + "New TOTP": "Nouveau TOTP", "New user": "Nouvel utilisateur", "Next": "Suivant", "No": "Non", @@ -577,9 +577,9 @@ "No passwords are shared with you yet. It does feel a bit empty here, wait for a team member to share a password with you.": "Aucun mot de passe n'est encore partagé avec vous. On se sent un peu seul ici, attendez qu'un membre de l'équipe partage un mot de passe avec vous.", "No passwords are yet tagged. It does feel a bit empty here, tag your first password.": "Aucun mot de passe n'est encore marqué avec un tag. On se sent un peu seul ici, marquez votre premier mot de passe avec un tag.", "No passwords found for the current page. You can use the search.": "Aucun mot de passe trouvé pour la page courante. Vous pouvez utiliser la recherche.", - "No passwords have expired yet.": "No passwords have expired yet.", + "No passwords have expired yet.": "Aucun mot de passe n'a encore expiré.", "No passwords in this folder yet.": "Aucun mot de passe dans ce dossier pour le moment.", - "No QR code found.": "No QR code found.", + "No QR code found.": "Aucun QR code trouvé.", "No resources have been synchronized.": "Aucune ressource n'a été synchronisée.", "No resources will be synchronized.": "Aucune ressource ne sera synchronisée.", "No result match your search. Try with another search term.": "Aucun résultat ne correspond à votre recherche. Essayez avec un autre terme de recherche.", @@ -588,13 +588,13 @@ "no username provided": "aucun nom d'utilisateur fourni", "No Users Directory is configured. Enable it to synchronise your users and groups with passbolt.": "Aucun répertoire utilisateur n'est configuré. Activez-le pour synchroniser vos utilisateurs et groupes avec Passbolt.", "no, thanks": "non, merci", - "None": "None", + "None": "Aucun", "None of the users matched this search.": "Aucun des utilisateurs ne correspond à cette recherche.", "None of your passwords are yet marked as favorite.": "Aucun de vos mots de passe n'est encore marqué comme favori.", "None of your passwords are yet marked as favorite. Add stars to passwords you want to easily find later.": "Aucun de vos mots de passe n'est encore marqué comme favori. Ajoutez des étoiles aux mots de passe que vous souhaitez facilement retrouver plus tard.", "None of your passwords matched this search.": "Aucun de vos mots de passe ne correspond à cette recherche.", "not available": "indisponible", - "Not set": "Not set", + "Not set": "Non défini", "Note that this will not prevent a user from customizing the settings while generating a password.": "Note that this will not prevent a user from customizing the settings while generating a password.", "Number of recovery": "Numéro de récupération", "Number of words": "Nombre de mots", @@ -602,17 +602,17 @@ "OK": "OK", "Ok, I understand what I need to do.": "Ok, je comprends ce que je dois faire.", "Once expired you will not be able to connect to your account.": "Une fois expiré, vous ne pourrez plus vous connecter à votre compte.", - "Once the comment is deleted, it will be removed permanently and will not be recoverable.": "Once the comment is deleted, it will be removed permanently and will not be recoverable.", - "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "Once the resource is deleted, it will be removed permanently and will not be recoverable.", - "Once the tag is deleted, it will be removed permanently and will not be recoverable.": "Once the tag is deleted, it will be removed permanently and will not be recoverable.", + "Once the comment is deleted, it will be removed permanently and will not be recoverable.": "Une fois le commentaire supprimé, il sera supprimé définitivement et ne sera pas récupérable.", + "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "Une fois la ressource supprimée, elle sera supprimée définitivement et ne sera pas récupérable.", + "Once the tag is deleted, it will be removed permanently and will not be recoverable.": "Une fois que le tag est supprimé, il sera supprimé définitivement et ne sera pas récupérable.", "Once you enter this code, you can log in.": "Une fois que vous avez entré ce code, vous pouvez vous connecter.", - "One Time Password (OTP)": "One Time Password (OTP)", + "One Time Password (OTP)": "Mot de passe à usage unique (OTP)", "Only administrators can invite users to register.": "Seuls les administrateurs peuvent inviter des utilisateurs à s'inscrire.", "Only administrators would be able to invite users to register. ": "Seuls les administrateurs pourront inviter des utilisateurs à s'inscrire. ", - "Only alphanumeric, dash and underscore characters are accepted.": "Only alphanumeric, dash and underscore characters are accepted.", + "Only alphanumeric, dash and underscore characters are accepted.": "Seuls les caractères alphanumériques, tirets et tirets bas sont acceptés.", "Only numeric characters allowed.": "Seuls les caractères numériques sont autorisés.", - "Only passbolt format is allowed.": "Only passbolt format is allowed.", - "Only PNG or JPEG file are accepted.": "Only PNG or JPEG file are accepted.", + "Only passbolt format is allowed.": "Seul le format de passbolt est autorisé.", + "Only PNG or JPEG file are accepted.": "Seuls les fichiers PNG ou JPEG sont acceptés.", "Only synchronize enabled users (AD)": "Synchroniser uniquement les utilisateurs actifs (AD)", "Only the group manager can add new people to a group.": "Seul le responsable du groupe peut ajouter de nouvelles personnes à un groupe.", "Oops, something went wrong": "Oups, une erreur s'est produite", @@ -623,7 +623,7 @@ "open passbolt in a new tab": "ouvrir Passbolt dans un nouvel onglet", "Open URI in a new Tab": "Ouvrir l'URI dans un nouvel onglet", "OpenId Configuration Path": "OpenId Configuration Path", - "Opt-in (default)": "Opt-in (default)", + "Opt-in (default)": "Opt-in (par défaut)", "Optional": "Optionnel", "Optional, Opt-in": "Optionnel, Opter pour", "Optional, Opt-out": "Optionnel, Option de refus", @@ -906,7 +906,7 @@ "Test settings": "Tester les paramètres", "Test settings report": "Tester le rapport des paramètres", "Test Single Sign-On configuration": "Tester la configuration de l'authentification unique", - "The account kit has been downloaded successfully.": "The account kit has been downloaded successfully.", + "The account kit has been downloaded successfully.": "Le kit de compte a été téléchargé avec succès.", "The account recovery request does not exist.": "La demande de récupération du compte n'existe pas.", "The account recovery review has been saved successfully": "La révision de récupération du compte a été enregistrée avec succès", "The account recovery subscription setting has been updated.": "Le paramètre d'abonnement à la récupération du compte a été mis à jour.", @@ -1006,7 +1006,7 @@ "The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach": "Le service pwnedpasswords n'est pas accessible, votre phrase de passe pourrait faire partie d'une fuite de données", "The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach.": "Le service pwnedpasswords n'est pas accessible, votre phrase de passe pourrait faire partie d'une fuite de données.", "The pwnedpasswords service is unavailable, your password might be part of an exposed data breach": "The pwnedpasswords service is unavailable, your password might be part of an exposed data breach", - "The QR code is incomplete.": "The QR code is incomplete.", + "The QR code is incomplete.": "Le QR code est incomplet.", "The redirection URL has been copied to the clipboard.": "The redirection URL has been copied to the clipboard.", "The request is expired.": "La requête a expiré.", "The role-based access control settings were updated.": "The role-based access control settings were updated.", @@ -1092,7 +1092,7 @@ "This user will not be able to sign in to passbolt and receive email notifications. Other users can share resource with it and add this user to a group.": "This user will not be able to sign in to passbolt and receive email notifications. Other users can share resource with it and add this user to a group.", "This will help protect you from <1>phishing attacks.": "Cela vous protégera contre les <1>attaques par hameçonnage.", "Time based One Time Password (TOTP)": "Mot de passe à usage unique basé sur le temps (TOTP)", - "Time is up": "Time is up", + "Time is up": "Le temps est écoulé", "Time-based One Time Password": "Mot de passe à usage unique basé sur le temps (TOTP)", "Tips for choosing a good passphrase": "Conseils pour choisir une bonne phrase de passe", "TLS must be set to 'Yes' or 'No'": "TLS doit être paramétré à 'Oui' ou 'Non'", @@ -1107,7 +1107,7 @@ "Transfer complete!": "Transfert terminé !", "Transfer in progress...": "Transfert en cours...", "Transfer your account key": "Transférer votre clé de compte", - "Transfer your account kit": "Transfer your account kit", + "Transfer your account kit": "Transférer votre kit de compte", "Try again": "Veuillez réessayer", "Try another search or use the left panel to navigate into your organization.": "Essayez une autre recherche ou utilisez le panneau de gauche pour accéder à votre organisation.", "Try another search or use the left panel to navigate into your passwords.": "Essayez une autre recherche ou utilisez le panneau de gauche pour naviguer dans vos mots de passe.", @@ -1116,7 +1116,7 @@ "Type one or more characters": "Tapez un ou plusieurs caractères", "UI Permissions": "UI Permissions", "Uid": "Uid", - "Unable to copy the TOTP": "Unable to copy the TOTP", + "Unable to copy the TOTP": "Impossible de copier le TOTP", "Unable to preview the TOTP": "Unable to preview the TOTP", "Unable to use the password on this page. Copy and paste the information instead.": "Impossible d'utiliser le mot de passe dans la page. Copiez et collez l'information à la place.", "Unchanged": "Inchangé", @@ -1135,8 +1135,8 @@ "updated": "mis à jour", "upload": "téléverser", "Upload a new avatar picture": "Uploader une nouvelle photo", - "Upload a QR code": "Upload a QR code", - "Upload your account kit": "Upload your account kit", + "Upload a QR code": "Chargez un code QR", + "Upload your account kit": "Chargez votre kit de compte", "UPN": "UPN", "Upper case": "Majuscule", "URI": "URI", @@ -1151,27 +1151,27 @@ "User custom filters are used in addition to the base DN and user path while searching users.": "User custom filters are used in addition to the base DN and user path while searching users.", "User ids": "Identifiants utilisateur", "User object class": "Classe d'objet utilisateur", - "User passphrase minimal entropy": "User passphrase minimal entropy", - "User Passphrase Policies": "User Passphrase Policies", + "User passphrase minimal entropy": "Enentropie minimale de la phrase de passe utilisateur", + "User Passphrase Policies": "Politiques de passphrase utilisateur", "User path": "Chemin des utilisateurs", "User path is used in addition to base DN while searching users.": "Le chemin des utilisateurs est utilisé en plus de la base DN lors de la recherche d'utilisateurs.", - "User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.": "User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.", - "User self registration is disabled.": "User self registration is disabled.", - "User settings": "User settings", + "User self registration enables users with an email from a whitelisted domain to create their passbolt account without prior admin invitation.": "L'auto-enregistrement des utilisateurs permet aux utilisateurs possédant un email provenant d'un domaine autorisé de créer leur compte passbolt sans nécessiter une invitation préalable de l'administrateur.", + "User self registration is disabled.": "L'auto-enregistrement des utilisateurs est désactivé.", + "User settings": "Paramètres utilisateur", "User username field mapping": "User username field mapping", "Username": "Nom d'utilisateur", "Username / Email": "Nom d'utilisateur / Email", - "Username & password": "Username & password", + "Username & password": "Nom d'utilisateur et mot de passe", "Username must be a valid string": "Le nom d'utilisateur doit être une chaîne de caractères valide", - "Username only": "Username only", + "Username only": "Nom d'utilisateur uniquement", "users": "utilisateurs", "Users": "Utilisateurs", "Users Directory": "Répertoire d'utilisateurs", - "Users have the choice to enable multi factor authentication in their profile workspace.": "Users have the choice to enable multi factor authentication in their profile workspace.", - "Users have to enable multi factor authentication. If they don't, they will be reminded every time they log in.": "Users have to enable multi factor authentication. If they don't, they will be reminded every time they log in.", + "Users have the choice to enable multi factor authentication in their profile workspace.": "Les utilisateurs ont le choix d'activer l'authentification multi-facteurs dans leur espace de travail de profil.", + "Users have to enable multi factor authentication. If they don't, they will be reminded every time they log in.": "Les utilisateurs doivent activer l'authentification multi-facteurs. S'ils ne le font pas, il leur sera rappelé à chaque fois qu'ils se connectent.", "Users limit:": "Limite d'utilisateurs:", "Users parent group": "Groupe parent des utilisateurs", - "Users will not be able to self register anymore.": "Users will not be able to self register anymore.", + "Users will not be able to self register anymore.": "Les utilisateurs ne pourront plus s'inscrire eux-mêmes.", "Valid from:": "Valable à partir de:", "Validate": "Validate", "varies": "varie", @@ -1189,7 +1189,7 @@ "Warning, we encourage you to generate your OpenPGP Organization Recovery Key separately. Make sure you keep a backup in a safe place.": "Attention, nous vous encourageons à générer séparément votre clé de récupération OpenPGP pour l'Organisation. Assurez-vous de conserver une sauvegarde dans un endroit sûr.", "Warning:": "Attention :", "Warning: If users lose their private key and passphrase they will not be able to recover their account.": "Attention : Si les utilisateurs perdent leur clé privée et leur mot de passe, ils ne seront pas en mesure de récupérer leur compte.", - "Warning: This recovery kit replace the old one.": "Warning: This recovery kit replace the old one.", + "Warning: This recovery kit replace the old one.": "Attention : Ce kit de récupération remplace l’ancien.", "Warning: You should inform your users not to store personal passwords.": "Attention : vous devez informer vos utilisateurs de ne pas stocker de mots de passe personnels.", "We sent you a link to verify your email.": "Nous vous avons envoyé un lien pour vérifier votre e-mail.", "Weak": "Faible", @@ -1197,7 +1197,7 @@ "Welcome back!": "Bienvenue à nouveau!", "Welcome to Passbolt, please select a passphrase!": "Bienvenue à Passbolt, veuillez sélectionner une phrase de passe!", "Welcome to passbolt!": "Bienvenue sur passbolt!", - "Welcome to the desktop app setup": "Welcome to the desktop app setup", + "Welcome to the desktop app setup": "Bienvenue dans la configuration de l'application de bureau", "Welcome to the mobile app setup": "Bienvenue dans la configuration de l'application mobile", "What if I forgot my passphrase?": "Que faire si j'ai oublié ma phrase de passe ?", "What is multi-factor authentication?": "Qu'est-ce que l'authentification multi-facteurs ?", @@ -1235,7 +1235,7 @@ "When users completed the recover of their account, notify them.": "Lorsque des utilisateurs ont terminé la récupération de leur compte, les informer.", "When users try to recover their account, notify them.": "Lorsque les utilisateurs essaient de récupérer leur compte, les informer.", "When using a new browser, you need an additional code from your phone.": "Lorsque vous utilisez un nouveau navigateur, vous avez besoin d'un code supplémentaire provenant de votre téléphone.", - "Where can I find my account kit ?": "Where can I find my account kit ?", + "Where can I find my account kit ?": "Où puis-je trouver mon kit de compte ?", "Where to find it?": "Where to find it?", "Why do I need an SMTP server?": "Pourquoi ai-je besoin d'un serveur SMTP ?", "Why is this token needed?": "Pourquoi ce jeton est-il nécessaire ?", @@ -1276,7 +1276,7 @@ "You need to click save for the changes to take place.": "Vous devez cliquer sur enregistrer pour que les modifications prennent effet.", "You need to enter your current passphrase.": "You need to enter your current passphrase.", "You need to finalize the account recovery process with the same computer you used for the account recovery request.": "Vous devez finaliser le processus de récupération du compte avec le même ordinateur que celui que vous avez utilisé pour la demande de récupération du compte.", - "You need to upload an account kit to start using the desktop app. ": "You need to upload an account kit to start using the desktop app. ", + "You need to upload an account kit to start using the desktop app. ": "Vous devez charger un kit de compte pour commencer à utiliser l'application de bureau. ", "You need use the same computer and browser to finalize the process.": "Vous devez utiliser le même ordinateur et le même navigateur pour finaliser le processus.", "You need your passphrase to continue.": "Vous avez besoin de votre phrase de passe pour continuer.", "You seem to have Email Notification Settings defined in your passbolt.php (or via environment variables).": "Vous semblez avoir des paramètres de notification par e-mail définis dans votre passbolt.php (ou via des variables d'environnement).", @@ -1287,7 +1287,7 @@ "You took too long to recover your account.": "You took too long to recover your account.", "You took too long to set up your account.": "You took too long to set up your account.", "You will be able to save it after submitting": "Vous serez en mesure de l'enregistrer après soumission", - "You will need this recovery kit later to access your account (for example on a new device).": "You will need this recovery kit later to access your account (for example on a new device).", + "You will need this recovery kit later to access your account (for example on a new device).": "Vous aurez besoin de ce kit de récupération plus tard pour accéder à votre compte (par exemple sur un nouvel appareil).", "you@organization.com": "vous@organisation.com", "Your browser is not configured to work with this passbolt instance.": "Your browser is not configured to work with this passbolt instance.", "Your language is missing or you discovered an error in the translation, help us to improve passbolt.": "Votre langue est manquante ou vous avez découvert une erreur dans la traduction, aidez-nous à améliorer passbolt.", @@ -1331,7 +1331,7 @@ "<0>{{numberFolderSuccess}} out of {{count}} folder has been imported._other": "<0>{{numberFolderSuccess}} dossiers sur {{count}} ont été importés.", "<0>{{numberResourceSuccess}} out of {{count}} password has been imported._one": "<0>{{numberResourceSuccess}} sur {{count}} mot de passe a été importé.", "<0>{{numberResourceSuccess}} out of {{count}} password has been imported._other": "<0>{{numberResourceSuccess}} mots de passe sur {{count}} ont été importés.", - "Delete resource?_one": "Delete resource?", + "Delete resource?_one": "Supprimer la ressource?", "Delete resource?_other": "Delete resources?", "Set an expiry date_one": "Set an expiry date", "Set an expiry date_other": "Set expiry dates", @@ -1343,6 +1343,6 @@ "The resource has been marked as expired._other": "The resources have been marked as expired.", "This resource does not need an expiry date._one": "This resource does not need an expiry date.", "This resource does not need an expiry date._other": "These resources do not need an expiry date.", - "Unable to mark the resource as expired._one": "Unable to mark the resource as expired.", + "Unable to mark the resource as expired._one": "Impossible de marquer la ressource comme expirée.", "Unable to mark the resource as expired._other": "Unable to mark the resources as expired." } \ No newline at end of file diff --git a/webroot/locales/ko-KR/common.json b/webroot/locales/ko-KR/common.json index f6777f5946..cd4d6b4e92 100644 --- a/webroot/locales/ko-KR/common.json +++ b/webroot/locales/ko-KR/common.json @@ -7,7 +7,7 @@ "(tag)": "(태그)", "{column.label}": "{column.label}", "{errors.get(key)}": "{errors.get(key)}", - "{this.creatorName} did not initiate this request.": "{this.creatorName} did not initiate this request.", + "{this.creatorName} did not initiate this request.": "{this.creatorName} 이(가) 이 요청을 시작하지 않았습니다.", "{this.state.warnings.get(key)}": "{this.state.warnings.get(key)}", "@your-domain.com": "@your-domain.com", "<0>{{activityCreatorName}} accepted the account recovery policy": "<0>{{activityCreatorName}} 이(가) 계정 복구 정책을 수락했습니다.", @@ -26,12 +26,12 @@ "<0><0>{{activityCreatorName}} rejected the account recovery request": "<0>{{activityCreatorName}} 이(가) 계정 복구 요청을 거부했습니다.", "<0>4. Scan the QR codes with your phone.": "<0>4. 스마트폰으로 QR코드를 스캔하세요.", "<0>5. And you are done!": "<0>5. 그리고 완료하세요!", - "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.": "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.", + "<0>Warning: Checkout the <1><0><0>documentation<2> to see what information is supported.": "<0>경고: 확인필요<1><0><0>문서에서<2>지원되는 정보를 확인하세요.", "<0>Warning: Suspension is scheduled for the {this.suspendedDate}": "<0>경고: {this.suspendedDate}에 일시 정지가 예약되었습니다", "<0>Warning: These are the settings provided by a configuration file. If you save it, will ignore the settings on file and use the ones from the database.": "<0>경고: 구성 파일에서 제공하는 설정입니다. 파일을 저장하면, 파일의 설정을 무시하고 데이터베이스의 설정을 사용합니다.", "<0>Warning: This secret will expire after some time (typically a few months). Make sure you save the expiry date and rotate it on time.": "<0>경고: 이 암호는 시간이 지나면(일반적으로 몇 개월) 만료됩니다. 만료 날짜를 저장하고 시간에 맞게 교체해야 합니다.", "<0>Warning: UPN is not active by default on Azure and requires a specific option set on Azure to be working.": "<0>경고: UPN(사용자계정이름)은 Azure에서 기본적으로 활성화되지 않으며 Azure에서 작동하려면 특정 옵션이 필요합니다.", - "<0>When a user creates a resource, a default expiry date is set to <1><2>days": "<0>When a user creates a resource, a default expiry date is set to <1><2>days", + "<0>When a user creates a resource, a default expiry date is set to <1><2>days": "<0>사용자가 문서를 생성하면, 기본 만료날짜가<1><2> 설정됩니다.", "1. Click download the account kit.": "1. 클릭해서 계정 키트를 다운로드하세요.", "1. Install the application from the store.": "1. 스토어에서 앱을 설치하세요.", "2. Install the application from the store.": "2. 스토어에서 앱을 설치하세요.", @@ -63,7 +63,7 @@ "A tag name is required.": "태그 이름이 필요합니다.", "A username is required.": "사용자이름이 필요합니다.", "A Users Directory is configured. The users and groups of passbolt will synchronize with it.": "사용자 디렉토리가 구성되었습니다. 패스볼트의 사용자 및 그룹이 패스볼트와 동기화됩니다.", - "About password expiry": "About password expiry", + "About password expiry": "암호 만료 정보", "Accept": "수락", "Accept new key": "새 키 수락", "Accept the new SSO provider": "새 SSO 제공자 수락", @@ -76,7 +76,7 @@ "Account Recovery Policy": "계정 복구 정책", "Activated": "활성화됨", "Activation pending": "활성화 대기 중", - "active": "active", + "active": "활성", "Active Directory": "액티브 디렉토리", "Activity": "활동", "Add": "추가", @@ -105,10 +105,10 @@ "All users": "모든 사용자", "Allow": "허용", "Allow “Remember this device for a month.“ option during MFA.": "MFA를 사용하는 동안 “이 장치를 한 달 동안 기억하기.“ 옵션을 허용하세요.", - "Allow group manager": "Allow group manager", + "Allow group manager": "그룹 관리자 허용", "Allow passbolt to access external services to check if a password has been compromised.": "이 옵션을 사용하면 암호를 해독할 때 외부 서비스에 접근할 수 있습니다.", "Allow passbolt to access external services to check if the user passphrase has been compromised when the user creates it.": "사용자가 암호를 만들 때 사용자 암호문이 손상되었는지 확인하기 위해 패스볼트가 외부 서비스에 액세스하도록 허용합니다.", - "Allow users to override the default policy.": "Allow users to override the default policy.", + "Allow users to override the default policy.": "사용자가 기본 정책을 재정의할 수 있도록 허용합니다.", "Allowed domains": "허용 도메인", "Allows Azure and Passbolt API to securely share information.": "Azure 와 Passbolt API가 정보를 안전하게 공유할 수 있습니다.", "Allows Google and Passbolt API to securely share information.": "Google과 Passbolt API가 정보를 안전하게 공유할 수 있습니다.", @@ -128,7 +128,7 @@ "Are you sure you want to delete the comment?": "의견을 삭제하시겠습니까?", "Are you sure you want to delete the folder <1>{{folderName}}?": "<1>{{folderName}}폴더를 삭제하시겠습니까?", "Are you sure you want to delete the group <1>{{groupName}}?": "<1>{{groupName}}그룹을 삭제하시겠습니까?", - "Are you sure you want to delete the resource <1>{{resourceName}}?": "Are you sure you want to delete the resource <1>{{resourceName}}?", + "Are you sure you want to delete the resource <1>{{resourceName}}?": "<1>{{resourceName}}리소스를 삭제하시겠습니까?", "Are you sure you want to delete the tag <1>{{tagName}}?": "<1>{{tagName}}태그를 삭제하시겠습니까?", "Are you sure you want to disable the current Single Sign-On settings?": "현재의 싱글사인온 설정을 사용하지 않도록 설정하시겠습니까?", "Are you sure?": "확실합니까?", @@ -137,9 +137,9 @@ "Authentication method": "인증 방법", "Authentication token is missing from server response.": "서버 응답으로부터 인증 토큰이 없습니다.", "Automatic expiry": "자동 만료", - "Automatic Expiry": "Automatic Expiry", + "Automatic Expiry": "자동 만료", "Automatic update": "자동 업데이트", - "Automatic Update": "Automatic Update", + "Automatic Update": "자동 업데이트", "Automatic workflows": "자동 워크플로우", "Avatar": "아바타", "Avatar of the {{group_name}} group.": "{{group_name}} 그룹의 아바타.", @@ -249,7 +249,7 @@ "currently:": "현재:", "Customer id:": "고객 id:", "database": "데이타베이스", - "days from now.": "days from now.", + "days from now.": "지금부터 수일 후에.", "Decrypting": "복호화 중...", "Decrypting secret": "비밀번호 복호화 중", "Decryption failed, click here to retry": "복호화에 실패했습니다, 여기를 클릭하여 재시도하세요.", @@ -257,7 +257,7 @@ "Default admin": "기본 관리자", "default configuration": "기본 구성", "Default group admin": "기본 그룹 관리자", - "Default password expiry period": "Default password expiry period", + "Default password expiry period": "기본 암호 만료 기간", "Default password type": "기본 암호 유형", "Default users multi factor authentication policy": "기본 사용자 다단계 인증 정책", "Defines the Azure login behaviour by prompting the user to fully login each time or not.": "사용자에게 매번 전체 로그인 여부를 묻는 메시지를 표시하여 Azure 로그인 동작을 정의합니다.", @@ -292,7 +292,7 @@ "Do not store sensitive data or click here to enable encryption for the description field.": "민감한 데이터를 저장하지 않거나 설명 필드에 대한 암호화를 사용하려면 여기를 클릭하세요.", "Do not store sensitive data. Unlike the password, this data is not encrypted. Upgrade to version 3 to encrypt this information.": "민감한 데이터를 저장하지 마십시오. 이 데이터는 암호와 다르게 암호화되지 않습니다. 이 정보를 암호화하려면 버전 3으로 업그레이드하십시오.", "Do you need help?": "도움이 필요하세요?", - "documentation": "documentation", + "documentation": "문서", "domain": "도메인", "Domain": "도메인", "Don't forget to save your settings to apply your modification.": "수정 사항을 적용하려면 설정을 저장해야 합니다.", @@ -358,7 +358,7 @@ "Expires": "만료", "Expires on:": "만료일:", "Expiry": "만료", - "Expiry Policies": "Expiry Policies", + "Expiry Policies": "만료 정책", "Export": "내보내기", "Export all": "모두 내보내기", "Export passwords": "암호 내보내기", @@ -441,7 +441,7 @@ "I do not want to share a copy of my private key & passphrase with my organization recovery contacts.": "개인키 및 패스프레이즈의 복사본을 조직 복구 담당자와 안전하게 공유하는 데 비동의합니다.", "I lost my passphrase, generate a new private key.": "패스프레이즈를 잃어버렸습니다. 새로운 개인키를 생성하세요.", "I safely stored my recovery kit.": "복구 키트를 안전하게 보관했습니다.", - "I verified with <1>{this.creatorName} that the request is valid.": "I verified with <1>{this.creatorName} that the request is valid.", + "I verified with <1>{this.creatorName} that the request is valid.": "요청이 유효한지 <1>{this.creatorName} 와(과) 함께 확인했습니다.", "I want to try again.": "재시도 해보기", "If there was an issue during the transfer, either the operation was cancelled on the mobile side, or the authentication token expired.": "전송 중 문제가 발생한 경우 모바일 측에서 작업이 취소되었거나 인증 토큰이 만료되었습니다.", "If this does not work get in touch with support.": "이 방법으로 작동하지 않을 경우 지원부서에 문의하십시오.", @@ -466,9 +466,9 @@ "Importing account kit": "계정 키트 가져오기", "In order to use the "Username & Password" authentication method with Google, you will need to enable MFA on your Google Account. The password should not be your login password, you have to create an "App Password" generated by Google.. However, the email remain the same.": ""사용자 이름 및 비밀번호"를 사용하려면 Google 인증 방법 사용하여, Google 계정에서 MFA를 활성화해야 합니다. 비밀번호는 로그인 비밀번호가 아니어야 하며 Google에서 생성된 "앱 비밀번호"를 만들어야 합니다. 하지만 이메일은 동일하게 유지됩니다.", "In this section you can adjust the composition of the emails, e.g. which information will be included in the notification.": "이 섹션에서는 이메일의 구성(예: 알림에 포함될 정보)을 조정할 수 있습니다.", - "In this section you can choose automatic behaviours.": "In this section you can choose automatic behaviours.", + "In this section you can choose automatic behaviours.": "이 섹션에서는 자동 동작을 선택할 수 있습니다.", "In this section you can choose the default behavior of account recovery for all users.": "이 섹션에서는 모든 사용자에 대한 계정 복구의 기본 동작을 선택할 수 있습니다.", - "In this section you can choose the default behaviour of password expiry policy for all users.": "In this section you can choose the default behaviour of password expiry policy for all users.", + "In this section you can choose the default behaviour of password expiry policy for all users.": "이 섹션에서는 모든 사용자에 대한 암호 만료 정책의 기본 동작을 선택할 수 있습니다.", "In this section you can choose which email notifications will be sent.": "이 섹션에서는 어떤 이메일 알림을 보낼지 선택할 수 있습니다.", "In this section you can choose which multi factor authentication will be available.": "이 섹션에서는 사용할수 있는 다단계 인증을 선택할 수 있습니다.", "In this section you can define access controls for each user role.": "이 섹션에서는 각 사용자 역할에 대한 접근 제어를 정의할 수 있습니다.", @@ -524,7 +524,7 @@ "Make sure your print it or store it in a safe place. You may need it later!": "인쇄하거나 안전한 장소에 보관하십시오. 나중에 필요할 수도 있습니다.", "Manage Subscription": "구독 관리", "Mandatory": "필수", - "Mark as expired": "Mark as expired", + "Mark as expired": "만료로 표시", "Member": "구성원", "Members": "구성원", "Metadata": "메타데이터", @@ -562,7 +562,7 @@ "New Organization Recovery Key": "새 조직 복구 키", "new owner": "새 소유자", "New password": "새 암호", - "New TOTP": "New TOTP", + "New TOTP": "새 TOTP", "New user": "새 사용자", "Next": "다음", "No": "아니오", @@ -594,7 +594,7 @@ "None of your passwords are yet marked as favorite. Add stars to passwords you want to easily find later.": "즐겨찾기로 표시된 암호가 아직 없습니다. 나중에 쉽게 찾을 수 있는 암호에 별표를 추가합니다.", "None of your passwords matched this search.": "이 검색결과와 일치하는 암호가 없습니다.", "not available": "없음", - "Not set": "Not set", + "Not set": "설정 안됨", "Note that this will not prevent a user from customizing the settings while generating a password.": "이는 사용자가 비밀번호를 생성하는 동안 설정을 사용자 정의하는 것을 막지는 못합니다.", "Number of recovery": "복구 횟수", "Number of words": "단어수", @@ -603,13 +603,13 @@ "Ok, I understand what I need to do.": "알겠습니다. 무엇을 해야 하는지 이해합니다.", "Once expired you will not be able to connect to your account.": "만료되면 계정에 연결할 수 없습니다.", "Once the comment is deleted, it will be removed permanently and will not be recoverable.": "의견이 삭제되면 영구적으로 삭제되고 복구할 수 없습니다.", - "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "Once the resource is deleted, it will be removed permanently and will not be recoverable.", + "Once the resource is deleted, it will be removed permanently and will not be recoverable.": "리소스가 삭제되면 영구적으로 제거되며 복구할 수 없습니다.", "Once the tag is deleted, it will be removed permanently and will not be recoverable.": "태그가 삭제되면 영구적으로 삭제되고 복구할 수 없습니다.", "Once you enter this code, you can log in.": "이 코드를 입력하면 로그인할 수 있습니다.", "One Time Password (OTP)": "일회용 암호(OTP)", "Only administrators can invite users to register.": "관리자만 사용자를 등록하도록 초대할 수 있습니다.", "Only administrators would be able to invite users to register. ": "관리자만 사용자를 등록하도록 초대할 수 있습니다. ", - "Only alphanumeric, dash and underscore characters are accepted.": "Only alphanumeric, dash and underscore characters are accepted.", + "Only alphanumeric, dash and underscore characters are accepted.": "알파벳과 숫자, 대시(-) 및 언더스코어(_) 문자만 허용됩니다.", "Only numeric characters allowed.": "숫자만 사용할 수 있습니다.", "Only passbolt format is allowed.": "패스볼트 포맷만 허용됨.", "Only PNG or JPEG file are accepted.": "PNG 또는 JPEG 파일만 허용됩니다.", @@ -648,13 +648,13 @@ "Passphrase required": "패스프레이즈가 필요합니다.", "Passphrase settings": "패스프레이즈 설정", "Password": "암호", - "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.": "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.", + "Password automatically expires when a user or group with a user who has accessed the password is removed from the permission list.": "암호는 자동으로 만료됩니다. 이는 해당 암호에 액세스한 사용자 또는 해당 사용자를 포함한 그룹이 권한 목록에서 제거될 때 발생합니다.", "Password expiry": "암호 만료", "Password Expiry": "암호 만료", - "Password expiry date is renewed based on the default password expiry period whenever a password is updated.": "Password expiry date is renewed based on the default password expiry period whenever a password is updated.", + "Password expiry date is renewed based on the default password expiry period whenever a password is updated.": "암호 만료일은 암호가 업데이트될 때마다 기본 암호 만료 기간을 기준으로 갱신됩니다.", "Password Generator": "암호 생성기", "Password generator default settings": "암호 생성기 기본 설정", - "Password is no longer marked as expired whenever the password is updated.": "Password is no longer marked as expired whenever the password is updated.", + "Password is no longer marked as expired whenever the password is updated.": "암호가 업데이트될 때마다 암호가 만료된 것으로 더 이상 표시되지 않습니다.", "Password must be a valid string": "패스워드는 반드시 문자열이여야 합니다.", "Password Policy": "암호 정책", "passwords": "암호", @@ -664,7 +664,7 @@ "Pending": "보류 중", "Pick a color and enter three characters.": "색상을 선택하고 세글자를 입력하세요.", "Please authenticate with the Single Sign-On provider to continue.": "계속하려면 싱글사인온 제공자를 인증하세요.", - "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.": "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.", + "Please confirm you really want to delete the resources. After clicking ok, the resources will be deleted permanently.": "암호를 삭제할지 확인하십세요. 확인을 클릭하면 암호가 영구적으로 삭제됩니다.", "Please contact your administrator to enable multi-factor authentication.": "다단계 인증을 사용하려면 관리자에게 문의하세요.", "Please contact your administrator to enable the account recovery feature.": "관리자에게 문의하여 계정 복구 기능을 활성화하세요.", "Please contact your administrator to fix this issue.": "관리자에게 연락하여 문제를 해결하세요.", @@ -692,7 +692,7 @@ "Please try again.": "나중 후 다시 시도하세요.", "Please wait, while your request is processed.": "요청이 처리되는 중입니다. 잠시만 기다리세요.", "Please wait...": "기다려주세요...", - "Policy Override": "Policy Override", + "Policy Override": "정책 재정의", "Port": "포트", "Port must be a number between 1 and 65535": "포트는 1에서 65535 사이의 숫자여야 합니다.", "Port must be a valid number": "포트는 올바른 번호여야 합니다.", @@ -814,9 +814,9 @@ "Server response is empty.": "서버 응답이 비어 있습니다.", "Server url": "서버 url", "Session Expired": "세션이 만료됨", - "Set expiry date": "Set expiry date", - "Set the date automatically:": "Set the date automatically:", - "Set the date manually:": "Set the date manually:", + "Set expiry date": "만료일 설정", + "Set the date automatically:": "날짜 자동 설정:", + "Set the date manually:": "날짜 수동 설정:", "Settings": "설정", "Settings have been found in your database as well as in your passbolt.php (or environment variables).": "설정은 데이터베이스뿐만 아니라 passbolt.php (또는 환경 변수)에도 있습니다.", "Share": "공유", @@ -923,8 +923,8 @@ "The default admin user is the user that will perform the operations for the the directory.": "기본 관리 사용자는 디렉토리에 대한 작업을 수행할 사용자입니다.", "The default group manager is the user that will be the group manager of newly created groups.": "기본 그룹 관리자는 새로 생성된 그룹의 그룹 관리자가 될 사용자입니다.", "The default language of the organisation.": "조직의 기본 언어입니다.", - "The default password expiry period should be a number between 1 and 999 days.": "The default password expiry period should be a number between 1 and 999 days.", - "The default password expiry period should be a valid number.": "The default password expiry period should be a valid number.", + "The default password expiry period should be a number between 1 and 999 days.": "기본 암호 만료 기간은 1일에서 999일 사이의 숫자여야 합니다.", + "The default password expiry period should be a valid number.": "기본 암호 만료 기간은 유효한 숫자여야 합니다.", "The default type is": "기본 유형은", "The description content will be encrypted.": "설명 내용이 암호화됩니다.", "The description has been updated successfully": "설명이 성공적으로 수정되었습니다", @@ -1012,7 +1012,7 @@ "The role-based access control settings were updated.": "역할 기반 접근 제어 설정이 업데이트되었습니다.", "The secret has been copied to clipboard": "암호가 클립보드에 복사되었습니다.", "The security token code should be 3 characters long.": "보안 토큰 코드는 3자여야 합니다.", - "The security token code should contains only alphanumeric, dash and underscore characters.": "The security token code should contains only alphanumeric, dash and underscore characters.", + "The security token code should contains only alphanumeric, dash and underscore characters.": "보안 토큰 코드에는 알파벳, 숫자, 대시(-) 및 언더스코어(_) 문자만 포함되어야 합니다.", "The security token code should not be empty.": "보안 토큰 코드는 비워 둘 수 없습니다.", "The security token has been updated successfully": "보안 토큰이 성공적으로 수정되었습니다", "The self registration settings for the organization were updated.": "조직에 대한 자체 등록 설정이 설정이 업데이트되었습니다.", @@ -1020,8 +1020,8 @@ "The settings displayed in the form below are the one stored in your database and have precedence over others.": "아래 양식에 표시된 설정은 데이터베이스에 저장된 설정으로 다른 설정보다 우선합니다.", "The SMTP settings have been saved successfully": "SMTP 설정을 정상적으로 저장하였습니다.", "The SSO kit is outdated and can't be used to decrypt your passphrase: {{error}}": "SSO 키트가 오래되어 암호를 해독하는 데 사용할 수 없습니다. {error}", - "The SSO settings have been deleted successfully": "The SSO settings have been deleted successfully", - "The SSO settings have been saved successfully": "The SSO settings have been saved successfully", + "The SSO settings have been deleted successfully": "SSO설정이 성공적으로 삭제되었습니다", + "The SSO settings have been saved successfully": "SSO 설정을 정상적으로 저장하였습니다", "The subscription key has been updated successfully.": "구독 키가 성공적으로 수정되었습니다.", "The subscription key is invalid.": "구독 키가 올바르지 않습니다.", "The tag has been deleted successfully": "태그가 성공적으로 삭제되었습니다", @@ -1033,10 +1033,10 @@ "The Time-based One Time Password provider is disabled for all users.": "시간 기반 일회용 암호 공급자가 모든 사용자에 대해 비활성화되었습니다.", "The Time-based One Time Password provider is enabled for all users. They can setup this provider in their profile and use it as second factor authentication.": "시간 기반 일회용 암호 공급자가 모든 사용자에 대해 사용 가능합니다. 프로필에 이 공급자를 설정하고 2차 인증으로 사용할 수 있습니다.", "The TOTP has been added successfully": "TOTP가 성공적으로 추가되었습니다", - "The TOTP has been copied to clipboard": "The TOTP has been copied to clipboard", + "The TOTP has been copied to clipboard": "Totp가 클립보드에 복사되었습니다", "The TOTP has been updated successfully": "TOTP가 성공적으로 업데이트되었습니다", - "The TOTP is empty and cannot be copied to clipboard.": "The TOTP is empty and cannot be copied to clipboard.", - "The TOTP is empty and cannot be previewed.": "The TOTP is empty and cannot be previewed.", + "The TOTP is empty and cannot be copied to clipboard.": "Totp가 비어 있으므로 클립보드에 복사할 수 없습니다.", + "The TOTP is empty and cannot be previewed.": "TOTP가 비어 있으므로 미리 볼 수 없습니다.", "The transfer was cancelled because the other client returned an error.": "다른 클라이언트가 오류를 반환했기 때문에 전송이 취소되었습니다.", "The uri has been copied to clipboard": "uri가 클립보드에 복사되었습니다.", "The URL to provide to Azure when registering the application.": "애플리케이션 등록 시 Azure에 제공할 URL.", @@ -1213,7 +1213,7 @@ "When a group is deleted, notify the users who were members of it.": "그룹이 삭제되면 그룹의 구성원인 사용자에게 알립니다.", "When a password is created, notify its creator.": "암호가 생성되면 만든 사람에게 알립니다.", "When a password is deleted, notify the users who had access to it.": "암호가 삭제되면 암호에 대한 접근 권한을 가진 사용자에게 알립니다.", - "When a password is expired, notify the owners to change it.": "When a password is expired, notify the owners to change it.", + "When a password is expired, notify the owners to change it.": "암호가 만료되면 소유자에게 암호를 변경하도록 알립니다.", "When a password is shared, notify the users who gain access to it.": "암호가 공유되면 암호에 대한 접근 권한을 얻은 사용자에게 알립니다.", "When a password is updated, notify the users who have access to it.": "암호가 업데이트되면 암호에 대한 접근 권한을 가진 사용자에게 알립니다.", "When a user aborted a recover, notify all the administrators.": "사용자가 복구를 중단하면 모든 관리자에게 알립니다.", @@ -1226,7 +1226,7 @@ "When an account recovery policy is updated, notify all the administrators.": "계정 복구 정책이 업데이트되면 모든 관리자에게 알립니다.", "When an administrator answered to an account recovery request, notify all the administrators.": "관리자가 계정 복구 요청에 응답하면 모든 관리자에게 알립니다.", "When an administrator answered to an account recovery request, notify the administrator at the origin of the action.": "관리자가 계정 복구 요청에 응답하면, 작업의 출처를 관리자에게 알립니다.", - "When group managers are requested to add users to a group, notify them.": "When group managers are requested to add users to a group, notify them.", + "When group managers are requested to add users to a group, notify them.": "그룹 관리자에게 사용자를 그룹에 추가하도록 요청하면 이를 알립니다.", "When members of a group change, notify the group manager(s).": "그룹의 구성원이 변경되면 그룹 관리자에게 알립니다.", "When new users are invited to passbolt, notify them.": "새 사용자가 패스볼트에 초대되면 사용자에게 알립니다.", "When user roles change in a group, notify the corresponding users.": "그룹에서 사용자 역할이 변경되면 해당 사용자에게 알립니다.", @@ -1318,11 +1318,11 @@ "{{count}} user will be synchronized._other": "사용자 {{count}} 명이 동기화될 것입니다.", "<0>{{numberFolderSuccess}} out of {{count}} folder has been imported._other": "<0>{count} 개의 폴더 중 {numberFolderSuccess} 를 가져왔습니다.", "<0>{{numberResourceSuccess}} out of {{count}} password has been imported._other": "<0>{{count}} 개의 암호 중 {{numberResourceSuccess}} 를 가져왔습니다.", - "Delete resource?_other": "Delete resources?", - "Set an expiry date_other": "Set expiry dates", - "The expiry date of the selected resource has been updated._other": "The expiry dates of the selected resources have been updated.", - "The resource has been deleted successfully._other": "The resources have been deleted successfully.", - "The resource has been marked as expired._other": "The resources have been marked as expired.", - "This resource does not need an expiry date._other": "These resources do not need an expiry date.", - "Unable to mark the resource as expired._other": "Unable to mark the resources as expired." + "Delete resource?_other": "리소스 삭제?", + "Set an expiry date_other": "만료일 설정", + "The expiry date of the selected resource has been updated._other": "선택한 리소스의 만료일이 업데이트되었습니다.", + "The resource has been deleted successfully._other": "리소스가 성공적으로 삭제되었습니다.", + "The resource has been marked as expired._other": "리소스가 만료된 것으로 표시되었습니다.", + "This resource does not need an expiry date._other": "이 리소스는 만료일이 필요하지 않습니다.", + "Unable to mark the resource as expired._other": "리소스를 만료된 것으로 표시할 수 없습니다." } \ No newline at end of file diff --git a/webroot/locales/nl-NL/common.json b/webroot/locales/nl-NL/common.json index 3e85c54e46..4ee50c827b 100644 --- a/webroot/locales/nl-NL/common.json +++ b/webroot/locales/nl-NL/common.json @@ -7,7 +7,7 @@ "(tag)": "(label)", "{column.label}": "{column.label}", "{errors.get(key)}": "{errors.get(key)}", - "{this.creatorName} did not initiate this request.": "{this.creatorName} did not initiate this request.", + "{this.creatorName} did not initiate this request.": "{this.creatorName} heeft dit verzoek niet geïnitieerd.", "{this.state.warnings.get(key)}": "{this.state.warnings.get(key)}", "@your-domain.com": "@jouw-domein.com", "<0>{{activityCreatorName}} accepted the account recovery policy": "<0>{{activityCreatorName}} heeft het herstelbeleid voor het account geaccepteerd", diff --git a/webroot/locales/ru-RU/common.json b/webroot/locales/ru-RU/common.json index da5ffbc37e..00e0628cd1 100644 --- a/webroot/locales/ru-RU/common.json +++ b/webroot/locales/ru-RU/common.json @@ -524,7 +524,7 @@ "Make sure your print it or store it in a safe place. You may need it later!": "Убедитесь, что это ваш принт и храните его в надежном месте. Вам может понадобиться позже!", "Manage Subscription": "Управление подпиской", "Mandatory": "Обязательный", - "Mark as expired": "Mark as expired", + "Mark as expired": "Пометить как истёкший", "Member": "Участник", "Members": "Участники", "Metadata": "Метадата", @@ -562,7 +562,7 @@ "New Organization Recovery Key": "Новый ключ восстановления организации", "new owner": "новый владелец", "New password": "Новый пароль", - "New TOTP": "New TOTP", + "New TOTP": "Новый TOTP", "New user": "Новый пользователь", "Next": "Следующий", "No": "Нет", @@ -814,7 +814,7 @@ "Server response is empty.": "Ответ сервера пуст.", "Server url": "URL сервера", "Session Expired": "Сессия истекла", - "Set expiry date": "Set expiry date", + "Set expiry date": "Установить срок действия", "Set the date automatically:": "Set the date automatically:", "Set the date manually:": "Set the date manually:", "Settings": "Настройки", @@ -1213,7 +1213,7 @@ "When a group is deleted, notify the users who were members of it.": "При удалении группы уведомлять пользователей, которые являлись ее членами.", "When a password is created, notify its creator.": "При создании пароля уведомлять его создателя.", "When a password is deleted, notify the users who had access to it.": "При удалении пароля уведомлять пользователей, имевших к нему доступ.", - "When a password is expired, notify the owners to change it.": "When a password is expired, notify the owners to change it.", + "When a password is expired, notify the owners to change it.": "Уведомить владельцев о необходимости смены пароля с истёкшим сроком действия.", "When a password is shared, notify the users who gain access to it.": "При введении общего доступа к паролю уведомлять пользователей, получающих доступ.", "When a password is updated, notify the users who have access to it.": "При обновлении пароля уведомлять пользователей, имеющих к нему доступ.", "When a user aborted a recover, notify all the administrators.": "При прерывании восстановления пользователем уведомлять всех администраторов.", @@ -1361,18 +1361,18 @@ "Delete resource?_few": "Delete resources?", "Delete resource?_many": "Delete resources?", "Delete resource?_other": "Delete resources?", - "Set an expiry date_one": "Set an expiry date", - "Set an expiry date_few": "Set expiry dates", - "Set an expiry date_many": "Set expiry dates", - "Set an expiry date_other": "Set expiry dates", + "Set an expiry date_one": "Установить срок действия", + "Set an expiry date_few": "Установить сроки действия", + "Set an expiry date_many": "Установить сроки действия", + "Set an expiry date_other": "Установить сроки действия", "The expiry date of the selected resource has been updated._one": "The expiry date of the selected resource has been updated.", "The expiry date of the selected resource has been updated._few": "The expiry dates of the selected resources have been updated.", "The expiry date of the selected resource has been updated._many": "The expiry dates of the selected resources have been updated.", "The expiry date of the selected resource has been updated._other": "The expiry dates of the selected resources have been updated.", "The resource has been deleted successfully._one": "Ресурс успешно удален.", - "The resource has been deleted successfully._few": "The resources have been deleted successfully.", - "The resource has been deleted successfully._many": "The resources have been deleted successfully.", - "The resource has been deleted successfully._other": "The resources have been deleted successfully.", + "The resource has been deleted successfully._few": "Ресурсы успешно удалены.", + "The resource has been deleted successfully._many": "Ресурсы успешно удалены.", + "The resource has been deleted successfully._other": "Ресурсы успешно удалены.", "The resource has been marked as expired._one": "The resource has been marked as expired.", "The resource has been marked as expired._few": "The resources have been marked as expired.", "The resource has been marked as expired._many": "The resources have been marked as expired.", From 8b9935561dbf7ca35b2931876b1d93f809b02a3f Mon Sep 17 00:00:00 2001 From: Ishan Vyas Date: Tue, 13 Feb 2024 10:53:16 +0530 Subject: [PATCH 10/27] PB-29763 Externalize string to translate --- resources/locales/en_UK/default.po | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/locales/en_UK/default.po b/resources/locales/en_UK/default.po index fbacce3bc5..e993714668 100644 --- a/resources/locales/en_UK/default.po +++ b/resources/locales/en_UK/default.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" "PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" "Last-Translator: NAME \n" "Language-Team: LANGUAGE \n" @@ -1895,6 +1895,9 @@ msgstr "" msgid "This is not a valid {0}." msgstr "" +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From cde85f273676675fa1c32a87728b53a259c1eee4 Mon Sep 17 00:00:00 2001 From: Ishan Vyas Date: Tue, 13 Feb 2024 10:56:26 +0530 Subject: [PATCH 11/27] PB-29763 Prepare release for 4.5.2-test.1 --- CHANGELOG.md | 17 +++++++++++++++++ config/version.php | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cd07e8fd7..d8f81b22f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [4.5.2-test.1] - 2024-02-13 +### Fixed +- PB-29621 As a user I should get a 400 if the locale passed in the URL is not a string +- PB-28867 Fix folder serialization performance + +### Improved +- PB-28635 As a user I want to use one single command to send emails + +### Security +- PB-29680 Bump dependency composer/composer to v2.7.0 + +### Maintenance +- PB-29109 Support PHP 8.3 for passbolt API +- PB-29376 GITHUB-506 Bump dependency duosecurity/duo_universal_php to 1.0.2 (#506) +- PB-29514 Fix password expiry test which randomly fails +- PB-29625 Fix CI to support latest composer dependency version + ## [4.5.0] - 2024-02-08 ### Added - PB-23913 As a user I can see my passwords marked as expired when users lose permissions on these diff --git a/config/version.php b/config/version.php index 848bc98ce6..d23e1f513e 100644 --- a/config/version.php +++ b/config/version.php @@ -1,8 +1,8 @@ [ - 'version' => '4.5.0', - 'name' => 'Summer is ending', + 'version' => '4.5.2-test.1', + 'name' => 'TBD', ], 'php' => [ 'minVersion' => '7.4', From d2820a3d4294db9e387ae4bd559f6319c0dadd68 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:45 +0000 Subject: [PATCH 12/27] New translations default.po (Romanian) [skip-ci] --- resources/locales/ro_RO/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/ro_RO/default.po b/resources/locales/ro_RO/default.po index 45a0e88134..be843db15d 100644 --- a/resources/locales/ro_RO/default.po +++ b/resources/locales/ro_RO/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Acesta nu este un locale valid." msgid "This is not a valid {0}." msgstr "Acesta nu este un {0} valid." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From 0d23035e962f4e73f3a5c81055246d216e7210a2 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:47 +0000 Subject: [PATCH 13/27] New translations default.po (French) [skip-ci] --- resources/locales/fr_FR/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/fr_FR/default.po b/resources/locales/fr_FR/default.po index baf7d4c021..90dea74aaf 100644 --- a/resources/locales/fr_FR/default.po +++ b/resources/locales/fr_FR/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-02-01 10:14\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: French\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Ce n'est pas une locale valide." msgid "This is not a valid {0}." msgstr "Ce n'est pas un {0} valide." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "La stratégie devrait étendre la classe : {0}" From aadcd3a3bd23e705730e1c3eb70a9d986673d733 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:50 +0000 Subject: [PATCH 14/27] New translations default.po (Spanish) [skip-ci] --- resources/locales/es_ES/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/es_ES/default.po b/resources/locales/es_ES/default.po index fbb832b3d0..7dd3a1a05f 100644 --- a/resources/locales/es_ES/default.po +++ b/resources/locales/es_ES/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-02-01 16:24\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Esta no es una configuración regional válida." msgid "This is not a valid {0}." msgstr "Esto no es válido {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "La estrategia debe extender la clase: {0}" From 853676438b087dc894f1f9e41b415b7941134c0c Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:52 +0000 Subject: [PATCH 15/27] New translations default.po (German) [skip-ci] --- resources/locales/de_DE/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/de_DE/default.po b/resources/locales/de_DE/default.po index 0c0d32dfd5..3db4294fe0 100644 --- a/resources/locales/de_DE/default.po +++ b/resources/locales/de_DE/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-31 11:15\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: German\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Dies ist kein gültiges Locale." msgid "This is not a valid {0}." msgstr "Dies ist kein gültiger {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "Die Strategie sollte die folgende Klasse erweitern: {0}" From f2e48589fc7f5d3de8a80c417699742b3a1d1930 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:54 +0000 Subject: [PATCH 16/27] New translations default.po (Italian) [skip-ci] --- resources/locales/it_IT/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/it_IT/default.po b/resources/locales/it_IT/default.po index 7383331a31..89fa94d5d7 100644 --- a/resources/locales/it_IT/default.po +++ b/resources/locales/it_IT/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: Italian\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Questa non è una lingua valida." msgid "This is not a valid {0}." msgstr "Questo non è valido {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "La strategia dovrebbe estendere la classe: {0}" From 093616655a9fa8f0125993f4e0c98ac42f2123f4 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:55:57 +0000 Subject: [PATCH 17/27] New translations default.po (Japanese) [skip-ci] --- resources/locales/ja_JP/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/ja_JP/default.po b/resources/locales/ja_JP/default.po index b3a61211f5..1af5d30b5e 100644 --- a/resources/locales/ja_JP/default.po +++ b/resources/locales/ja_JP/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "これは有効なロケールではありません。" msgid "This is not a valid {0}." msgstr "これは有効な {0} ではありません。" +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From 6256be2a7badea89cf97ca0cada97dc2529612a7 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:00 +0000 Subject: [PATCH 18/27] New translations default.po (Korean) [skip-ci] --- resources/locales/ko_KR/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/ko_KR/default.po b/resources/locales/ko_KR/default.po index 0adbac7801..f5ede1932e 100644 --- a/resources/locales/ko_KR/default.po +++ b/resources/locales/ko_KR/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-02-01 06:16\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:55\n" "Last-Translator: NAME \n" "Language-Team: Korean\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "올바르지 않은 로케일입니다." msgid "This is not a valid {0}." msgstr "올바른 {0} 이(가) 아닙니다." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "방법은 다음 클래스를 확장해야 합니다. {0}" From f80ac99608f87e3ed4e72a4033cdf610a00456da Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:02 +0000 Subject: [PATCH 19/27] New translations default.po (Lithuanian) [skip-ci] --- resources/locales/lt_LT/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/lt_LT/default.po b/resources/locales/lt_LT/default.po index fa3c377cd8..7bde4eeaaf 100644 --- a/resources/locales/lt_LT/default.po +++ b/resources/locales/lt_LT/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Lithuanian\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Tai netinkama lokalė." msgid "This is not a valid {0}." msgstr "Tai negalioja {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From d804eeccf643f0d92a5e47452eefb8c79aff19dc Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:04 +0000 Subject: [PATCH 20/27] New translations default.po (Dutch) [skip-ci] --- resources/locales/nl_NL/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/nl_NL/default.po b/resources/locales/nl_NL/default.po index 055baee402..50e5dba3d1 100644 --- a/resources/locales/nl_NL/default.po +++ b/resources/locales/nl_NL/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Dutch\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Dit is geen geldige locatie." msgid "This is not a valid {0}." msgstr "Dit is geen geldig(e) {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From b418c5088cf585391fdfbf49f3790ae0eea56c29 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:06 +0000 Subject: [PATCH 21/27] New translations default.po (Polish) [skip-ci] --- resources/locales/pl_PL/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/pl_PL/default.po b/resources/locales/pl_PL/default.po index f02255575a..ab98af4f4f 100644 --- a/resources/locales/pl_PL/default.po +++ b/resources/locales/pl_PL/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Polish\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "To nie jest prawidłowe ustawienie regionalne." msgid "This is not a valid {0}." msgstr "To nie jest prawidłowe {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "Strategia powinna rozszerzyć klasę: {0}" From f9ba40241e7a495aba981b3be8454c51cc20c2a0 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:09 +0000 Subject: [PATCH 22/27] New translations default.po (Swedish) [skip-ci] --- resources/locales/sv_SE/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/sv_SE/default.po b/resources/locales/sv_SE/default.po index cbeb406251..a5681615c2 100644 --- a/resources/locales/sv_SE/default.po +++ b/resources/locales/sv_SE/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Swedish\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Detta är inte ett giltigt språk." msgid "This is not a valid {0}." msgstr "Detta är inte en giltig {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "" From 334a4a4a2d8119f2d0acf9f8fa8defd52f92032e Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:11 +0000 Subject: [PATCH 23/27] New translations default.po (Portuguese, Brazilian) [skip-ci] --- resources/locales/pt_BR/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/pt_BR/default.po b/resources/locales/pt_BR/default.po index e1e484d9fa..03c7583d20 100644 --- a/resources/locales/pt_BR/default.po +++ b/resources/locales/pt_BR/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-01-30 07:46\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Portuguese, Brazilian\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Este não é um idioma válido." msgid "This is not a valid {0}." msgstr "Este não é um {0} válido." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "A estratégia deve estender a classe {0}" From 70020b9ae047e7c52f7f5e4327d2ca085face975 Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 05:56:15 +0000 Subject: [PATCH 24/27] New translations default.po (Russian) [skip-ci] --- resources/locales/ru_RU/default.po | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/resources/locales/ru_RU/default.po b/resources/locales/ru_RU/default.po index e36de9376c..fa90d3eb5d 100644 --- a/resources/locales/ru_RU/default.po +++ b/resources/locales/ru_RU/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" -"POT-Creation-Date: 2024-01-30 05:39+0000\n" -"PO-Revision-Date: 2024-02-07 10:18\n" +"POT-Creation-Date: 2024-02-13 05:22+0000\n" +"PO-Revision-Date: 2024-02-13 05:56\n" "Last-Translator: NAME \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" @@ -1897,6 +1897,9 @@ msgstr "Это недопустимая локаль." msgid "This is not a valid {0}." msgstr "Это недопустимый {0}." +msgid "The locale should be a string." +msgstr "" + msgid "The strategy should extend the class: {0}" msgstr "Стратегия должна расширить класс: {0}" From ac249863f77e470f5fcdc17f448a3fdc576aa01f Mon Sep 17 00:00:00 2001 From: Crowdin Date: Tue, 13 Feb 2024 07:55:26 +0000 Subject: [PATCH 25/27] New translations default.po (Spanish) [skip-ci] --- resources/locales/es_ES/default.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/locales/es_ES/default.po b/resources/locales/es_ES/default.po index 7dd3a1a05f..6e53b4aec8 100644 --- a/resources/locales/es_ES/default.po +++ b/resources/locales/es_ES/default.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" "POT-Creation-Date: 2024-02-13 05:22+0000\n" -"PO-Revision-Date: 2024-02-13 05:55\n" +"PO-Revision-Date: 2024-02-13 07:55\n" "Last-Translator: NAME \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" @@ -1898,7 +1898,7 @@ msgid "This is not a valid {0}." msgstr "Esto no es válido {0}." msgid "The locale should be a string." -msgstr "" +msgstr "El idioma debe ser una cadena." msgid "The strategy should extend the class: {0}" msgstr "La estrategia debe extender la clase: {0}" From abc4430349e00ada65b907728b6c6e8b87c85780 Mon Sep 17 00:00:00 2001 From: Juan Pablo Ramirez Date: Tue, 13 Feb 2024 15:27:35 +0100 Subject: [PATCH 26/27] PB-29787 v4.5.2 on CE --- CHANGELOG.md | 17 ++++++++++++++ RELEASE_NOTES.md | 57 ++++++++++++++-------------------------------- config/version.php | 4 ++-- 3 files changed, 36 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8f81b22f7..9502e9e657 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [4.5.2] - 2024-02-14 +### Fixed +- PB-29621 As a user I should get a 400 if the locale passed in the URL is not a string +- PB-28867 As a user I should see an improved performance when requesting the folder index endpoint + +### Improved +- PB-28635 As an administrator I can disable the email digest without having to change the command sending the emails + +### Security +- PB-29680 Bump dependency composer/composer to v2.7.0 + +### Maintenance +- PB-29109 Support PHP 8.3 for passbolt API +- PB-29376 GITHUB-506 Bump dependency duosecurity/duo_universal_php to 1.0.2 (#506) +- PB-29514 Fix password expiry test which randomly fails +- PB-29625 Fix CI to support latest composer dependency version + ## [4.5.2-test.1] - 2024-02-13 ### Fixed - PB-29621 As a user I should get a 400 if the locale passed in the URL is not a string diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 667e827bd0..34bf0214af 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,52 +1,29 @@ -Release song: https://www.youtube.com/watch?v=HR1KH4zElcY +Release song: https://youtu.be/53YYph6Edd0 -Passbolt v4.5.0 named "Summer is Ending" brings a host of new features and improvements, all designed to make your password management experience more secure, efficient, and user-friendly. +Passbolt is pleased to announce the immediate availability of version 4.5.2. This is a maintenance update that contains important fixes for both the API and browser extension, addressing issues reported by the community since version 4.5.0. -At the heart of this release is the introduction of the Password Expiry feature, a much-anticipated functionality that allows administrators to enable the automatic expiry policy, enhancing security by ensuring that potentially passwords are rotated when someone loses access to resources, for example by leaving a group or the organization. +Most notably this update fixes a problem that previously prevented the autofill feature from working with certain web applications. -Alongside, we're excited to introduce the Russian translation, making Passbolt more accessible to a wider audience. +Additionally, the release improves the process for importing TOTPs from kdbx files on Windows, ensuring better support for TOTPs across various Keepass clients, including Keepass, KeepassXC, and Macpass. -We've also expanded our SMTP settings to include Microsoft 365 and Outlook providers, responding to the community's feedback for more integration options. The section to help users install and configure the Windows desktop application feature is also now enabled by default. +Administrators would also be pleased to be able to host the API using PHP 8.3. While PHP 7.4 and PHP 8.0 are still supported on some distributions such as Debian, they will be discontinued soon and administrators are encouraged to upgrade to PHP 8.1 or higher and use the latest version of the passbolt API. -Improvements in the performance of some important API endpoints and other security enhancements and bug fixes are also part of this release. +We would like to express our sincere thanks to the community members who brought issues to our attention and helped the team to make passbolt better. -Thanks to everyone in our community for your ongoing support and contributions that made this release possible. Your feedback and involvement continue to shape Passbolt, enhancing our collective security and usability. Together, we're making password management better for everyone. - -## [4.5.0] - 2024-02-08 -### Added -- PB-23913 As a user I can see my passwords marked as expired when users lose permissions on these -- PB-23913 As an administrator I can activate the password expiry feature -- PB-28923 As a user I want to be able to use passbolt in Russian -- PB-21484 As an administrator I can define Microsoft 365 and Outlook providers in SMTP settings -- PB-19652 As an administrator I can cleanup groups with no members with the cleanup command -- PB-27707 As administrator, with RBAC I should be able to set “can see users workspace” to “Allow if group manager” -- PB-28716 Desktop application flag is now enabled by default -- PB-26203 Desktop app define the account kit exportation help page +## [4.5.2] - 2024-02-14 +### Fixed +- PB-29621 As a user I should get a 400 if the locale passed in the URL is not a string +- PB-29526 As an administrator I should be notified of group removal when the operation is performed by a users directory synchronization +- PB-28867 As a user I should see an improved performance when requesting the folder index endpoint ### Improved -- PB-27616 Improve resources serialization performance on GET resources.json +- PB-28635 As an administrator I can disable the email digest without having to change the command sending the emails ### Security -- PB-29148 Bump selenium API plugin version to v4.5 -- PB-29005 Upgrades phpseclib/phpseclib to fix composer audit security vulnerability -- PB-22336 As an admin I should be able to enable/disable request group managers to add users to groups emails separately (LDAP/AD) -- PB-28871 Mitigate supply chain attack on PR and lint lock files -- PB-28658 Mitigate supply chain attack on post npm install script - -### Fixed -- PB-29200 Fixes the recover_user command (GITHUB #504) -- PB-29164 Fix recent InstallCommand changes breaking selenium tests -- PB-29132 Fix composer lock file not up-to-date message when installing dependencies -- PB-29160 Fix failing static analysis job in CI -- PB-29137 Fix failing in UsersEditDisableControllerTest file due to purifier -- PB-29113 Fix a typo in the email sent when admins lose their admin role -- PB-28130 Fix invalid cookie name should not trigger a 500 -- PB-29007 Fix constantly failing test in RbacsUpdateControllerTest file -- PB-28991 Fix email queue entries not marked as sent +- PB-29680 Bump dependency composer/composer to v2.7.0 ### Maintenance -- PB-28857 Require phpunit-speedtrap to track down slow tests -- PB-25516 Remove --dev from .gitlab test options, it has not effect and will break with composer v3 -- PB-28844 Improves the methods testing email content -- PB-28845 Skip unauthenticated exception from logging -- PB-28653 Speed-up tests by mocking the client in healthcheck relevant tests +- PB-29109 Support PHP 8.3 for passbolt API +- PB-29376 GITHUB-506 Bump dependency duosecurity/duo_universal_php to 1.0.2 (#506) +- PB-29514 Fix password expiry test which randomly fails +- PB-29625 Fix CI to support latest composer dependency version diff --git a/config/version.php b/config/version.php index d23e1f513e..95f6253433 100644 --- a/config/version.php +++ b/config/version.php @@ -1,8 +1,8 @@ [ - 'version' => '4.5.2-test.1', - 'name' => 'TBD', + 'version' => '4.5.2', + 'name' => 'Marching The Hate Machines', ], 'php' => [ 'minVersion' => '7.4', From d7e8c3ae2e7fe9111db9c4bb3fea2583af5c5a1f Mon Sep 17 00:00:00 2001 From: Crowdin Date: Wed, 14 Feb 2024 00:53:43 +0000 Subject: [PATCH 27/27] New translations default.po (Korean) [skip-ci] --- resources/locales/ko_KR/default.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/locales/ko_KR/default.po b/resources/locales/ko_KR/default.po index f5ede1932e..0d6c181d08 100644 --- a/resources/locales/ko_KR/default.po +++ b/resources/locales/ko_KR/default.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: 41c2572bd9bd4cc908d3e09e0cbed6e5\n" "POT-Creation-Date: 2024-02-13 05:22+0000\n" -"PO-Revision-Date: 2024-02-13 05:55\n" +"PO-Revision-Date: 2024-02-14 00:53\n" "Last-Translator: NAME \n" "Language-Team: Korean\n" "MIME-Version: 1.0\n" @@ -1898,7 +1898,7 @@ msgid "This is not a valid {0}." msgstr "올바른 {0} 이(가) 아닙니다." msgid "The locale should be a string." -msgstr "" +msgstr "로케일은 문자열이어야 합니다." msgid "The strategy should extend the class: {0}" msgstr "방법은 다음 클래스를 확장해야 합니다. {0}"