if (window.location.pathname.toLowerCase().indexOf('/login/login.html') !== -1) {
// Вспомогательная функция для получения куки
var getCookie = function(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
};
// Вспомогательная функция для принудительного удаления куки
var deleteCookie = function(name) {
document.cookie = name + '=; Max-Age=-99999999; path=/;';
// На случай, если у куки прописан конкретный домен, очищаем и его
document.cookie = name + '=; Max-Age=-99999999; path=/; domain=' + window.location.hostname + ';';
};
var bpmCsrf = getCookie("BPMCSRF");
// 2. Если кука найдена, выполняем валидацию сессии на сервере
if (bpmCsrf && bpmCsrf.trim() !== "") {
var basePath = window.location.pathname.replace(/\/Login\/Login\.html/i, '');
// Используем стандартный легковесный пинг-сервис Creatio, требующий авторизации
var checkUrl = window.location.origin + basePath + '/ServiceModel/AuthService.svc/DoLogin';
var xhr = new XMLHttpRequest();
xhr.open('POST', checkUrl, false); // Синхронный запрос, чтобы интерфейс не мерцал
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.setRequestHeader('BPMCSRF', bpmCsrf); // Передаем куку в заголовке для прохождения CSRF фильтра
try {
// Отправляем пустой запрос на авторизационный сервис
xhr.send(JSON.stringify({}));
// Если сервер вернул 200/204 или 302, значит сессия валидна
if (xhr.status >= 200 && xhr.status < 400) {
// Мгновенный редирект в Shell для живой сессии
window.location.href = window.location.origin + basePath + '/0/Shell/';
return; // Блокируем дальнейшую загрузку страницы входа
} else {
// Сервер вернул ошибку (401/403/500) -> сессия протухла
deleteCookie("BPMCSRF");
console.warn("Сессия устарела на сервере. Кука BPMCSRF удалена.");
}
} catch (e) {
// Если запрос заблокирован или упал с ошибкой сети
deleteCookie("BPMCSRF");
console.error("Ошибка проверки сессии. Кука очищена.", e);
}
}
}