/** * 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"; 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 { INSTANCE_NOT_CONFIGURED = "5000", INVALID_EMAIL = "5005", EMAIL_REQUIRED = "5010", SIGNUP_DISABLED = "5015", MAGIC_LINK_LOGIN_DISABLED = "5016", PASSWORD_LOGIN_DISABLED = "5018", USER_ACCOUNT_DEACTIVATED = "5019", INVALID_PASSWORD = "5020", PASSWORD_TOO_WEAK = "5021", SMTP_NOT_CONFIGURED = "5025", 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", 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", 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_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", INVALID_PASSWORD_TOKEN = "5125", EXPIRED_PASSWORD_TOKEN = "5130", INCORRECT_OLD_PASSWORD = "5135", MISSING_PASSWORD = "5138", INVALID_NEW_PASSWORD = "5140", PASSWORD_ALREADY_SET = "5145", 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_EXCEEDED = "5900", } export type TAuthErrorInfo = { type: EErrorAlertType; code: EAuthenticationErrorCodes; title: string; message: ReactNode; }; const authLinkClass = "nodedc-auth-link font-medium"; const errorCodeMessages: { [key in EAuthenticationErrorCodes]: { title: string; message: (email?: string) => ReactNode }; } = { [EAuthenticationErrorCodes.INSTANCE_NOT_CONFIGURED]: { title: "Пространство не настроено", message: () => "Пространство не настроено. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.INVALID_EMAIL]: { title: "Некорректный e-mail", message: () => "Некорректный e-mail. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.EMAIL_REQUIRED]: { title: "Нужен e-mail", message: () => "Укажите e-mail и попробуйте снова.", }, [EAuthenticationErrorCodes.SIGNUP_DISABLED]: { title: "Регистрация отключена", message: () => "Регистрация отключена. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.MAGIC_LINK_LOGIN_DISABLED]: { title: "Вход по коду отключён", message: () => "Вход по коду отключён. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.PASSWORD_LOGIN_DISABLED]: { title: "Вход по паролю отключён", message: () => "Вход по паролю отключён. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.USER_ACCOUNT_DEACTIVATED]: { title: "Аккаунт деактивирован", message: () => "Аккаунт деактивирован. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.INVALID_PASSWORD]: { title: "Неверный пароль", message: () => "Неверный пароль. Попробуйте снова.", }, [EAuthenticationErrorCodes.PASSWORD_TOO_WEAK]: { title: "Слишком простой пароль", message: () => "Пароль должен содержать строчные и заглавные буквы, цифру и специальный символ.", }, [EAuthenticationErrorCodes.SMTP_NOT_CONFIGURED]: { title: "Почта не настроена", message: () => "Почтовый сервис не настроен. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.USER_ALREADY_EXIST]: { title: "Аккаунт уже существует", message: (email = undefined) => (
Аккаунт уже зарегистрирован.  Войти  сейчас.
), }, [EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_UP]: { title: "Не удалось выполнить вход", message: () => "Не удалось выполнить вход. Проверьте данные и попробуйте снова.", }, [EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_UP]: { title: "Нужны e-mail и пароль", message: () => "Укажите e-mail и пароль, затем попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_UP]: { title: "Некорректный e-mail", message: () => "Некорректный e-mail. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_UP]: { title: "Некорректный e-mail", message: () => "Некорректный e-mail. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.MAGIC_SIGN_UP_EMAIL_CODE_REQUIRED]: { title: "Нужны e-mail и код", message: () => "Укажите e-mail и код подтверждения, затем попробуйте снова.", }, [EAuthenticationErrorCodes.USER_DOES_NOT_EXIST]: { title: "Аккаунт не найден", message: (email = undefined) => (
Аккаунт не найден.  Создать аккаунт  для начала работы.
), }, [EAuthenticationErrorCodes.AUTHENTICATION_FAILED_SIGN_IN]: { title: "Не удалось выполнить вход", message: () => "Не удалось выполнить вход. Проверьте данные и попробуйте снова.", }, [EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_IN]: { title: "Нужны e-mail и пароль", message: () => "Укажите e-mail и пароль, затем попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_EMAIL_SIGN_IN]: { title: "Некорректный e-mail", message: () => "Некорректный e-mail. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_EMAIL_MAGIC_SIGN_IN]: { title: "Некорректный e-mail", message: () => "Некорректный e-mail. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED]: { title: "Нужны e-mail и код", message: () => "Укажите e-mail и код подтверждения, затем попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_IN]: { title: "Неверный код подтверждения", message: () => "Код подтверждения неверный. Попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_MAGIC_CODE_SIGN_UP]: { title: "Неверный код подтверждения", message: () => "Код подтверждения неверный. Попробуйте снова.", }, [EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_IN]: { title: "Код подтверждения истёк", message: () => "Код подтверждения истёк. Запросите новый и попробуйте снова.", }, [EAuthenticationErrorCodes.EXPIRED_MAGIC_CODE_SIGN_UP]: { title: "Код подтверждения истёк", message: () => "Код подтверждения истёк. Запросите новый и попробуйте снова.", }, [EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_IN]: { title: "Лимит попыток исчерпан", message: () => "Лимит попыток ввода кода исчерпан. Запросите новый код.", }, [EAuthenticationErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_UP]: { title: "Лимит попыток исчерпан", message: () => "Лимит попыток ввода кода исчерпан. Запросите новый код.", }, [EAuthenticationErrorCodes.OAUTH_NOT_CONFIGURED]: { title: "OAuth не настроен", message: () => "OAuth не настроен. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.GOOGLE_NOT_CONFIGURED]: { title: "Google OAuth не настроен", message: () => "Google OAuth не настроен. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.GITHUB_NOT_CONFIGURED]: { title: "GitHub OAuth не настроен", message: () => "GitHub OAuth не настроен. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.GITLAB_NOT_CONFIGURED]: { title: "GitLab OAuth не настроен", message: () => "GitLab OAuth не настроен. Обратитесь к администратору.", }, [EAuthenticationErrorCodes.GOOGLE_OAUTH_PROVIDER_ERROR]: { title: "Ошибка Google OAuth", message: () => "Не удалось авторизоваться через Google. Попробуйте снова.", }, [EAuthenticationErrorCodes.GITHUB_OAUTH_PROVIDER_ERROR]: { title: "Ошибка GitHub OAuth", message: () => "Не удалось авторизоваться через GitHub. Попробуйте снова.", }, [EAuthenticationErrorCodes.GITLAB_OAUTH_PROVIDER_ERROR]: { title: "Ошибка GitLab OAuth", message: () => "Не удалось авторизоваться через GitLab. Попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_PASSWORD_TOKEN]: { title: "Некорректный токен", message: () => "Токен сброса пароля некорректен.", }, [EAuthenticationErrorCodes.EXPIRED_PASSWORD_TOKEN]: { title: "Токен истёк", message: () => "Токен сброса пароля истёк. Запросите новый.", }, [EAuthenticationErrorCodes.MISSING_PASSWORD]: { title: "Нужен пароль", message: () => "Укажите пароль и попробуйте снова.", }, [EAuthenticationErrorCodes.INCORRECT_OLD_PASSWORD]: { title: "Неверный старый пароль", message: () => "Неверный старый пароль. Попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_NEW_PASSWORD]: { title: "Некорректный новый пароль", message: () => "Некорректный новый пароль. Проверьте требования и попробуйте снова.", }, [EAuthenticationErrorCodes.PASSWORD_ALREADY_SET]: { title: "Пароль уже установлен", message: () => "Пароль уже установлен. Попробуйте войти в систему.", }, [EAuthenticationErrorCodes.ADMIN_ALREADY_EXIST]: { title: "Администратор уже существует", message: () => "Администратор уже существует. Проверьте данные и попробуйте снова.", }, [EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME]: { title: "Нужны имя, e-mail и пароль", message: () => "Укажите имя, e-mail и пароль, затем попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_ADMIN_EMAIL]: { title: "Некорректный e-mail администратора", message: () => "Некорректный e-mail администратора. Проверьте адрес и попробуйте снова.", }, [EAuthenticationErrorCodes.INVALID_ADMIN_PASSWORD]: { title: "Некорректный пароль администратора", message: () => "Некорректный пароль администратора. Проверьте данные и попробуйте снова.", }, [EAuthenticationErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD]: { title: "Нужны e-mail и пароль", message: () => "Укажите e-mail и пароль, затем попробуйте снова.", }, [EAuthenticationErrorCodes.ADMIN_AUTHENTICATION_FAILED]: { title: "Не удалось выполнить вход", message: () => "Не удалось выполнить вход. Проверьте данные и попробуйте снова.", }, [EAuthenticationErrorCodes.ADMIN_USER_ALREADY_EXIST]: { title: "Администратор уже существует", message: () => (
Администратор уже существует.  Войти  сейчас.
), }, [EAuthenticationErrorCodes.ADMIN_USER_DOES_NOT_EXIST]: { title: "Администратор не найден", message: () => (
Администратор не найден.  Войти  сейчас.
), }, [EAuthenticationErrorCodes.ADMIN_USER_DEACTIVATED]: { title: "Аккаунт администратора деактивирован", message: () =>
Аккаунт администратора деактивирован.
, }, [EAuthenticationErrorCodes.RATE_LIMIT_EXCEEDED]: { title: "", message: () => "Слишком много попыток. Повторите позже.", }, }; 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.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 || "Ошибка", message: errorCodeMessages[errorCode]?.message(email) || "Что-то пошло не так. Попробуйте снова.", }; } return undefined; }; export const passwordErrors = [ EAuthenticationErrorCodes.PASSWORD_TOO_WEAK, EAuthenticationErrorCodes.INVALID_NEW_PASSWORD, ];