const SHEET_ID = "1vhAq7sJdbtz6Rr2aTeiqcVgw2AtM_HOZFodFrK12-xI";
/*
Если лист называется не «Лист1»,
впишите ниже его точное название.
*/
const SHEET_NAME = "Лист1";
/*
A = 1 — колонка с email
B = 2 — колонка с именем и фамилией
*/
const EMAIL_COLUMN = 1;
const NAME_COLUMN = 2;
function doGet(e) {
const callback = String(e.parameter.callback || "callback")
.replace(/[^a-zA-Z0-9_.$]/g, "");
const requestedEmail = normalizeEmail(e.parameter.email || "");
let result = {
success: false,
found: false,
message: "Email не найден."
};
try {
if (!requestedEmail || !isValidEmail(requestedEmail)) {
result.message = "Введите корректный email.";
return createJsonpResponse(callback, result);
}
const sheet = SpreadsheetApp
.openById(SHEET_ID)
.getSheetByName(SHEET_NAME);
if (!sheet) {
throw new Error("Лист не найден: " + SHEET_NAME);
}
const lastRow = sheet.getLastRow();
if (lastRow < 2) {
result.message = "Список участников пуст.";
return createJsonpResponse(callback, result);
}
const numberOfColumns = Math.max(EMAIL_COLUMN, NAME_COLUMN);
const rows = sheet
.getRange(2, 1, lastRow - 1, numberOfColumns)
.getDisplayValues();
for (let i = 0; i < rows.length; i++) {
const email = normalizeEmail(rows[i][EMAIL_COLUMN - 1]);
const fullName = String(rows[i][NAME_COLUMN - 1] || "").trim();
if (email === requestedEmail) {
result = {
success: true,
found: true,
fullName: fullName,
message: "Участник найден."
};
return createJsonpResponse(callback, result);
}
}
return createJsonpResponse(callback, result);
} catch (error) {
result.message = "Ошибка проверки данных.";
console.error(error);
return createJsonpResponse(callback, result);
}
}
function normalizeEmail(value) {
return String(value || "")
.trim()
.toLowerCase();
}
function isValidEmail(value) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
}
function createJsonpResponse(callback, data) {
const safeCallback = callback || "callback";
return ContentService
.createTextOutput(
safeCallback + "(" + JSON.stringify(data) + ");"
)
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}