Об этом проекте
Google Calendar Sync — это самодельный сервис, который поддерживает целевой календарь синхронизированным как проекцию исходного календаря. Каждое правило наблюдает ровно один исходный календарь и управляет ровно одним целевым календарем; исходный и целевой могут принадлежать разным учетным записям Google. Проект явно помечен как pre-alpha: архитектура, механизм синхронизации, аутентифицированный API, адаптер Google и веб-интерфейс образуют рабочий первый вертикальный срез, но тестирование на живой учетной записи и проверка готовности к продакшену не завершены, поэтому рекомендуются тестовые календари и резервные копии.
Ключевые проектные решения, описанные в README:
- Направленные правила: один источник, один целевой, с поведением, авторитетным для источника. Изменения в целевом, отсутствующие проекции и отмены в источнике исправляются во время синхронизации и сверки.
- Конфиденциальность по умолчанию: новые правила по умолчанию используют проекцию «Занятость»; копирование деталей — по желанию и никогда не копирует участников, личность организатора, данные конференций, вложения или приглашения.
- Безопасная активация: правило должно пройти предварительный просмотр без побочных эффектов, прежде чем его можно будет включить.
- Самодостаточное развертывание: SQLite, планировщик, API и веб-интерфейс работают как один легковесный сервис, поставляемый как Docker-образ и Compose-сервис для linux/amd64 и linux/arm64.
- Без телеметрии: функциональная установка взаимодействует только с Google API, необходимыми для синхронизации, и любым конечным точкой уведомлений, настроенной оператором.
Перечисленные возможности включают события с временем и на весь день, повторяющиеся серии, изменения отдельных вхождений и отмены; политики «только занятость» или «копирование деталей» с включением на весь день по правилам; инкрементальный опрос каждые пять минут плюс ручная синхронизация; ежедневная полная сверка плюс «Сверка сейчас» с отчетом о расхождениях; предотвращение циклов через частные метаданные управляемого источника; стабильные ключи операций, сохранение последнего курсора, экспоненциальная задержка при повторах и изолированные сбои правил; аутентифицированное представление активности с дедупликацией и необязательной доставкой инцидентов по SMTP или webhook; один локальный пароль администратора с зашифрованными учетными данными Google OAuth; светлая и темная темы.
Настройка требует проект Google Cloud с включенным Calendar API, клиент веб-приложения OAuth 2.0 и точный URI перенаправления http://localhost:8000/api/v1/oauth/google/callback. Локальные секреты настраиваются через файл .env, включая 256-битный мастер-ключ, который шифрует сохраненные учетные данные Google с помощью AES-256-GCM. В README отмечается, что потеря мастер-ключа делает учетные данные подключенной учетной записи нечитаемыми, и что развертывание на LAN-хосте требует особой обработки, поскольку Google отклоняет URI перенаправления с обычным HTTP, кроме localhost.
Поведение синхронизации: первый запуск читает события источника, заканчивающиеся не ранее чем за 30 дней до запуска, наблюдает целевой календарь и записывает инкрементальные токены Google для обеих конечных точек. Последующие запуски потребляют оба потока изменений, поэтому правки или удаления только в целевом календаре исправляются без полных повторных сканирований. Для каждого релевантного события источника домен выбирает «Создать», «Обновить», «Удалить», «Игнорировать» или «Конфликт»; неоднозначная идентичность или владение не угадываются. Курсоры продвигаются только после полного успеха пакета, а записи провайдера несут стабильные ключи операций, чтобы повторы не дублировали проекции.
Заметки о конфиденциальности и безопасности: названия событий, описания и места обрабатываются в памяти и не хранятся в SQLite или записях аудита; сопоставления сохраняют ID провайдера, ревизии и необратимый отпечаток; отключение учетной записи удаляет сохраненные учетные данные без удаления правил, сопоставлений или управляемых проекций; записи Google используют sendUpdates=none; веб-интерфейс и операционный API требуют локальной сессии администратора, тогда как /health остается публичным и минимальным.
Архитектура — модульный монолит с границами портов и адаптеров; домен синхронизации не имеет зависимостей от FastAPI, SQLite, Google SDK, React, OAuth или Docker. Разработка бэкенда использует Python 3.12 и FastAPI, фронтенд — Node.js 22+, React, TypeScript, Vite и Tailwind CSS. Проверки качества включают ruff, mypy, pytest с минимальным покрытием 80%, проверки типов/линт/тесты/сборку фронтенда и многоплатформенные Docker-сборки. Google Calendar — единственный провайдер в первоначальном выпуске; Outlook и CalDAV описаны как архитектурные возможности, а не поддерживаемые функции. Проект нацелен на версию 0.1.0 под лицензией MIT.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.