Commit Graph

8 Commits

Author SHA1 Message Date
b-dev-mobile 321f81bffe Этап 0 п.3 (доп): биометрическая привязка app password поверх шифрования
Auth-bound RSA-пара `f7_auth_master_bio` в AndroidKeystore
(setUserAuthenticationRequired + setInvalidatedByBiometricEnrollment,
per-use CryptoObject, префикс v2b:): ПУБЛИЧНЫЙ ключ шифрует без авторизации
(в т.ч. в фоне — миграция/сохранение после входа), ПРИВАТНЫЙ расшифровывает
ТОЛЬКО через BiometricPrompt+CryptoObject. Симметричный AES не подошёл бы:
там auth требуется и на шифрование.

Разрешение конфликта с фоновыми push/звонками: пароль расшифровывается ОДИН
раз при разблокировке (AppLockGate) и живёт в памяти процесса
(AppPasswordHolder, не на диске). AuthStore.load() в фоне возвращает null,
пока «холодно» → существующие `?: return` в push/звонках деградируют сами;
экраны Accept (CallIncomingActivity, TalkPushBridge) открывают приложение
для разблокировки вместо тихого отказа. AppScaffold через loadMetadata()
показывает экран блокировки, а не логин, и перечитывает сессию после разблокировки.

ВЫКЛ по умолчанию (AppLockStore.isPasswordBindingEnabled, только при
биометрии-без-PIN — единственный путь разблокировки прогревает holder).
UI-тумблер и включение по умолчанию — ПОСЛЕ подтверждения владельцем поведения
«после ребута до первой разблокировки звонки/push не работают» (как в Signal).

v0.5.115 (123). Проверено сборкой assembleRelease на инфре B: APK 54.6 МБ,
подпись v2+v3 OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 20:49:45 +00:00
b-dev-mobile 6abb1b15c3 Этап 0 п.4b (GPL): восстановлены копирайты Nextcloud в vendor (сверка с апстримом v23.0.0)
102 файла: искажённые email реальных разработчиков Nextcloud (Julius Linus,
Tobias Kaminsky, Álvaro Brey — были @f7cloud.com) восстановлены на настоящие;
холдер 'F7cloud'/'F7cloud and F7cloud contributors' -> 'Nextcloud GmbH and
Nextcloud contributors'. Название продукта в заголовках оставлено 'F7cloud Talk'
(ребренд форка — требование trademark-политики Nextcloud). Менялись только строки
копирайта в комментариях, код не тронут. Снимает нарушение GPLv3 §4 (атрибуция).

Проверено сборкой: assembleRelease -> BUILD SUCCESSFUL, APK 53 МБ.
2026-07-07 20:29:00 +00:00
b-dev-mobile 3aebb5c68b Этап 0 п.4a (GPL): LICENSE (GPL-3.0-or-later) в корень + раздел лицензии в README
Приложение линкует vendored Nextcloud Talk (GPL-3.0-or-later), поэтому весь APK —
производная работа под GPL. Восстановление затёртых копирайтов Nextcloud в vendor
(п.4b) — отдельно, точной сверкой с апстримом talk-android v23.0.0.
2026-07-07 20:06:17 +00:00
b-dev-mobile 51fd1bf936 Этап 0 п.3: безопасность-минимум (trust-all off в release, шифрование пароля, allowBackup, ревокация)
1. trust-all TLS отключён в release: гейт if(!BuildConfig.DEBUG) в UnsafeSsl +
   OfficeWebViewClient + TalkCallActivity; чекбокс скрыт в release. buildConfig
   включён в core:network и feature:talk.
2. allowBackup=false (tools:replace поверх vendor true).
3. app password шифруется в покое AndroidKeystore AES-256-GCM (KeystoreCrypto),
   AuthStore мигрирует legacy-plaintext при первом load. Биометрия — отдельная
   задача (ломает фоновые push/звонки, нужен кэш в памяти).
4. Ревокация app password при logout (AppPasswordRevoker, DELETE core/apppassword,
   best-effort).

Проверено: assembleRelease 53 МБ, подпись v2+v3, allowBackup=false в манифесте OK.
2026-07-07 19:51:23 +00:00
b-dev-mobile c259936e82 Этап 0 п.2: универсальный APK 99→53 МБ (abiFilters ARM + resConfigs ru,en)
- defaultConfig.ndk.abiFilters 'arm64-v8a','armeabi-v7a' — без эмуляторных x86/x86_64
- resourceConfigurations += ['ru','en'] — срез ~48 локалей vendor до нужных
- проверено сборкой: assembleRelease 53 МБ, ABI только ARM, подпись v2+v3 OK
- renderscriptSupportModeEnabled в vendor НЕ трогал (риск blur, отдельный пункт)
2026-07-07 17:55:14 +00:00
b-dev-mobile 67cc851b15 Этап 0 п.1: release собираем и подписан (signingConfig из env + R8-правила)
- signingConfig.release читает F7_KEYSTORE_FILE/PASSWORD, F7_KEY_ALIAS/PASSWORD
  из env или -P; фолбэк на debug-подпись если не заданы. Схемы v2+v3.
- R8: app/proguard-rules.pro (kotlinx.serialization, Firebase, JS-мосты, Coil);
  vendor consumer-rules.pro через consumerProguardFiles (WebRTC/LoganSquare/Dagger/
  RxJava/Parceler/EventBus + dontwarn geogson/joda из missing_rules.txt).
- Проверено на инфре B (JDK 21 + Android SDK 36): assembleRelease BUILD SUCCESSFUL,
  подписанный APK 99 МБ (было ~130 debug), apksigner verify v2+v3 OK.
- Доки: docs/RELEASE-SIGNING.md, docs/AUDIT-2026-07-07.md.
2026-07-07 13:17:20 +00:00
b-dev-mobile 6a07f1f40a v0.5.114: убраны зашитые касания боевых хостов ячейки A (mail/035)
- дефолт-URL экрана входа -> BuildConfig.DEFAULT_SERVER_URL (-Pf7DefaultServerUrl, по умолчанию пусто)
- TalkHelper: preconnect только к origin сессии, хардкод hpb-prod.f7cloud.ru удалён
- AuthErrors: нейтральный пример адреса сервера
2026-07-07 10:04:11 +00:00
b-dev-mobile 1affb66874 Онбординг в федерацию F7: INTEGRATION.md + CHANGELOG.md (роль b-dev-mobile, ячейка B) 2026-07-07 09:36:51 +00:00