diff --git a/packages/extension-base/src/background/handlers/Extension.ts b/packages/extension-base/src/background/handlers/Extension.ts index 6a4e6c20..91e1677c 100644 --- a/packages/extension-base/src/background/handlers/Extension.ts +++ b/packages/extension-base/src/background/handlers/Extension.ts @@ -5,6 +5,7 @@ import { MetadataDef } from '@polkadot/extension-inject/types'; import { SubjectInfo } from '@polkadot/ui-keyring/observable/types'; import { AccountJson, AuthorizeRequest, MessageTypes, MetadataRequest, RequestAccountCreateExternal, RequestAccountCreateSuri, RequestAccountEdit, RequestAccountExport, RequestAccountShow, RequestAccountTie, RequestAccountValidate, RequestAuthorizeApprove, RequestAuthorizeReject, RequestDeriveCreate, ResponseDeriveValidate, RequestMetadataApprove, RequestMetadataReject, RequestSigningApprovePassword, RequestSigningApproveSignature, RequestSigningCancel, RequestSigningIsLocked, RequestSeedCreate, RequestTypes, ResponseAccountExport, RequestAccountForget, ResponseSeedCreate, RequestSeedValidate, RequestDeriveValidate, ResponseSeedValidate, ResponseType, SigningRequest, RequestJsonRestore, ResponseJsonRestore, RequestAccountChangePassword } from '../types'; +import { PASSWORD_EXPIRY_MS } from '@polkadot/extension-base/defaults'; import chrome from '@polkadot/extension-inject/chrome'; import keyring from '@polkadot/ui-keyring'; import accountsObservable from '@polkadot/ui-keyring/observable/accounts'; @@ -20,7 +21,6 @@ type CachedUnlocks = Record; const SEED_DEFAULT_LENGTH = 12; const SEED_LENGTHS = [12, 15, 18, 21, 24]; -const PASSWORD_EXPIRY = 15 * 60 * 1000; // a global registry to use internally const registry = new TypeRegistry(); @@ -311,7 +311,7 @@ export default class Extension { const savedExpiry = this.#cachedUnlocks[request.payload.address] || 0; if (isSavedPass) { - this.#cachedUnlocks[request.payload.address] = now + PASSWORD_EXPIRY; + this.#cachedUnlocks[request.payload.address] = now + PASSWORD_EXPIRY_MS; } else if (savedExpiry < now) { this.#cachedUnlocks[request.payload.address] = 0; pair.lock(); diff --git a/packages/extension-base/src/defaults.ts b/packages/extension-base/src/defaults.ts index 01ed7f00..dc05de6c 100644 --- a/packages/extension-base/src/defaults.ts +++ b/packages/extension-base/src/defaults.ts @@ -3,8 +3,12 @@ const PORT_CONTENT = 'content'; const PORT_EXTENSION = 'extension'; +const PASSWORD_EXPIRY_MIN = 15; +const PASSWORD_EXPIRY_MS = PASSWORD_EXPIRY_MIN * 60 * 1000; export { + PASSWORD_EXPIRY_MIN, + PASSWORD_EXPIRY_MS, PORT_CONTENT, PORT_EXTENSION }; diff --git a/packages/extension-ui/src/Popup/Signing/Request.tsx b/packages/extension-ui/src/Popup/Signing/Request.tsx index 569935f5..f43b7e6f 100644 --- a/packages/extension-ui/src/Popup/Signing/Request.tsx +++ b/packages/extension-ui/src/Popup/Signing/Request.tsx @@ -6,6 +6,7 @@ import { AccountJson, RequestSign } from '@polkadot/extension-base/background/ty import { SignerPayloadJSON, SignerPayloadRaw } from '@polkadot/types/types'; import React, { useCallback, useContext, useState, useEffect } from 'react'; +import { PASSWORD_EXPIRY_MIN } from '@polkadot/extension-base/defaults'; import { TypeRegistry } from '@polkadot/types'; import { ActionBar, ActionContext, Address, Button, ButtonArea, Checkbox, Link, VerticalSpace } from '../../components'; @@ -114,7 +115,7 @@ export default function Request ({ account: { isExternal }, buttonText, isFirst, [onAction, signId] ); - const signButton = isLocked + const SignButton = () => isLocked ? ( ("Don't ask me again for the next 15 minutes")} + label={t( + "Don't ask me again for the next {{expiration}} minutes", + { replace: { expiration: PASSWORD_EXPIRY_MIN } } + )} onChange={setIsSavedPass} /> @@ -167,7 +171,7 @@ export default function Request ({ account: { isExternal }, buttonText, isFirst, ) } - {isFirst && !isExternal && signButton} + {isFirst && !isExternal && } - {!isExternal && signButton} + {!isExternal && }