101 lines
4.1 KiB
TypeScript
101 lines
4.1 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 Link from "next/link";
|
||
// plane packages
|
||
import type { TAdminAuthErrorInfo } from "@plane/constants";
|
||
import { SUPPORT_EMAIL, EAdminAuthErrorCodes } from "@plane/constants";
|
||
|
||
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",
|
||
}
|
||
|
||
const errorCodeMessages: {
|
||
[key in EAdminAuthErrorCodes]: { title: string; message: (email?: string) => React.ReactNode };
|
||
} = {
|
||
// admin
|
||
[EAdminAuthErrorCodes.ADMIN_ALREADY_EXIST]: {
|
||
title: `Администратор уже существует`,
|
||
message: () => `Администратор уже существует. Попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME]: {
|
||
title: `Нужны email, пароль и имя`,
|
||
message: () => `Укажите email, пароль и имя. Попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.INVALID_ADMIN_EMAIL]: {
|
||
title: `Некорректный email администратора`,
|
||
message: () => `Некорректный email администратора. Попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.INVALID_ADMIN_PASSWORD]: {
|
||
title: `Некорректный пароль администратора`,
|
||
message: () => `Некорректный пароль администратора. Попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD]: {
|
||
title: `Нужны email и пароль`,
|
||
message: () => `Укажите email и пароль. Попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.ADMIN_AUTHENTICATION_FAILED]: {
|
||
title: `Ошибка входа`,
|
||
message: () => `Не удалось войти. Проверьте данные и попробуйте еще раз.`,
|
||
},
|
||
[EAdminAuthErrorCodes.ADMIN_USER_ALREADY_EXIST]: {
|
||
title: `Администратор уже существует`,
|
||
message: () => (
|
||
<div>
|
||
Администратор уже существует.
|
||
<Link className="font-medium underline underline-offset-4 transition-all hover:font-bold" href={`/admin`}>
|
||
Войти
|
||
</Link>
|
||
сейчас.
|
||
</div>
|
||
),
|
||
},
|
||
[EAdminAuthErrorCodes.ADMIN_USER_DOES_NOT_EXIST]: {
|
||
title: `Администратор не найден`,
|
||
message: () => (
|
||
<div>
|
||
Администратор не найден.
|
||
<Link className="font-medium underline underline-offset-4 transition-all hover:font-bold" href={`/admin`}>
|
||
Войти
|
||
</Link>
|
||
сейчас.
|
||
</div>
|
||
),
|
||
},
|
||
[EAdminAuthErrorCodes.ADMIN_USER_DEACTIVATED]: {
|
||
title: `Аккаунт деактивирован`,
|
||
message: () => `Аккаунт деактивирован. Свяжитесь с ${SUPPORT_EMAIL ? SUPPORT_EMAIL : "администратором"}.`,
|
||
},
|
||
};
|
||
|
||
export const authErrorHandler = (errorCode: EAdminAuthErrorCodes, email?: string): TAdminAuthErrorInfo | undefined => {
|
||
const bannerAlertErrorCodes = [
|
||
EAdminAuthErrorCodes.ADMIN_ALREADY_EXIST,
|
||
EAdminAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME,
|
||
EAdminAuthErrorCodes.INVALID_ADMIN_EMAIL,
|
||
EAdminAuthErrorCodes.INVALID_ADMIN_PASSWORD,
|
||
EAdminAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD,
|
||
EAdminAuthErrorCodes.ADMIN_AUTHENTICATION_FAILED,
|
||
EAdminAuthErrorCodes.ADMIN_USER_ALREADY_EXIST,
|
||
EAdminAuthErrorCodes.ADMIN_USER_DOES_NOT_EXIST,
|
||
EAdminAuthErrorCodes.ADMIN_USER_DEACTIVATED,
|
||
];
|
||
|
||
if (bannerAlertErrorCodes.includes(errorCode))
|
||
return {
|
||
type: EErrorAlertType.BANNER_ALERT,
|
||
code: errorCode,
|
||
title: errorCodeMessages[errorCode]?.title || "Ошибка",
|
||
message: errorCodeMessages[errorCode]?.message(email) || "Что-то пошло не так. Попробуйте еще раз.",
|
||
};
|
||
|
||
return undefined;
|
||
};
|