Remove READ_PHONE_STATE permission

This commit is contained in:
Torsten Grote 2019-09-12 09:44:18 -03:00
parent 9cede639f3
commit 7455f4afb9
No known key found for this signature in database
GPG key ID: 3E5F77D92CF891FF
5 changed files with 1 additions and 60 deletions

View file

@ -1,13 +1,5 @@
LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := default-permissions_com.stevesoltys.backup.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/default-permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_MODULE := permissions_com.stevesoltys.backup.xml LOCAL_MODULE := permissions_com.stevesoltys.backup.xml
LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_CLASS := ETC
@ -38,4 +30,4 @@ LOCAL_MODULE_CLASS := APPS
LOCAL_PRIVILEGED_MODULE := true LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false LOCAL_DEX_PREOPT := false
LOCAL_REQUIRED_MODULES := permissions_com.stevesoltys.backup.xml whitelist_com.stevesoltys.backup.xml LOCAL_REQUIRED_MODULES := permissions_com.stevesoltys.backup.xml whitelist_com.stevesoltys.backup.xml
include $(BUILD_PREBUILT) include $(BUILD_PREBUILT)

View file

@ -14,10 +14,6 @@
android:name="android.permission.BACKUP" android:name="android.permission.BACKUP"
tools:ignore="ProtectedPermissions" /> tools:ignore="ProtectedPermissions" />
<!-- This is needed to retrieve the serial number of the device,
so we can store the backups for each device in a unique location -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application <application
android:name=".Backup" android:name=".Backup"
android:allowBackup="false" android:allowBackup="false"

View file

@ -1,24 +1,16 @@
package com.stevesoltys.backup package com.stevesoltys.backup
import android.Manifest.permission.READ_PHONE_STATE
import android.app.Application import android.app.Application
import android.app.backup.IBackupManager import android.app.backup.IBackupManager
import android.content.Context.BACKUP_SERVICE import android.content.Context.BACKUP_SERVICE
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.ServiceManager.getService import android.os.ServiceManager.getService
import android.util.Log
import com.stevesoltys.backup.crypto.KeyManager import com.stevesoltys.backup.crypto.KeyManager
import com.stevesoltys.backup.crypto.KeyManagerImpl import com.stevesoltys.backup.crypto.KeyManagerImpl
import com.stevesoltys.backup.settings.getDeviceName
import com.stevesoltys.backup.settings.setDeviceName
import io.github.novacrypto.hashing.Sha256.sha256Twice
private const val URI_AUTHORITY_EXTERNAL_STORAGE = "com.android.externalstorage.documents" private const val URI_AUTHORITY_EXTERNAL_STORAGE = "com.android.externalstorage.documents"
private val TAG = Backup::class.java.simpleName
/** /**
* @author Steve Soltys * @author Steve Soltys
* @author Torsten Grote * @author Torsten Grote
@ -38,27 +30,6 @@ class Backup : Application() {
BackupNotificationManager(this) BackupNotificationManager(this)
} }
override fun onCreate() {
super.onCreate()
storeDeviceName()
}
private fun storeDeviceName() {
if (getDeviceName(this) != null) return // we already have a stored device name
val permission = READ_PHONE_STATE
if (checkSelfPermission(permission) != PERMISSION_GRANTED) {
throw AssertionError("You need to grant the $permission permission.")
}
// TODO consider just using a hash for the entire device name and store metadata in an encrypted file
val id = sha256Twice(Build.getSerial().toByteArray(Utf8))
.copyOfRange(0, 8)
.encodeBase64()
val name = "${Build.MANUFACTURER} ${Build.MODEL} ($id)"
Log.i(TAG, "Initialized device name to: $name")
setDeviceName(this, name)
}
} }
fun Uri.isOnExternalStorage() = authority == URI_AUTHORITY_EXTERNAL_STORAGE fun Uri.isOnExternalStorage() = authority == URI_AUTHORITY_EXTERNAL_STORAGE

View file

@ -7,7 +7,6 @@ import java.util.*
private const val PREF_KEY_BACKUP_URI = "backupUri" private const val PREF_KEY_BACKUP_URI = "backupUri"
private const val PREF_KEY_BACKUP_TOKEN = "backupToken" private const val PREF_KEY_BACKUP_TOKEN = "backupToken"
private const val PREF_KEY_DEVICE_NAME = "deviceName"
private const val PREF_KEY_BACKUP_PASSWORD = "backupLegacyPassword" private const val PREF_KEY_BACKUP_PASSWORD = "backupLegacyPassword"
fun setBackupFolderUri(context: Context, uri: Uri) { fun setBackupFolderUri(context: Context, uri: Uri) {
@ -41,17 +40,6 @@ fun getBackupToken(context: Context): Long {
return getDefaultSharedPreferences(context).getLong(PREF_KEY_BACKUP_TOKEN, 0L) return getDefaultSharedPreferences(context).getLong(PREF_KEY_BACKUP_TOKEN, 0L)
} }
fun setDeviceName(context: Context, name: String) {
getDefaultSharedPreferences(context)
.edit()
.putString(PREF_KEY_DEVICE_NAME, name)
.apply()
}
fun getDeviceName(context: Context): String? {
return getDefaultSharedPreferences(context).getString(PREF_KEY_DEVICE_NAME, null)
}
@Deprecated("Replaced by KeyManager#getBackupKey()") @Deprecated("Replaced by KeyManager#getBackupKey()")
fun getBackupPassword(context: Context): String? { fun getBackupPassword(context: Context): String? {
return getDefaultSharedPreferences(context).getString(PREF_KEY_BACKUP_PASSWORD, null) return getDefaultSharedPreferences(context).getString(PREF_KEY_BACKUP_PASSWORD, null)

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<exceptions>
<exception package="com.stevesoltys.backup">
<permission name="android.permission.READ_PHONE_STATE" fixed="true"/>
</exception>
</exceptions>