diff --git a/client/src/Pages/Auth/Login/Login.jsx b/client/src/Pages/Auth/Login/Login.jsx
index 9db56ae49..52663a479 100644
--- a/client/src/Pages/Auth/Login/Login.jsx
+++ b/client/src/Pages/Auth/Login/Login.jsx
@@ -1,6 +1,6 @@
import { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
-import { Box, Stack, Typography } from "@mui/material";
+import { Box, Stack, Typography, Alert, Button } from "@mui/material";
import { useTheme } from "@emotion/react";
import { credentials } from "../../../Validation/validation";
import { login } from "../../../Features/Auth/authSlice";
@@ -16,6 +16,7 @@ import PasswordStep from "./Components/PasswordStep";
import ThemeSwitch from "../../../Components/ThemeSwitch";
import ForgotPasswordLabel from "./Components/ForgotPasswordLabel";
import LanguageSelector from "../../../Components/LanguageSelector";
+import { useTranslation } from "react-i18next";
const DEMO = import.meta.env.VITE_APP_DEMO;
@@ -27,6 +28,7 @@ const Login = () => {
const dispatch = useDispatch();
const navigate = useNavigate();
const theme = useTheme();
+ const { t } = useTranslation();
const authState = useSelector((state) => state.auth);
const { authToken } = authState;
@@ -42,22 +44,81 @@ const Login = () => {
});
const [errors, setErrors] = useState({});
const [step, setStep] = useState(0);
+ const [backendReachable, setBackendReachable] = useState(true);
+ const [isCheckingConnection, setIsCheckingConnection] = useState(false);
useEffect(() => {
if (authToken) {
navigate("/uptime");
return;
}
- networkService
- .doesSuperAdminExist()
- .then((response) => {
- if (response.data.data === false) {
- navigate("/register");
+
+ // Check backend connectivity first
+ const handleRetry = async () => {
+ setIsCheckingConnection(true);
+ try {
+ const isReachable = await networkService.checkBackendReachability();
+ setBackendReachable(isReachable);
+
+ // If backend is now reachable, proceed with admin check
+ if (isReachable) {
+ networkService
+ .doesSuperAdminExist()
+ .then((response) => {
+ if (response.data.data === false) {
+ navigate("/register");
+ }
+ })
+ .catch((error) => {
+ logger.error(error);
+ });
+ createToast({
+ body: t("backendReconnected"),
+ });
+ } else {
+ createToast({
+ body: t("backendStillUnreachable"),
+ });
}
- })
- .catch((error) => {
- logger.error(error);
- });
+ } catch (error) {
+ logger.error("Error checking backend connectivity:", error);
+ setBackendReachable(false);
+ createToast({
+ body: t("backendConnectionError"),
+ });
+ } finally {
+ setIsCheckingConnection(false);
+ }
+ };
+
+ const checkConnectivity = async () => {
+ setIsCheckingConnection(true);
+ try {
+ const isReachable = await networkService.checkBackendReachability();
+ setBackendReachable(isReachable);
+
+ // Only proceed with admin check if backend is reachable
+ if (isReachable) {
+ networkService
+ .doesSuperAdminExist()
+ .then((response) => {
+ if (response.data.data === false) {
+ navigate("/register");
+ }
+ })
+ .catch((error) => {
+ logger.error(error);
+ });
+ }
+ } catch (error) {
+ logger.error("Error checking backend connectivity:", error);
+ setBackendReachable(false);
+ } finally {
+ setIsCheckingConnection(false);
+ }
+ };
+
+ checkConnectivity();
}, [authToken, navigate]);
const handleChange = (event) => {
@@ -82,6 +143,14 @@ const Login = () => {
const handleSubmit = async (event) => {
event.preventDefault();
+ // Check backend connectivity before proceeding
+ if (!backendReachable) {
+ createToast({
+ body: t("backendUnreachableError"),
+ });
+ return;
+ }
+
if (step === 0) {
const { error } = credentials.validate(
{ email: form.email },
@@ -208,7 +277,24 @@ const Login = () => {
},
}}
>
- {step === 0 ? (
+ {!backendReachable ? (
+
+
+ {t("backendUnreachable")}
+
+
+ {t("backendUnreachableMessage")}
+
+
+
+ ) : step === 0 ? (
{
/>
)
)}
-
+ {backendReachable && (
+
+ )}
);
diff --git a/client/src/locales/gb.json b/client/src/locales/gb.json
index 343386bec..3bfb07fcf 100644
--- a/client/src/locales/gb.json
+++ b/client/src/locales/gb.json
@@ -99,6 +99,14 @@
"settingsFailedToAddDemoMonitors": "Failed to add demo monitors",
"settingsMonitorsDeleted": "Successfully deleted all monitors",
"settingsFailedToDeleteMonitors": "Failed to delete all monitors",
+ "backendUnreachable": "Server Connection Error",
+ "backendUnreachableMessage": "We're unable to connect to the server. Please check your internet connection or contact your administrator if the problem persists.",
+ "backendUnreachableError": "Cannot connect to the server. Please try again later.",
+ "retryConnection": "Retry Connection",
+ "retryingConnection": "Connecting...",
+ "backendReconnected": "Successfully reconnected to the server.",
+ "backendStillUnreachable": "Server is still unreachable. Please try again later.",
+ "backendConnectionError": "Error connecting to the server. Please check your network connection.",
"starPromptTitle": "Star Checkmate",
"starPromptDescription": "See the latest releases and help grow the community on GitHub",
"https": "HTTPS",
diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json
index 5d0f649de..4845830ef 100644
--- a/client/src/locales/ru.json
+++ b/client/src/locales/ru.json
@@ -99,6 +99,14 @@
"settingsFailedToAddDemoMonitors": "Не удалось добавить демонстрационные мониторы",
"settingsMonitorsDeleted": "Успешно удалены все мониторы",
"settingsFailedToDeleteMonitors": "Не удалось удалить все мониторы",
+ "backendUnreachable": "Ошибка подключения к серверу",
+ "backendUnreachableMessage": "Мы не можем подключиться к серверу. Пожалуйста, проверьте ваше интернет-соединение или обратитесь к администратору, если проблема не устраняется.",
+ "backendUnreachableError": "Невозможно подключиться к серверу. Пожалуйста, повторите попытку позже.",
+ "retryConnection": "Повторить подключение",
+ "retryingConnection": "Подключение...",
+ "backendReconnected": "Успешно восстановлено подключение к серверу.",
+ "backendStillUnreachable": "Сервер по-прежнему недоступен. Пожалуйста, повторите попытку позже.",
+ "backendConnectionError": "Ошибка подключения к серверу. Пожалуйста, проверьте ваше сетевое подключение.",
"starPromptTitle": "Star Checkmate",
"starPromptDescription": "Ознакомьтесь с последними релизами и помогите развить сообщество на GitHub",
"https": "HTTPS",
diff --git a/client/src/locales/tr.json b/client/src/locales/tr.json
index 1b759a29d..11d79fabc 100644
--- a/client/src/locales/tr.json
+++ b/client/src/locales/tr.json
@@ -99,6 +99,14 @@
"settingsFailedToAddDemoMonitors": "Demo monitörler eklenemedi",
"settingsMonitorsDeleted": "Tüm monitörler başarıyla silindi",
"settingsFailedToDeleteMonitors": "Monitörler silinemedi",
+ "backendUnreachable": "Sunucu Bağlantı Hatası",
+ "backendUnreachableMessage": "Sunucuya bağlanamıyoruz. Lütfen internet bağlantınızı kontrol edin veya sorun devam ederse yöneticinize başvurun.",
+ "backendUnreachableError": "Sunucuya bağlanılamıyor. Lütfen daha sonra tekrar deneyin.",
+ "retryConnection": "Bağlantıyı Yeniden Dene",
+ "retryingConnection": "Bağlanıyor...",
+ "backendReconnected": "Sunucuya başarıyla yeniden bağlandı.",
+ "backendStillUnreachable": "Sunucu hala erişilemez durumda. Lütfen daha sonra tekrar deneyin.",
+ "backendConnectionError": "Sunucuya bağlanırken hata oluştu. Lütfen ağ bağlantınızı kontrol edin.",
"starPromptTitle": "Checkmate yıldızla değerlendirin",
"starPromptDescription": "En son sürümleri görün ve GitHub'daki topluluğun büyümesine yardımcı olun",
"https": "HTTPS",