Задача
Необходимо создать скрипт (Google Apps Script), который при нажатии на кнопку будет выполнять синхронизацию настроек доменов из Google-таблицы с аккаунтом Cloudflare.
Исходные данные (таблица)
- B1: Содержит текущий активный домен, на который будут вести все редиректы.
- Cписок доменов (строки ниже): Каждый домен имеет поля: домен, IP-адрес, статус Proxy (ON/OFF), дата.
Функционал скрипта
При активации кнопки, скрипт должен выполнить следующие действия для каждого домена из списка:
- 1. Проверка активного домена: Взять значение из ячейки B1.
- 2. Работа с DNS: Для каждой записи в Cloudflare:
- Создать или обновить A-запись (указать из таблицы целевой IP).
- Включить или выключить сервис Cloudflare Proxy (Orange Cloud) в соответствии с полем ‘Proxy’.
- 3. Работа с правилами (301 редирект):
- Для каждого домена (кроме активного) настроить правило редиректа или создать Page Rule, перенаправляющее посетителя на активный домен (из B1).
- Редирект должен сохранять оригинальный путь и GET-параметры ссылки.
Требования к логике и защита от ошибок
Валидация входных данных
Скрипт должен проверять введенные данные. При ошибке в ячейку выводить ‘ERROR’ с указанием причины:
- Пустой домен.
- Некорректный формат домена.
- Пустой или неверный IP-адрес.
- Значение Proxy отличается от 'ON' или 'OFF'.
- Активный домен (B1) не заполнен.
Обработка ошибок Cloudflare API
- Зона для домена не найдена в аккаунте движка Cloudflare.
- Отсутствие доступа у API-токена (недостаточно прав).
- Превышение лимита API запросов (Rate Limit).
- Конфликт с существующими DNS-записями или правилами редиректа.
- Ошибка сети (таймаут, потеря соединения).
- Любая из перечисленных ошибок должна обрабатываться корректно с записью статуса в таблицу.
Оптимизация и безопасность
- Не создавать дубликаты DNS-записей. Искать существующую и обновлять её.
- Не плодить Page Rules. Обновлять существующее правило редиректа, если оно уже задано для данного домена.
- Минимизировать количество обращений к API (запрашивать полный список зон/записей, а потом выполнять точечные правки).