Fix reloading database

This commit is contained in:
J-Jamet
2021-02-12 10:34:41 +01:00
parent 0f53c975cc
commit cfe01aa996
6 changed files with 12 additions and 58 deletions

View File

@@ -55,6 +55,7 @@ class LoadDatabaseRunnable(private val context: Context,
mReadonly,
context.contentResolver,
UriUtil.getBinaryDir(context),
Database.LoadedKey.generateNewCipherKey(),
mFixDuplicateUUID,
progressTaskUpdater)
}

View File

@@ -33,7 +33,10 @@ class ReloadDatabaseRunnable(private val context: Context,
private val mLoadDatabaseResult: ((Result) -> Unit)?)
: ActionRunnable() {
private var tempCipherKey: Database.LoadedKey? = null
override fun onStartRun() {
tempCipherKey = mDatabase.loadedCipherKey
// Clear before we load
mDatabase.clear(UriUtil.getBinaryDir(context))
}
@@ -42,6 +45,7 @@ class ReloadDatabaseRunnable(private val context: Context,
try {
mDatabase.reloadData(context.contentResolver,
UriUtil.getBinaryDir(context),
tempCipherKey ?: Database.LoadedKey.generateNewCipherKey(),
progressTaskUpdater)
} catch (e: LoadDatabaseException) {
setError(e)
@@ -51,6 +55,7 @@ class ReloadDatabaseRunnable(private val context: Context,
// Register the current time to init the lock timer
PreferencesUtil.saveCurrentTime(context)
} else {
tempCipherKey = null
mDatabase.clearAndClose(UriUtil.getBinaryDir(context))
}
}

View File

@@ -411,6 +411,7 @@ class Database {
readOnly: Boolean,
contentResolver: ContentResolver,
cacheDirectory: File,
tempCipherKey: LoadedKey,
fixDuplicateUUID: Boolean,
progressTaskUpdater: ProgressTaskUpdater?) {
@@ -435,7 +436,7 @@ class Database {
.openDatabase(databaseInputStream,
mainCredential.masterPassword,
keyFileInputStream,
LoadedKey.generateNewCipherKey(),
tempCipherKey,
progressTaskUpdater,
fixDuplicateUUID)
},
@@ -444,7 +445,7 @@ class Database {
.openDatabase(databaseInputStream,
mainCredential.masterPassword,
keyFileInputStream,
LoadedKey.generateNewCipherKey(),
tempCipherKey,
progressTaskUpdater,
fixDuplicateUUID)
}
@@ -464,6 +465,7 @@ class Database {
@Throws(LoadDatabaseException::class)
fun reloadData(contentResolver: ContentResolver,
cacheDirectory: File,
tempCipherKey: LoadedKey,
progressTaskUpdater: ProgressTaskUpdater?) {
// Retrieve the stream from the old database URI
@@ -474,12 +476,14 @@ class Database {
DatabaseInputKDB(cacheDirectory)
.openDatabase(databaseInputStream,
masterKey,
tempCipherKey,
progressTaskUpdater)
},
{ databaseInputStream ->
DatabaseInputKDBX(cacheDirectory)
.openDatabase(databaseInputStream,
masterKey,
tempCipherKey,
progressTaskUpdater)
}
)

View File

@@ -38,19 +38,6 @@ abstract class DatabaseInput<PwDb : DatabaseVersioned<*, *, *, *>>
*
* @throws LoadDatabaseException on database error (contains IO exceptions)
*/
@Throws(LoadDatabaseException::class)
abstract fun openDatabase(databaseInputStream: InputStream,
password: String?,
keyfileInputStream: InputStream?,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean = false): PwDb
@Throws(LoadDatabaseException::class)
abstract fun openDatabase(databaseInputStream: InputStream,
masterKey: ByteArray,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean = false): PwDb
@Throws(LoadDatabaseException::class)
abstract fun openDatabase(databaseInputStream: InputStream,

View File

@@ -51,28 +51,6 @@ class DatabaseInputKDB(cacheDirectory: File)
private lateinit var mDatabase: DatabaseKDB
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
password: String?,
keyfileInputStream: InputStream?,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean): DatabaseKDB {
return openDatabase(databaseInputStream, progressTaskUpdater, fixDuplicateUUID) {
mDatabase.retrieveMasterKey(password, keyfileInputStream)
}
}
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
masterKey: ByteArray,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean): DatabaseKDB {
return openDatabase(databaseInputStream, progressTaskUpdater, fixDuplicateUUID) {
mDatabase.masterKey = masterKey
}
}
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
password: String?,

View File

@@ -94,27 +94,6 @@ class DatabaseInputKDBX(cacheDirectory: File)
private var entryCustomDataKey: String? = null
private var entryCustomDataValue: String? = null
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
password: String?,
keyfileInputStream: InputStream?,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean): DatabaseKDBX {
return openDatabase(databaseInputStream, progressTaskUpdater, fixDuplicateUUID) {
mDatabase.retrieveMasterKey(password, keyfileInputStream)
}
}
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
masterKey: ByteArray,
progressTaskUpdater: ProgressTaskUpdater?,
fixDuplicateUUID: Boolean): DatabaseKDBX {
return openDatabase(databaseInputStream, progressTaskUpdater, fixDuplicateUUID) {
mDatabase.masterKey = masterKey
}
}
@Throws(LoadDatabaseException::class)
override fun openDatabase(databaseInputStream: InputStream,
password: String?,