mirror of
https://github.com/makeplane/plane.git
synced 2026-08-29 10:08:51 +02:00
Bot service accounts (User.is_bot=True, e.g. the WORKSPACE_SEED bot) are internal identities meant to act only through API tokens. Nothing stopped one from being driven through the interactive login flow if its email was known, letting a human assume a service identity. Reject bot accounts at the shared login chokepoint, Adapter.complete_login_or_signup(), right beside the existing deactivated-account check. This covers every interactive provider in one place: email/password, magic code, and all OAuth providers (Google, GitHub, GitLab, Gitea) across both the app and space surfaces. Bot API-token access is left untouched, since that is how bots are meant to operate. Also add a defense-in-depth is_bot guard to InstanceAdminSignInEndpoint, which mints its own admin session outside the chokepoint (a bot is never an InstanceAdmin today, so this is not currently reachable, but it closes the path regardless). Surface the rejection with a new dedicated error code BOT_USER_LOGIN_FORBIDDEN (5017), plumbed into the app and space frontend error helpers as well as the shared @plane/constants and @plane/utils packages (message map + banner-alert list) so any consumer of the shared auth-error handler renders it correctly. The admin path reuses the existing ADMIN_AUTHENTICATION_FAILED code so it discloses no bot-specific error. Add contract regression tests: a bot blocked via password and via magic code, a bot blocked at the admin sign-in endpoint, and a non-bot control that still logs in.
451 lines
16 KiB
TypeScript
451 lines
16 KiB
TypeScript
/**
|
|
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
* See the LICENSE file for details.
|
|
*/
|
|
|
|
import type { ReactNode } from "react";
|
|
import Link from "next/link";
|
|
// plane imports
|
|
import { SUPPORT_EMAIL } from "@plane/constants";
|
|
|
|
export enum EPageTypes {
|
|
PUBLIC = "PUBLIC",
|
|
NON_AUTHENTICATED = "NON_AUTHENTICATED",
|
|
SET_PASSWORD = "SET_PASSWORD",
|
|
ONBOARDING = "ONBOARDING",
|
|
AUTHENTICATED = "AUTHENTICATED",
|
|
}
|
|
|
|
export enum EAuthModes {
|
|
SIGN_IN = "SIGN_IN",
|
|
SIGN_UP = "SIGN_UP",
|
|
}
|
|
|
|
export enum EAuthSteps {
|
|
EMAIL = "EMAIL",
|
|
PASSWORD = "PASSWORD",
|
|
UNIQUE_CODE = "UNIQUE_CODE",
|
|
}
|
|
|
|
export enum EErrorAlertType {
|
|
BANNER_ALERT = "BANNER_ALERT",
|
|
INLINE_FIRST_NAME = "INLINE_FIRST_NAME",
|
|
INLINE_EMAIL = "INLINE_EMAIL",
|
|
INLINE_PASSWORD = "INLINE_PASSWORD",
|
|
INLINE_EMAIL_CODE = "INLINE_EMAIL_CODE",
|
|
}
|
|
|
|
export enum EAuthenticationErrorCodes {
|
|
// Global
|
|
INSTANCE_NOT_CONFIGURED = "5000",
|
|
INVALID_EMAIL = "5005",
|
|
EMAIL_REQUIRED = "5010",
|
|
SIGNUP_DISABLED = "5015",
|
|
MAGIC_LINK_LOGIN_DISABLED = "5016",
|
|
BOT_USER_LOGIN_FORBIDDEN = "5017",
|
|
PASSWORD_LOGIN_DISABLED = "5018",
|
|
USER_ACCOUNT_DEACTIVATED = "5019",
|
|
// Password strength
|
|
INVALID_PASSWORD = "5020",
|
|
PASSWORD_TOO_WEAK = "5021",
|
|
SMTP_NOT_CONFIGURED = "5025",
|
|
// Sign Up
|
|
USER_ALREADY_EXIST = "5030",
|
|
AUTHENTICATION_FAILED_SIGN_UP = "5035",
|
|
REQUIRED_EMAIL_PASSWORD_SIGN_UP = "5040",
|
|
INVALID_EMAIL_SIGN_UP = "5045",
|
|
INVALID_EMAIL_MAGIC_SIGN_UP = "5050",
|
|
MAGIC_SIGN_UP_EMAIL_CODE_REQUIRED = "5055",
|
|
// Sign In
|
|
USER_DOES_NOT_EXIST = "5060",
|
|
AUTHENTICATION_FAILED_SIGN_IN = "5065",
|
|
REQUIRED_EMAIL_PASSWORD_SIGN_IN = "5070",
|
|
INVALID_EMAIL_SIGN_IN = "5075",
|
|
INVALID_EMAIL_MAGIC_SIGN_IN = "5080",
|
|
MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED = "5085",
|
|
// Both Sign in and Sign up for magic
|
|
INVALID_MAGIC_CODE_SIGN_IN = "5090",
|
|
INVALID_MAGIC_CODE_SIGN_UP = "5092",
|
|
EXPIRED_MAGIC_CODE_SIGN_IN = "5095",
|
|
EXPIRED_MAGIC_CODE_SIGN_UP = "5097",
|
|
EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_IN = "5100",
|
|
EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_UP = "5102",
|
|
// Oauth
|
|
OAUTH_NOT_CONFIGURED = "5104",
|
|
GOOGLE_NOT_CONFIGURED = "5105",
|
|
GITHUB_NOT_CONFIGURED = "5110",
|
|
GITLAB_NOT_CONFIGURED = "5111",
|
|
GOOGLE_OAUTH_PROVIDER_ERROR = "5115",
|
|
GITHUB_OAUTH_PROVIDER_ERROR = "5120",
|
|
GITLAB_OAUTH_PROVIDER_ERROR = "5121",
|
|
// Reset Password
|
|
INVALID_PASSWORD_TOKEN = "5125",
|
|
EXPIRED_PASSWORD_TOKEN = "5130",
|
|
// Change password
|
|
INCORRECT_OLD_PASSWORD = "5135",
|
|
MISSING_PASSWORD = "5138",
|
|
INVALID_NEW_PASSWORD = "5140",
|
|
// set password
|
|
PASSWORD_ALREADY_SET = "5145",
|
|
// Admin
|
|
ADMIN_ALREADY_EXIST = "5150",
|
|
REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME = "5155",
|
|
INVALID_ADMIN_EMAIL = "5160",
|
|
INVALID_ADMIN_PASSWORD = "5165",
|
|
REQUIRED_ADMIN_EMAIL_PASSWORD = "5170",
|
|
ADMIN_AUTHENTICATION_FAILED = "5175",
|
|
ADMIN_USER_ALREADY_EXIST = "5180",
|
|
ADMIN_USER_DOES_NOT_EXIST = "5185",
|
|
ADMIN_USER_DEACTIVATED = "5190",
|
|
// Rate limit
|
|
RATE_LIMIT_EXCEEDED = "5900",
|
|
}
|
|
|
|
export type TAuthErrorInfo = {
|
|
type: EErrorAlertType;
|
|
code: EAuthenticationErrorCodes;
|
|
title: string;
|
|
message: ReactNode;
|
|
};
|
|
|
|
// TODO: move all error messages to translation files
|
|
const errorCodeMessages: {
|
|
[key in EAuthenticationErrorCodes]: { title: string; message: (email?: string) => ReactNode };
|
|
} = {
|
|
// global
|
|
[EAuthenticationErrorCodes.INSTANCE_NOT_CONFIGURED]: {
|
|
title: `Instance not configured`,
|
|
message: () => `Instance not configured. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL]: {
|
|
title: `Invalid email`,
|
|
message: () => `Invalid email. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EMAIL_REQUIRED]: {
|
|
title: `Email required`,
|
|
message: () => `Email required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.SIGNUP_DISABLED]: {
|
|
title: `Sign up disabled`,
|
|
message: () => `Sign up disabled. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.MAGIC_LINK_LOGIN_DISABLED]: {
|
|
title: `Magic link login disabled`,
|
|
message: () => `Magic link login disabled. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.PASSWORD_LOGIN_DISABLED]: {
|
|
title: `Password login disabled`,
|
|
message: () => `Password login disabled. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.USER_ACCOUNT_DEACTIVATED]: {
|
|
title: `User account deactivated`,
|
|
message: () => `User account deactivated. Please contact ${SUPPORT_EMAIL ? SUPPORT_EMAIL : "administrator"}.`,
|
|
},
|
|
[EAuthenticationErrorCodes.BOT_USER_LOGIN_FORBIDDEN]: {
|
|
title: `Sign in not allowed`,
|
|
message: () => `This account cannot be used to sign in. Please use a personal account.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_PASSWORD]: {
|
|
title: `Invalid password`,
|
|
message: () => `Invalid password. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.PASSWORD_TOO_WEAK]: {
|
|
title: `Password too weak`,
|
|
message: () => `Please use a stronger password.`,
|
|
},
|
|
[EAuthenticationErrorCodes.SMTP_NOT_CONFIGURED]: {
|
|
title: `SMTP not configured`,
|
|
message: () => `SMTP not configured. Please contact your administrator.`,
|
|
},
|
|
|
|
// sign up
|
|
[EAuthenticationErrorCodes.USER_ALREADY_EXIST]: {
|
|
title: `User already exists`,
|
|
message: (email = undefined) => (
|
|
<div>
|
|
Your account is already registered.
|
|
<Link
|
|
className="font-medium underline underline-offset-4 transition-all hover:font-bold"
|
|
href={`/sign-in${email ? `?email=${encodeURIComponent(email)}` : ``}`}
|
|
>
|
|
Sign In
|
|
</Link>
|
|
now.
|
|
</div>
|
|
),
|
|
},
|
|
[EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_UP]: {
|
|
title: `Email and password required`,
|
|
message: () => `Email and password required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_UP]: {
|
|
title: `Authentication failed`,
|
|
message: () => `Authentication failed. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_UP]: {
|
|
title: `Invalid email`,
|
|
message: () => `Invalid email. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.MAGIC_SIGN_UP_EMAIL_CODE_REQUIRED]: {
|
|
title: `Email and code required`,
|
|
message: () => `Email and code required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_UP]: {
|
|
title: `Invalid email`,
|
|
message: () => `Invalid email. Please try again.`,
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.USER_DOES_NOT_EXIST]: {
|
|
title: `User does not exist`,
|
|
message: (email = undefined) => (
|
|
<div>
|
|
No account found.
|
|
<Link
|
|
className="font-medium underline underline-offset-4 transition-all hover:font-bold"
|
|
href={`/${email ? `?email=${encodeURIComponent(email)}` : ``}`}
|
|
>
|
|
Create one
|
|
</Link>
|
|
to get started.
|
|
</div>
|
|
),
|
|
},
|
|
[EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_IN]: {
|
|
title: `Email and password required`,
|
|
message: () => `Email and password required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_IN]: {
|
|
title: `Authentication failed`,
|
|
message: () => `Authentication failed. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_IN]: {
|
|
title: `Invalid email`,
|
|
message: () => `Invalid email. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED]: {
|
|
title: `Email and code required`,
|
|
message: () => `Email and code required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_IN]: {
|
|
title: `Invalid email`,
|
|
message: () => `Invalid email. Please try again.`,
|
|
},
|
|
|
|
// Both Sign in and Sign up
|
|
[EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_IN]: {
|
|
title: `Authentication failed`,
|
|
message: () => `Invalid magic code. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_UP]: {
|
|
title: `Authentication failed`,
|
|
message: () => `Invalid magic code. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_IN]: {
|
|
title: `Expired magic code`,
|
|
message: () => `Expired magic code. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_UP]: {
|
|
title: `Expired magic code`,
|
|
message: () => `Expired magic code. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_IN]: {
|
|
title: `Expired magic code`,
|
|
message: () => `Expired magic code. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_UP]: {
|
|
title: `Expired magic code`,
|
|
message: () => `Expired magic code. Please try again.`,
|
|
},
|
|
|
|
// Oauth
|
|
[EAuthenticationErrorCodes.OAUTH_NOT_CONFIGURED]: {
|
|
title: `OAuth not configured`,
|
|
message: () => `OAuth not configured. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GOOGLE_NOT_CONFIGURED]: {
|
|
title: `Google not configured`,
|
|
message: () => `Google not configured. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GITHUB_NOT_CONFIGURED]: {
|
|
title: `GitHub not configured`,
|
|
message: () => `GitHub not configured. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GITLAB_NOT_CONFIGURED]: {
|
|
title: `GitLab not configured`,
|
|
message: () => `GitLab not configured. Please contact your administrator.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GOOGLE_OAUTH_PROVIDER_ERROR]: {
|
|
title: `Google OAuth provider error`,
|
|
message: () => `Google OAuth provider error. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GITHUB_OAUTH_PROVIDER_ERROR]: {
|
|
title: `GitHub OAuth provider error`,
|
|
message: () => `GitHub OAuth provider error. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.GITLAB_OAUTH_PROVIDER_ERROR]: {
|
|
title: `GitLab OAuth provider error`,
|
|
message: () => `GitLab OAuth provider error. Please try again.`,
|
|
},
|
|
|
|
// Reset Password
|
|
[EAuthenticationErrorCodes.INVALID_PASSWORD_TOKEN]: {
|
|
title: `Invalid password token`,
|
|
message: () => `Invalid password token.`,
|
|
},
|
|
[EAuthenticationErrorCodes.EXPIRED_PASSWORD_TOKEN]: {
|
|
title: `Expired password token`,
|
|
message: () => `Expired password token. Please try again.`,
|
|
},
|
|
|
|
// Change password
|
|
[EAuthenticationErrorCodes.MISSING_PASSWORD]: {
|
|
title: `Password required`,
|
|
message: () => `Password required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INCORRECT_OLD_PASSWORD]: {
|
|
title: `Incorrect old password`,
|
|
message: () => `Incorrect old password. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_NEW_PASSWORD]: {
|
|
title: `Invalid new password`,
|
|
message: () => `Invalid new password. Please try again.`,
|
|
},
|
|
|
|
// set password
|
|
[EAuthenticationErrorCodes.PASSWORD_ALREADY_SET]: {
|
|
title: `Password already set`,
|
|
message: () => `Password already set. Please try again.`,
|
|
},
|
|
|
|
// admin
|
|
[EAuthenticationErrorCodes.ADMIN_ALREADY_EXIST]: {
|
|
title: `Admin already exists`,
|
|
message: () => `Admin already exists. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME]: {
|
|
title: `Email, password and first name required`,
|
|
message: () => `Email, password and first name required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_ADMIN_EMAIL]: {
|
|
title: `Invalid admin email`,
|
|
message: () => `Invalid admin email. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.INVALID_ADMIN_PASSWORD]: {
|
|
title: `Invalid admin password`,
|
|
message: () => `Invalid admin password. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD]: {
|
|
title: `Email and password required`,
|
|
message: () => `Email and password required. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.ADMIN_AUTHENTICATION_FAILED]: {
|
|
title: `Authentication failed`,
|
|
message: () => `Authentication failed. Please try again.`,
|
|
},
|
|
[EAuthenticationErrorCodes.ADMIN_USER_ALREADY_EXIST]: {
|
|
title: `Admin user already exists`,
|
|
message: () => (
|
|
<div>
|
|
Admin user already exists.
|
|
<Link className="font-medium underline underline-offset-4 transition-all hover:font-bold" href={`/admin`}>
|
|
Sign In
|
|
</Link>
|
|
now.
|
|
</div>
|
|
),
|
|
},
|
|
[EAuthenticationErrorCodes.ADMIN_USER_DOES_NOT_EXIST]: {
|
|
title: `Admin user does not exist`,
|
|
message: () => (
|
|
<div>
|
|
Admin user does not exist.
|
|
<Link className="font-medium underline underline-offset-4 transition-all hover:font-bold" href={`/admin`}>
|
|
Sign In
|
|
</Link>
|
|
now.
|
|
</div>
|
|
),
|
|
},
|
|
[EAuthenticationErrorCodes.ADMIN_USER_DEACTIVATED]: {
|
|
title: `Admin user deactivated`,
|
|
message: () => <div>Your account is deactivated</div>,
|
|
},
|
|
[EAuthenticationErrorCodes.RATE_LIMIT_EXCEEDED]: {
|
|
title: "",
|
|
message: () => `Rate limit exceeded. Please try again later.`,
|
|
},
|
|
};
|
|
|
|
export const authErrorHandler = (errorCode: EAuthenticationErrorCodes, email?: string): TAuthErrorInfo | undefined => {
|
|
const bannerAlertErrorCodes = [
|
|
EAuthenticationErrorCodes.INSTANCE_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.INVALID_EMAIL,
|
|
EAuthenticationErrorCodes.EMAIL_REQUIRED,
|
|
EAuthenticationErrorCodes.SIGNUP_DISABLED,
|
|
EAuthenticationErrorCodes.MAGIC_LINK_LOGIN_DISABLED,
|
|
EAuthenticationErrorCodes.PASSWORD_LOGIN_DISABLED,
|
|
EAuthenticationErrorCodes.BOT_USER_LOGIN_FORBIDDEN,
|
|
EAuthenticationErrorCodes.USER_ACCOUNT_DEACTIVATED,
|
|
EAuthenticationErrorCodes.INVALID_PASSWORD,
|
|
EAuthenticationErrorCodes.SMTP_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.USER_ALREADY_EXIST,
|
|
EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_UP,
|
|
EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_UP,
|
|
EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_UP,
|
|
EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_UP,
|
|
EAuthenticationErrorCodes.MAGIC_SIGN_UP_EMAIL_CODE_REQUIRED,
|
|
EAuthenticationErrorCodes.USER_DOES_NOT_EXIST,
|
|
EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_IN,
|
|
EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_IN,
|
|
EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_IN,
|
|
EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_IN,
|
|
EAuthenticationErrorCodes.MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED,
|
|
EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_IN,
|
|
EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_UP,
|
|
EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_IN,
|
|
EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_UP,
|
|
EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_IN,
|
|
EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_UP,
|
|
EAuthenticationErrorCodes.OAUTH_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.GOOGLE_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.GITHUB_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.GITLAB_NOT_CONFIGURED,
|
|
EAuthenticationErrorCodes.GOOGLE_OAUTH_PROVIDER_ERROR,
|
|
EAuthenticationErrorCodes.GITHUB_OAUTH_PROVIDER_ERROR,
|
|
EAuthenticationErrorCodes.GITLAB_OAUTH_PROVIDER_ERROR,
|
|
EAuthenticationErrorCodes.INVALID_PASSWORD_TOKEN,
|
|
EAuthenticationErrorCodes.EXPIRED_PASSWORD_TOKEN,
|
|
EAuthenticationErrorCodes.INCORRECT_OLD_PASSWORD,
|
|
EAuthenticationErrorCodes.MISSING_PASSWORD,
|
|
EAuthenticationErrorCodes.INVALID_NEW_PASSWORD,
|
|
EAuthenticationErrorCodes.PASSWORD_ALREADY_SET,
|
|
EAuthenticationErrorCodes.ADMIN_ALREADY_EXIST,
|
|
EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME,
|
|
EAuthenticationErrorCodes.INVALID_ADMIN_EMAIL,
|
|
EAuthenticationErrorCodes.INVALID_ADMIN_PASSWORD,
|
|
EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD,
|
|
EAuthenticationErrorCodes.ADMIN_AUTHENTICATION_FAILED,
|
|
EAuthenticationErrorCodes.ADMIN_USER_ALREADY_EXIST,
|
|
EAuthenticationErrorCodes.ADMIN_USER_DOES_NOT_EXIST,
|
|
EAuthenticationErrorCodes.ADMIN_USER_DEACTIVATED,
|
|
EAuthenticationErrorCodes.RATE_LIMIT_EXCEEDED,
|
|
EAuthenticationErrorCodes.PASSWORD_TOO_WEAK,
|
|
];
|
|
|
|
if (bannerAlertErrorCodes.includes(errorCode))
|
|
return {
|
|
type: EErrorAlertType.BANNER_ALERT,
|
|
code: errorCode,
|
|
title: errorCodeMessages[errorCode]?.title || "Error",
|
|
message: errorCodeMessages[errorCode]?.message(email) || "Something went wrong. Please try again.",
|
|
};
|
|
|
|
return undefined;
|
|
};
|
|
|
|
export const passwordErrors = [
|
|
EAuthenticationErrorCodes.PASSWORD_TOO_WEAK,
|
|
EAuthenticationErrorCodes.INVALID_NEW_PASSWORD,
|
|
];
|