From 6a07f1f40a052f99b1561ae6b0127fc6aecbc152 Mon Sep 17 00:00:00 2001 From: b-dev-mobile Date: Tue, 7 Jul 2026 10:04:11 +0000 Subject: [PATCH] =?UTF-8?q?v0.5.114:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B7=D0=B0=D1=88=D0=B8=D1=82=D1=8B=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=BE=D0=B5=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20=D1=85=D0=BE=D1=81=D1=82=D0=BE=D0=B2=20=D1=8F?= =?UTF-8?q?=D1=87=D0=B5=D0=B9=D0=BA=D0=B8=20A=20(mail/035)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - дефолт-URL экрана входа -> BuildConfig.DEFAULT_SERVER_URL (-Pf7DefaultServerUrl, по умолчанию пусто) - TalkHelper: preconnect только к origin сессии, хардкод hpb-prod.f7cloud.ru удалён - AuthErrors: нейтральный пример адреса сервера --- CHANGELOG.md | 1 + INTEGRATION.md | 8 ++++++-- app/build.gradle | 11 +++++++++-- .../java/ru/forbion/f7cloud/mobile/ui/AppScaffold.kt | 3 ++- .../java/ru/forbion/f7cloud/core/auth/AuthErrors.kt | 2 +- .../ru/forbion/f7cloud/feature/talk/TalkHelper.kt | 11 +++++------ 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1518ae..3966baf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,5 +2,6 @@ Формат: `ГГГГ-ММ-ДД | версия | изменение | контракты | риск` +- 2026-07-07 | v0.5.114 (122) | Санитария по mail/035: дефолт-URL входа → BuildConfig.DEFAULT_SERVER_URL (свойство f7DefaultServerUrl, по умолчанию пусто); убран preconnect к боевому hpb-prod.f7cloud.ru (TalkHelper); нейтральный пример URL в тексте ошибки | INTEGRATION.md: зашитых касаний хостов A больше нет | низкий: preconnect — только оптимизация; сборка на билд-сервере ещё не прогонялась - 2026-07-07 | v0.5.113 (121) | Онбординг в федерацию F7: заведены INTEGRATION.md и CHANGELOG.md, роль `b-dev-mobile` (ячейка B). Код без изменений | INTEGRATION.md создан: задекларированы потребляемые контракты тенанта (OCS/WebDAV/CalDAV/CardDAV/Mail/spreed v4/Dashboard/Richdocuments/f7push) | нет - до 2026-07-07 | ≤0.5.113 | Разработка вне федерации (сессии Cursor Agent): нативные модули файлы/почта/календарь/контакты/задачи/Talk/поддержка/Deck | хронология — PROJECT-STATUS.md | — diff --git a/INTEGRATION.md b/INTEGRATION.md index 902c439..71993d3 100644 --- a/INTEGRATION.md +++ b/INTEGRATION.md @@ -13,8 +13,12 @@ legacy WebView-оболочки `android-webview`. (Android, minSdk 26). - Сборка — на инфраструктуре ячейки B (markov-cloudi), Gradle 9.3 / AGP 8.13 / JDK 21. - Хосты ячейки A приложение не занимает; взаимодействие — только как HTTP-клиент - тенанта F7 (URL сервера задаёт пользователь на экране входа, - дефолт в UI: `https://forbion.f7cloud.ru` — `app/.../AppScaffold.kt:682`). + тенанта F7. URL сервера задаёт пользователь на экране входа; дефолт поля — + `BuildConfig.DEFAULT_SERVER_URL` (свойство сборки `f7DefaultServerUrl`, + по умолчанию пусто — прод-URL в сборку не вшит, решение mail/035). +- Зашитых обращений к боевым хостам A нет с v0.5.114: убраны дефолт + `forbion.f7cloud.ru` (экран входа) и preconnect к `hpb-prod.f7cloud.ru` + (`TalkHelper.buildPreconnectScript` — теперь только origin сессии). ## Отдаёт (provides) - APK `ru.forbion.f7cloud.mobile` (текущая версия 0.5.113 / code 121, diff --git a/app/build.gradle b/app/build.gradle index 6482096..a8e42f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,10 +17,16 @@ android { applicationId 'ru.forbion.f7cloud.mobile' minSdk 26 targetSdk 36 - versionCode 121 - versionName '0.5.113' + versionCode 122 + versionName '0.5.114' missingDimensionStrategy 'default', 'f7' multiDexEnabled true + // Дефолтный адрес сервера на экране входа. Прод-URL в сборку не вшивать + // (решение integrator-b, f7_platform mail/035): для дев-сборки под свой + // стенд задать -Pf7DefaultServerUrl=https://... или f7DefaultServerUrl в + // ~/.gradle/gradle.properties. Без свойства поле входа пустое. + buildConfigField 'String', 'DEFAULT_SERVER_URL', + "\"${project.findProperty('f7DefaultServerUrl') ?: ''}\"" } buildTypes { @@ -34,6 +40,7 @@ android { buildFeatures { compose true + buildConfig true } compileOptions { sourceCompatibility JavaVersion.VERSION_17 diff --git a/app/src/main/java/ru/forbion/f7cloud/mobile/ui/AppScaffold.kt b/app/src/main/java/ru/forbion/f7cloud/mobile/ui/AppScaffold.kt index aa4e59d..9774b99 100644 --- a/app/src/main/java/ru/forbion/f7cloud/mobile/ui/AppScaffold.kt +++ b/app/src/main/java/ru/forbion/f7cloud/mobile/ui/AppScaffold.kt @@ -69,6 +69,7 @@ import kotlinx.coroutines.withContext import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.tasks.await +import ru.forbion.f7cloud.mobile.BuildConfig import ru.forbion.f7cloud.core.auth.AppLockStore import ru.forbion.f7cloud.core.auth.AuthSession import ru.forbion.f7cloud.core.auth.AuthStore @@ -679,7 +680,7 @@ private fun LoginScreen(onLogin: (AuthSession) -> Unit) { val serverFocus = remember { FocusRequester() } val usernameFocus = remember { FocusRequester() } val passwordFocus = remember { FocusRequester() } - var serverUrl by rememberSaveable { mutableStateOf("https://forbion.f7cloud.ru") } + var serverUrl by rememberSaveable { mutableStateOf(BuildConfig.DEFAULT_SERVER_URL) } var username by rememberSaveable { mutableStateOf("") } var password by rememberSaveable { mutableStateOf("") } var trustAllCerts by rememberSaveable { mutableStateOf(false) } diff --git a/core/auth/src/main/java/ru/forbion/f7cloud/core/auth/AuthErrors.kt b/core/auth/src/main/java/ru/forbion/f7cloud/core/auth/AuthErrors.kt index 49fdd4c..5bc72d1 100644 --- a/core/auth/src/main/java/ru/forbion/f7cloud/core/auth/AuthErrors.kt +++ b/core/auth/src/main/java/ru/forbion/f7cloud/core/auth/AuthErrors.kt @@ -23,7 +23,7 @@ fun Throwable.toLoginErrorMessage(): String { "Для внутреннего dev-сервера без Let's Encrypt включите «Доверять сертификату»." } if (this is UnknownHostException) { - return "Сервер не найден. Проверьте адрес (например https://forbion.f7cloud.ru)." + return "Сервер не найден. Проверьте адрес (например https://cloud.ваш-домен.ru)." } if (this is ConnectException) { return "Не удалось подключиться к серверу. Проверьте интернет и адрес." diff --git a/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkHelper.kt b/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkHelper.kt index d282915..b9a4ef1 100644 --- a/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkHelper.kt +++ b/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkHelper.kt @@ -2,14 +2,15 @@ package ru.forbion.f7cloud.feature.talk /** Talk / WebRTC helpers (порт F7TalkHelper из android-webview). */ object TalkHelper { - const val HPB_HOST = "hpb-prod.f7cloud.ru" - + // Preconnect только к серверу сессии. Хост HPB НЕ хардкодим: боевой + // hpb-prod.f7cloud.ru — §3-ресурс ячейки A (f7_platform mail/035), и клиент, + // направленный на другой бэкенд, не должен его касаться. Если преконнект к + // HPB понадобится — брать хост из capabilities spreed (signalingServers). fun buildPreconnectScript(serverOrigin: String): String { val origin = serverOrigin.replace("'", "\\'") - val hpb = HPB_HOST.replace("'", "\\'") return """ (function(){ - var h='$hpb',o='$origin'; + var o='$origin'; function link(rel,href){ try{ if(document.querySelector('link[rel="'+rel+'"][href="'+href+'"]'))return; @@ -18,8 +19,6 @@ object TalkHelper { (document.head||document.documentElement).appendChild(l); }catch(e){} } - link('dns-prefetch','https://'+h); - link('preconnect','https://'+h); link('dns-prefetch',o); link('preconnect',o); })();