Fix redirect issue on locked users, improve lockout message

This commit is contained in:
Carlos Monastyrski
2025-09-23 17:36:07 -03:00
parent d681594d25
commit a3391ac7f0
2 changed files with 26 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import { t } from "i18next";
import Error from "@app/components/basic/Error";
import TotpRegistration from "@app/components/mfa/TotpRegistration";
import { createNotification } from "@app/components/notifications";
import SecurityClient from "@app/components/utilities/SecurityClient";
import { Button, Tooltip } from "@app/components/v2";
import { isInfisicalCloud } from "@app/helpers/platform";
@@ -121,6 +122,10 @@ export const Mfa = ({ successCallback, closeMfa, hideLogo, email, method }: Prop
const newTriesLeft = triesLeft - 1;
setTriesLeft(newTriesLeft);
if (newTriesLeft <= 0) {
createNotification({
text: "User is temporary locked due to multiple failed login attempts. Try again after 5 minutes. You can also reset your password now to proceed.",
type: "error"
});
setIsLoading(false);
SecurityClient.setMfaToken("");
SecurityClient.setToken("");
@@ -263,7 +268,7 @@ export const Mfa = ({ successCallback, closeMfa, hideLogo, email, method }: Prop
colorSchema="primary"
variant="outline_bg"
isLoading={isLoading}
isDisabled={!isCodeComplete}
isDisabled={!isCodeComplete || (typeof triesLeft === "number" && triesLeft <= 0)}
>
{String(t("mfa.verify"))}
</Button>

View File

@@ -117,12 +117,28 @@ export const SelectOrganizationSection = () => {
}
}
const { token, isMfaEnabled, mfaMethod } = await selectOrg
.mutateAsync({
let token;
let isMfaEnabled;
let mfaMethod;
try {
const result = await selectOrg.mutateAsync({
organizationId: organization.id,
userAgent: callbackPort ? UserAgentType.CLI : undefined
})
.finally(() => setIsInitialOrgCheckLoading(false));
});
token = result.token;
isMfaEnabled = result.isMfaEnabled;
mfaMethod = result.mfaMethod;
} catch (error: any) {
setIsInitialOrgCheckLoading(false);
if (error?.response?.status === 403) {
await handleLogout();
return;
}
throw error;
} finally {
setIsInitialOrgCheckLoading(false);
}
await router.invalidate();