Skip to content

Repository files navigation

PinMe — защищённое хранилище контактов

PinMe — Android-приложение для локального хранения контактов, дат, напоминаний и истории разговоров. Основная реализация находится в каталоге android/ и написана на Kotlin с Jetpack Compose.

Web-приложение в src/ — исходный прототип. Оно собирается и проверяется в CI, но пока хранит поля контактов в localStorage и не предназначено для реальных конфиденциальных данных.

Возможности Android-приложения

  • SQLCipher-шифрование базы данных с отдельным случайным ключом для каждой установки
  • хранение ключа базы под защитой Android Keystore
  • пароль и биометрия для доступа к приложению и защищённым контактам
  • теги, категории, даты, напоминания и записи разговоров
  • активные и неактивные контакты
  • русский и английский интерфейс с английским языком по умолчанию
  • адаптивная навигация для телефонов, планшетов и развёрнутых экранов
  • зашифрованный экспорт и импорт резервной копии
  • открытый JSON-экспорт и импорт только после проверки резервного пароля
  • запрет системных скриншотов и содержимого в превью недавних приложений
  • автоматическая блокировка после ухода приложения в фон

Пароль отдельного контакта является уровнем авторизации интерфейса. Данные на диске защищает общий ключ SQLCipher; отдельного криптографического ключа для каждого контакта пока нет.

Требования

  • Android 8.0 или новее, API 26+
  • Java 17
  • Android SDK 34
  • Node.js 22.12–25 для проверки web-прототипа

Локальная сборка

cd android
export JAVA_HOME=/path/to/jdk-17
export ANDROID_HOME=/path/to/android-sdk
./gradlew compileDebugKotlin
./gradlew lintDebug testDebugUnitTest assembleDebug

Debug APK создаётся в android/app/build/outputs/apk/debug/app-debug.apk.

Проверка web-прототипа:

npm ci
npm run lint
npm run build
npm audit --audit-level=high

GitHub Actions

В репозитории настроены:

  • CI: lint, typecheck, production build и dependency audit web-прототипа; Android lint и unit-тесты
  • Android Alpha Release: подписанный release APK, проверка подписи, SHA-256 checksum и публикация GitHub Release
  • Dependabot: еженедельные обновления npm, Gradle и GitHub Actions

Android-приложение поддерживает English и русский язык. По умолчанию включён English; язык можно изменить внутри приложения в разделе «Настройки», выбор сохраняется между запусками.

CI сохраняет debug APK как временный artifact на 14 дней. Этот artifact не является каналом обновлений.

Автоматические APK

Релизный workflow собирает оптимизированный release APK с постоянным ключом подписи. Keystore не хранится в репозитории: он передаётся GitHub Actions через secrets ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS и ANDROID_KEY_PASSWORD. Один и тот же ключ позволяет устанавливать новые alpha/stable APK поверх предыдущих.

Старые debug APK из прежнего workflow были подписаны временными ключами. При переходе на первую alpha-версию такую установку нужно удалить один раз; все последующие alpha/stable версии будут обновляться обычной установкой нового APK.

Открытый экспорт сохраняется как JSON без шифрования. Перед каждым открытым экспортом и импортом приложение проверяет текущий резервный пароль, но сам файл после сохранения доступен другим приложениям и содержит персональные данные, хэши паролей контактов и значения дополнительных полей.

Зашифрованный backup использует версионированный AES-GCM envelope с PBKDF2-HMAC-SHA256 и сохраняет decoder для старого формата. JSON backup поддерживает форматы v1 и v2; обновление приложения не должно менять обязательные поля без мигратора.

Резервные копии Android и web-прототипа не являются взаимозаменяемыми форматами; для реальных данных используйте Android-приложение.

Автоматические релизы

  • изменение Android-кода в ветке main создаёт alpha prerelease alpha-…
  • тег вида v1.0.0-alpha.1 создаёт alpha prerelease
  • тег вида v1.0.0 создаёт стабильный GitHub Release
  • workflow можно запустить вручную через Actions
git tag v1.0.0
git push origin v1.0.0

Версию приложения задаёт тег vMAJOR.MINOR.PATCH[-сценарий]. Не коммитьте keystore и не удаляйте его из GitHub Secrets: потеря ключа блокирует обновление уже установленных APK.

Структура

android/    нативное Android-приложение
src/        legacy web-прототип
.github/    CI, автоматические alpha-релизы и Dependabot

Лицензия

Открытая лицензия пока не назначена. Все права сохраняются за владельцем проекта.

About

PinMe — Android-приложение для локального хранения контактов, дат, напоминаний и истории разговоров.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages