Skip to content

Commit 6bef2aa

Browse files
committed
feat: implement package name and signing key validation for updates
- Add validation logic to `DetailsViewModel` to ensure the downloaded APK package name matches the installed application before proceeding with an update. - Enhance `AutoUpdateWorker` to perform package name verification, throwing an exception and skipping the update if a mismatch is detected. - Introduce new localized string resources for "Package mismatch" and "Signing key mismatch" errors across multiple languages (Arabic, Bengali, Chinese, English, French, Hindi, Italian, Japanese, Korean, Polish, Russian, Spanish, Turkish). - Update error handling UI to display specific mismatch messages and block invalid updates.
1 parent b33de39 commit 6bef2aa

15 files changed

Lines changed: 61 additions & 0 deletions

File tree

core/data/src/androidMain/kotlin/zed/rainxch/core/data/services/AutoUpdateWorker.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,18 @@ class AutoUpdateWorker(
154154
installer.getApkInfoExtractor().extractPackageInfo(filePath)
155155
?: throw IllegalStateException("Failed to extract APK info for ${app.appName}")
156156

157+
// Validate package name matches
158+
if (apkInfo.packageName != app.packageName) {
159+
Logger.e {
160+
"AutoUpdateWorker: Package name mismatch for ${app.appName}! " +
161+
"Expected: ${app.packageName}, got: ${apkInfo.packageName}. " +
162+
"Skipping auto-update."
163+
}
164+
throw IllegalStateException(
165+
"Package name mismatch for ${app.appName}: expected ${app.packageName}, got ${apkInfo.packageName}",
166+
)
167+
}
168+
157169
val currentApp = installedAppsRepository.getAppByPackage(app.packageName)
158170

159171
if (currentApp?.signingFingerprint != null) {

core/presentation/src/commonMain/composeResources/values-ar/strings-ar.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,4 +581,6 @@
581581
<string name="translation_error_retry">إعادة المحاولة</string>
582582
<string name="translated_from">اكتشاف تلقائي: %1$s</string>
583583
<string name="select_language">اختر اللغة</string>
584+
<string name="update_package_mismatch">عدم تطابق الحزمة: ملف APK هو %1$s، لكن التطبيق المثبت هو %2$s. تم حظر التحديث.</string>
585+
<string name="update_signing_key_mismatch">عدم تطابق مفتاح التوقيع: تم توقيع التحديث بواسطة مطور مختلف. تم حظر التحديث.</string>
584586
</resources>

core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,6 @@
580580
<string name="translation_error_retry">পুনরায় চেষ্টা</string>
581581
<string name="translated_from">স্বয়ংক্রিয়ভাবে শনাক্ত: %1$s</string>
582582
<string name="select_language">ভাষা নির্বাচন করুন</string>
583+
<string name="update_package_mismatch">প্যাকেজ অমিল: APK হলো %1$s, কিন্তু ইনস্টল করা অ্যাপ হলো %2$s। আপডেট ব্লক করা হয়েছে।</string>
584+
<string name="update_signing_key_mismatch">সাইনিং কী অমিল: আপডেটটি একজন ভিন্ন ডেভেলপার দ্বারা সাইন করা হয়েছে। আপডেট ব্লক করা হয়েছে।</string>
583585
</resources>

core/presentation/src/commonMain/composeResources/values-es/strings-es.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,4 +541,6 @@
541541
<string name="translation_error_retry">Reintentar</string>
542542
<string name="translated_from">Detectado automáticamente: %1$s</string>
543543
<string name="select_language">Seleccionar idioma</string>
544+
<string name="update_package_mismatch">Paquete no coincide: el APK es %1$s, pero la aplicación instalada es %2$s. Actualización bloqueada.</string>
545+
<string name="update_signing_key_mismatch">Clave de firma no coincide: la actualización fue firmada por un desarrollador diferente. Actualización bloqueada.</string>
544546
</resources>

core/presentation/src/commonMain/composeResources/values-fr/strings-fr.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,4 +542,6 @@
542542
<string name="translation_error_retry">Réessayer</string>
543543
<string name="translated_from">Détection automatique : %1$s</string>
544544
<string name="select_language">Sélectionner la langue</string>
545+
<string name="update_package_mismatch">Incompatibilité de paquet : l\'APK est %1$s, mais l\'application installée est %2$s. Mise à jour bloquée.</string>
546+
<string name="update_signing_key_mismatch">Incompatibilité de clé de signature : la mise à jour a été signée par un développeur différent. Mise à jour bloquée.</string>
545547
</resources>

core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,6 @@
580580
<string name="translation_error_retry">पुनः प्रयास</string>
581581
<string name="translated_from">स्वतः पहचाना गया: %1$s</string>
582582
<string name="select_language">भाषा चुनें</string>
583+
<string name="update_package_mismatch">पैकेज मेल नहीं खाता: APK %1$s है, लेकिन इंस्टॉल किया गया ऐप %2$s है। अपडेट ब्लॉक किया गया।</string>
584+
<string name="update_signing_key_mismatch">साइनिंग कुंजी मेल नहीं खाती: अपडेट किसी अन्य डेवलपर द्वारा साइन किया गया था। अपडेट ब्लॉक किया गया।</string>
583585
</resources>

core/presentation/src/commonMain/composeResources/values-it/strings-it.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,6 @@
580580
<string name="translation_error_retry">Riprova</string>
581581
<string name="translated_from">Rilevato automaticamente: %1$s</string>
582582
<string name="select_language">Seleziona lingua</string>
583+
<string name="update_package_mismatch">Pacchetto non corrispondente: l\'APK è %1$s, ma l\'app installata è %2$s. Aggiornamento bloccato.</string>
584+
<string name="update_signing_key_mismatch">Chiave di firma non corrispondente: l\'aggiornamento è stato firmato da uno sviluppatore diverso. Aggiornamento bloccato.</string>
583585
</resources>

core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,4 +542,6 @@
542542
<string name="translation_error_retry">再試行</string>
543543
<string name="translated_from">自動検出:%1$s</string>
544544
<string name="select_language">言語を選択</string>
545+
<string name="update_package_mismatch">パッケージの不一致: APKは%1$sですが、インストール済みアプリは%2$sです。更新がブロックされました。</string>
546+
<string name="update_signing_key_mismatch">署名キーの不一致: 更新は別の開発者によって署名されています。更新がブロックされました。</string>
545547
</resources>

core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,4 +577,6 @@
577577
<string name="translation_error_retry">재시도</string>
578578
<string name="translated_from">자동 감지: %1$s</string>
579579
<string name="select_language">언어 선택</string>
580+
<string name="update_package_mismatch">패키지 불일치: APK는 %1$s이지만 설치된 앱은 %2$s입니다. 업데이트가 차단되었습니다.</string>
581+
<string name="update_signing_key_mismatch">서명 키 불일치: 업데이트가 다른 개발자에 의해 서명되었습니다. 업데이트가 차단되었습니다.</string>
580582
</resources>

core/presentation/src/commonMain/composeResources/values-pl/strings-pl.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,4 +544,6 @@
544544
<string name="translation_error_retry">Ponów</string>
545545
<string name="translated_from">Wykryto automatycznie: %1$s</string>
546546
<string name="select_language">Wybierz język</string>
547+
<string name="update_package_mismatch">Niezgodność pakietu: APK to %1$s, ale zainstalowana aplikacja to %2$s. Aktualizacja zablokowana.</string>
548+
<string name="update_signing_key_mismatch">Niezgodność klucza podpisu: aktualizacja została podpisana przez innego programistę. Aktualizacja zablokowana.</string>
547549
</resources>

0 commit comments

Comments
 (0)