Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/honest-pigs-move.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised`
5 changes: 5 additions & 0 deletions .changeset/moody-dryers-serve.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in`
6 changes: 6 additions & 0 deletions .changeset/some-phones-report.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': patch
'@clerk/shared': patch
---

Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError`
6 changes: 3 additions & 3 deletions integration/testUtils/usersService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -76,7 +76,7 @@ export type UserService = {
createFakeOrganization: (userId: string) => Promise<FakeOrganization>;
getUser: (opts: { id?: string; email?: string }) => Promise<User | undefined>;
createFakeAPIKey: (userId: string) => Promise<FakeAPIKey>;
passwordUntrusted: (userId: string) => Promise<void>;
passwordCompromised: (userId: string) => Promise<void>;
};

/**
Expand DownExpand Up@@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => {
revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }),
} satisfies FakeAPIKey;
},
passwordUntrusted: async (userId: string) => {
await clerkClient.users.__experimental_passwordUntrusted(userId);
passwordCompromised: async (userId: string) => {
await clerkClient.users.__experimental_passwordCompromised(userId);
},
};

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);

// Performs sign-in
await u.po.signIn.goTo();
Expand DownExpand Up@@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword
const user = u.services.users.createFakeUser();
const createdUser = await u.services.users.createBapiUser(user);

await u.services.users.passwordUntrusted(createdUser.id);
await u.services.users.passwordCompromised(createdUser.id);
const fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.organizations.createBapiOrganization({
name: fakeOrganization.name,
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/endpoints/UserApi.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI {
});
}

public async __experimental_passwordUntrusted(userId: string) {
public async __experimental_passwordCompromised(userId: string) {
this.requireId(userId);
return this.request<User>({
method: 'POST',
path: joinPaths(basePath, userId, 'password_untrusted'),
path: joinPaths(basePath, userId, 'password_compromised'),
bodyParams: {
revokeAllSessions: false,
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons';
import { useResetPasswordFactor } from './useResetPasswordFactor';
import { withHavingTrouble } from './withHavingTrouble';

export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default';
export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default';

export type AlternativeMethodsProps = {
onBackLinkClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => {
<Card.Content>
<Header.Root showLogo>
<Header.Title localizationKey={cardTitleKey} />
{!isReset && mode !== 'passwordUntrusted' && (
{!isReset && mode !== 'passwordCompromised' && (
<Header.Subtitle localizationKey={localizationKeys('signIn.alternativeMethods.subtitle')} />
)}
</Header.Root>
Expand DownExpand Up@@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) {
return 'forgotPasswordMethods';
case 'pwned':
return 'passwordPwnedMethods';
case 'passwordUntrusted':
return 'passwordUntrustedMethods';
case 'passwordCompromised':
return 'passwordCompromisedMethods';
default:
return 'alternativeMethods';
}
Expand All@@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey {
return localizationKeys('signIn.forgotPasswordAlternativeMethods.title');
case 'pwned':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordUntrusted':
return localizationKeys('signIn.passwordPwned.title');
case 'passwordCompromised':
return localizationKeys('signIn.passwordCompromised.title');
default:
return localizationKeys('signIn.alternativeMethods.title');
}
Expand All@@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean {
case 'forgot':
case 'pwned':
return true;
case 'passwordUntrusted':
case 'passwordCompromised':
return false;
default:
return false;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ function determineAlternativeMethodsMode(
return 'pwned';
}

if (passwordErrorCode === 'untrusted') {
return 'passwordUntrusted';
if (passwordErrorCode === 'compromised') {
return 'passwordCompromised';
}

return 'forgot';
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error';
import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error';
import { useClerk } from '@clerk/shared/react';
import React from 'react';

Expand All@@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext';
import { HavingTrouble } from './HavingTrouble';
import { useResetPasswordFactor } from './useResetPasswordFactor';

export type PasswordErrorCode = 'untrusted' | 'pwned';
export type PasswordErrorCode = 'compromised' | 'pwned';

type SignInFactorOnePasswordProps = {
onForgotPasswordMethodClick: React.MouseEventHandler | undefined;
Expand DownExpand Up@@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps)
return;
}

if (isPasswordUntrustedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' });
onPasswordError('untrusted');
if (isPasswordCompromisedError(err)) {
card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' });
onPasswordError('compromised');
return;
}
}
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -353,7 +353,7 @@ describe('SignInFactorOne', () => {
).not.toBeInTheDocument();
});

it('using an untrusted password should show the untrusted password screen', async () => {
it('using an compromised password should show the compromised password screen', async () => {
Comment thread
octoper marked this conversation as resolved.
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -367,7 +367,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand All@@ -393,7 +393,7 @@ describe('SignInFactorOne', () => {
await screen.findByText('Email code to hello@clerk.com');
});

it('Prompts the user to use a different method if the password is untrusted', async () => {
it('Prompts the user to use a different method if the password is compromised', async () => {
const { wrapper, fixtures } = await createFixtures(f => {
f.withEmailAddress();
f.withPassword();
Expand All@@ -408,7 +408,7 @@ describe('SignInFactorOne', () => {
fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource));

const errJSON = {
code: 'form_password_untrusted',
code: 'form_password_compromised',
long_message:
"Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.",
message:
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/elements/contexts/index.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -120,7 +120,7 @@ export type FlowMetadata = {
| 'alternativeMethods'
| 'forgotPasswordMethods'
| 'passwordPwnedMethods'
| 'passwordUntrustedMethods'
| 'passwordCompromisedMethods'
| 'havingTrouble'
| 'ssoCallback'
| 'popupCallback'
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -690,6 +690,9 @@ export const arSA: LocalizationResource = {
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'ادخل كلمة المرور',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'كلمة المرور غير آمنة',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const beBY: LocalizationResource = {
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увядзіце пароль',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Пароль быў узламаны',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = {
subtitle: 'Въведете паролата, свързана с вашия акаунт',
title: 'Въведете вашата парола',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = {
subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন',
title: 'আপনার পাসওয়ার্ড লিখুন',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'পাসওয়ার্ড সমঝোতা হয়েছে',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -693,6 +693,9 @@ export const caES: LocalizationResource = {
subtitle: 'Introdueix la contrasenya associada al teu compte',
title: 'Introdueix la teva contrasenya',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = {
subtitle: 'Zadejte heslo spojené s vaším účtem',
title: 'Zadejte své heslo',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Heslo kompromitováno',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -692,6 +692,9 @@ export const daDK: LocalizationResource = {
subtitle: 'Fortsæt til {{applicationName}}',
title: 'Indtast din adgangskode',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Sikkerhedsadvarsel',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -706,6 +706,9 @@ export const deDE: LocalizationResource = {
subtitle: 'weiter zu {{applicationName}}',
title: 'Geben Sie Ihr Passwort ein',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Passwort kompromittiert',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const elGR: LocalizationResource = {
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Εισαγωγή κωδικού πρόσβασης',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Παραβιασμένος κωδικός',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const enGB: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Password compromised',
},
Expand Down
5 changes: 4 additions & 1 deletion packages/localizations/src/en-US.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -691,11 +691,14 @@ export const enUS: LocalizationResource = {
subtitle: 'Enter the password associated with your account',
title: 'Enter your password',
},
passwordCompromised: {
title: 'Password compromised',
},
passwordPwned: {
title: 'Password compromised',
},
passwordUntrusted: {
title: 'Password compromised',
title: 'Password untrusted',
},
phoneCode: {
formTitle: 'Verification code',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -698,6 +698,9 @@ export const esCR: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const esES: LocalizationResource = {
subtitle: 'para continuar a {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Tu contraseña ha sido comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-MX.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -699,6 +699,9 @@ export const esMX: LocalizationResource = {
subtitle: 'para continuar con {{applicationName}}',
title: 'Introduzca su contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña en peligro',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/es-UY.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -697,6 +697,9 @@ export const esUY: LocalizationResource = {
subtitle: 'Ingresá la contraseña asociada a tu cuenta',
title: 'Ingresá tu contraseña',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Contraseña comprometida',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fa-IR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -702,6 +702,9 @@ export const faIR: LocalizationResource = {
subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید',
title: 'رمز عبور خود را وارد کنید',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'رمز عبور به خطر افتاده است',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fi-FI.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = {
subtitle: 'Syötä tilisi salasana',
title: 'Syötä salasanasi',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Salasana kompromisoitu',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/fr-FR.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -707,6 +707,9 @@ export const frFR: LocalizationResource = {
subtitle: 'pour continuer vers {{applicationName}}',
title: 'Tapez votre mot de passe',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: 'Mot de passe compromis',
},
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/he-IL.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -685,6 +685,9 @@ export const heIL: LocalizationResource = {
subtitle: 'להמשיך אל {{applicationName}}',
title: 'הכנס את סיסמתך',
},
passwordCompromised: {
title: undefined,
},
passwordPwned: {
title: undefined,
},
Expand Down
Loading
Loading