mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-01 08:08:49 +01:00
73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
|
|
import React from 'react';
|
||
|
|
import { useSearchParams } from 'react-router-dom';
|
||
|
|
import { useLocalize } from '~/hooks';
|
||
|
|
|
||
|
|
export default function OAuthError() {
|
||
|
|
const localize = useLocalize();
|
||
|
|
const [searchParams] = useSearchParams();
|
||
|
|
const error = searchParams.get('error') || 'unknown_error';
|
||
|
|
|
||
|
|
const getErrorMessage = (error: string): string => {
|
||
|
|
switch (error) {
|
||
|
|
case 'missing_code':
|
||
|
|
return (
|
||
|
|
localize('com_ui_oauth_error_missing_code') ||
|
||
|
|
'Authorization code is missing. Please try again.'
|
||
|
|
);
|
||
|
|
case 'missing_state':
|
||
|
|
return (
|
||
|
|
localize('com_ui_oauth_error_missing_state') ||
|
||
|
|
'State parameter is missing. Please try again.'
|
||
|
|
);
|
||
|
|
case 'invalid_state':
|
||
|
|
return (
|
||
|
|
localize('com_ui_oauth_error_invalid_state') ||
|
||
|
|
'Invalid state parameter. Please try again.'
|
||
|
|
);
|
||
|
|
case 'callback_failed':
|
||
|
|
return (
|
||
|
|
localize('com_ui_oauth_error_callback_failed') ||
|
||
|
|
'Authentication callback failed. Please try again.'
|
||
|
|
);
|
||
|
|
default:
|
||
|
|
return localize('com_ui_oauth_error_generic') || error.replace(/_/g, ' ');
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
return (
|
||
|
|
<div className="flex min-h-screen items-center justify-center bg-gray-50 p-8">
|
||
|
|
<div className="w-full max-w-md rounded-lg bg-white p-8 text-center shadow-lg">
|
||
|
|
<div className="mb-4 flex justify-center">
|
||
|
|
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-red-100">
|
||
|
|
<svg
|
||
|
|
className="h-6 w-6 text-red-600"
|
||
|
|
fill="none"
|
||
|
|
viewBox="0 0 24 24"
|
||
|
|
stroke="currentColor"
|
||
|
|
aria-hidden="true"
|
||
|
|
>
|
||
|
|
<path
|
||
|
|
strokeLinecap="round"
|
||
|
|
strokeLinejoin="round"
|
||
|
|
strokeWidth={2}
|
||
|
|
d="M6 18L18 6M6 6l12 12"
|
||
|
|
/>
|
||
|
|
</svg>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<h1 className="mb-4 text-3xl font-bold text-gray-900">
|
||
|
|
{localize('com_ui_oauth_error_title') || 'Authentication Failed'}
|
||
|
|
</h1>
|
||
|
|
<p className="mb-6 text-sm text-gray-600">{getErrorMessage(error)}</p>
|
||
|
|
<button
|
||
|
|
onClick={() => window.close()}
|
||
|
|
className="rounded-md bg-gray-900 px-4 py-2 text-sm font-medium text-white hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2"
|
||
|
|
aria-label={localize('com_ui_close_window') || 'Close Window'}
|
||
|
|
>
|
||
|
|
{localize('com_ui_close_window') || 'Close Window'}
|
||
|
|
</button>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|