mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Small refactoring code
This commit is contained in:
@@ -215,10 +215,10 @@ class DatabaseOutputKDB(private val mDatabaseKDB: DatabaseKDB,
|
|||||||
mDatabaseKDB.doForEachGroupInIndex { group ->
|
mDatabaseKDB.doForEachGroupInIndex { group ->
|
||||||
GroupOutputKDB.write(outputStream, group)
|
GroupOutputKDB.write(outputStream, group)
|
||||||
}
|
}
|
||||||
|
val binaryCipherKey = mDatabaseKDB.loadedCipherKey
|
||||||
|
?: throw DatabaseOutputException("Unable to retrieve cipher key to write binaries")
|
||||||
mDatabaseKDB.doForEachEntryInIndex { entry ->
|
mDatabaseKDB.doForEachEntryInIndex { entry ->
|
||||||
val binaryCipherKey = mDatabaseKDB.loadedCipherKey
|
EntryOutputKDB.write(outputStream, entry, binaryCipherKey)
|
||||||
?: throw DatabaseOutputException("Unable to retrieve cipher key to write binaries")
|
|
||||||
EntryOutputKDB.writeEntry(outputStream, entry, binaryCipherKey)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,81 +36,80 @@ class EntryOutputKDB {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@Throws(DatabaseOutputException::class)
|
@Throws(DatabaseOutputException::class)
|
||||||
fun writeEntry(mOutputStream: OutputStream,
|
fun write(outputStream: OutputStream,
|
||||||
mEntry: EntryKDB,
|
entry: EntryKDB,
|
||||||
binaryCipherKey: Database.LoadedKey) {
|
binaryCipherKey: Database.LoadedKey) {
|
||||||
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int
|
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int
|
||||||
try {
|
try {
|
||||||
// UUID
|
// UUID
|
||||||
mOutputStream.write(UUID_FIELD_TYPE)
|
outputStream.write(UUID_FIELD_TYPE)
|
||||||
mOutputStream.write(UUID_FIELD_SIZE)
|
outputStream.write(UUID_FIELD_SIZE)
|
||||||
mOutputStream.write(uuidTo16Bytes(mEntry.id))
|
outputStream.write(uuidTo16Bytes(entry.id))
|
||||||
|
|
||||||
// Group ID
|
// Group ID
|
||||||
mOutputStream.write(GROUPID_FIELD_TYPE)
|
outputStream.write(GROUPID_FIELD_TYPE)
|
||||||
mOutputStream.write(GROUPID_FIELD_SIZE)
|
outputStream.write(GROUPID_FIELD_SIZE)
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.parent!!.id)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(entry.parent!!.id)))
|
||||||
|
|
||||||
// Image ID
|
// Image ID
|
||||||
mOutputStream.write(IMAGEID_FIELD_TYPE)
|
outputStream.write(IMAGEID_FIELD_TYPE)
|
||||||
mOutputStream.write(IMAGEID_FIELD_SIZE)
|
outputStream.write(IMAGEID_FIELD_SIZE)
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.icon.iconId)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(entry.icon.iconId)))
|
||||||
|
|
||||||
// Title
|
// Title
|
||||||
//byte[] title = mEntry.title.getBytes("UTF-8");
|
outputStream.write(TITLE_FIELD_TYPE)
|
||||||
mOutputStream.write(TITLE_FIELD_TYPE)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.title)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.title, mOutputStream)
|
|
||||||
|
|
||||||
// URL
|
// URL
|
||||||
mOutputStream.write(URL_FIELD_TYPE)
|
outputStream.write(URL_FIELD_TYPE)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.url, mOutputStream)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.url)
|
||||||
|
|
||||||
// Username
|
// Username
|
||||||
mOutputStream.write(USERNAME_FIELD_TYPE)
|
outputStream.write(USERNAME_FIELD_TYPE)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.username, mOutputStream)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.username)
|
||||||
|
|
||||||
// Password
|
// Password
|
||||||
mOutputStream.write(PASSWORD_FIELD_TYPE)
|
outputStream.write(PASSWORD_FIELD_TYPE)
|
||||||
writePassword(mOutputStream, mEntry.password)
|
writePassword(outputStream, entry.password)
|
||||||
|
|
||||||
// Additional
|
// Additional
|
||||||
mOutputStream.write(ADDITIONAL_FIELD_TYPE)
|
outputStream.write(ADDITIONAL_FIELD_TYPE)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.notes, mOutputStream)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.notes)
|
||||||
|
|
||||||
// Create date
|
// Create date
|
||||||
writeDate(mOutputStream, CREATE_FIELD_TYPE, dateTo5Bytes(mEntry.creationTime.date))
|
writeDate(outputStream, CREATE_FIELD_TYPE, dateTo5Bytes(entry.creationTime.date))
|
||||||
|
|
||||||
// Modification date
|
// Modification date
|
||||||
writeDate(mOutputStream, MOD_FIELD_TYPE, dateTo5Bytes(mEntry.lastModificationTime.date))
|
writeDate(outputStream, MOD_FIELD_TYPE, dateTo5Bytes(entry.lastModificationTime.date))
|
||||||
|
|
||||||
// Access date
|
// Access date
|
||||||
writeDate(mOutputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(mEntry.lastAccessTime.date))
|
writeDate(outputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(entry.lastAccessTime.date))
|
||||||
|
|
||||||
// Expiration date
|
// Expiration date
|
||||||
writeDate(mOutputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(mEntry.expiryTime.date))
|
writeDate(outputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(entry.expiryTime.date))
|
||||||
|
|
||||||
// Binary description
|
// Binary description
|
||||||
mOutputStream.write(BINARY_DESC_FIELD_TYPE)
|
outputStream.write(BINARY_DESC_FIELD_TYPE)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.binaryDescription, mOutputStream)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.binaryDescription)
|
||||||
|
|
||||||
// Binary
|
// Binary
|
||||||
mOutputStream.write(BINARY_DATA_FIELD_TYPE)
|
outputStream.write(BINARY_DATA_FIELD_TYPE)
|
||||||
val binaryData = mEntry.binaryData
|
val binaryData = entry.binaryData
|
||||||
val binaryDataLength = binaryData?.length ?: 0L
|
val binaryDataLength = binaryData?.length ?: 0L
|
||||||
// Write data length
|
// Write data length
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength)))
|
||||||
// Write data
|
// Write data
|
||||||
if (binaryDataLength > 0) {
|
if (binaryDataLength > 0) {
|
||||||
binaryData?.getInputDataStream(binaryCipherKey).use { inputStream ->
|
binaryData?.getInputDataStream(binaryCipherKey).use { inputStream ->
|
||||||
inputStream?.readAllBytes { buffer ->
|
inputStream?.readAllBytes { buffer ->
|
||||||
mOutputStream.write(buffer)
|
outputStream.write(buffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// End
|
// End
|
||||||
mOutputStream.write(END_FIELD_TYPE)
|
outputStream.write(END_FIELD_TYPE)
|
||||||
mOutputStream.write(ZERO_FIELD_SIZE)
|
outputStream.write(ZERO_FIELD_SIZE)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw DatabaseOutputException("Failed to output an entry.", e)
|
throw DatabaseOutputException("Failed to output an entry.", e)
|
||||||
}
|
}
|
||||||
@@ -156,13 +155,10 @@ class EntryOutputKDB {
|
|||||||
private val BINARY_DATA_FIELD_TYPE:ByteArray = uShortTo2Bytes(14)
|
private val BINARY_DATA_FIELD_TYPE:ByteArray = uShortTo2Bytes(14)
|
||||||
private val END_FIELD_TYPE:ByteArray = uShortTo2Bytes(0xFFFF)
|
private val END_FIELD_TYPE:ByteArray = uShortTo2Bytes(0xFFFF)
|
||||||
|
|
||||||
private val LONG_FOUR:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
|
||||||
private val UUID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(16))
|
private val UUID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(16))
|
||||||
private val GROUPID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
private val GROUPID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
||||||
private val DATE_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(5))
|
private val DATE_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(5))
|
||||||
private val IMAGEID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
private val IMAGEID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
||||||
private val LEVEL_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
|
||||||
private val FLAGS_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
|
||||||
private val ZERO_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(0))
|
private val ZERO_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(0))
|
||||||
private val ZERO_FIVE:ByteArray = byteArrayOf(0x00, 0x00, 0x00, 0x00, 0x00)
|
private val ZERO_FIVE:ByteArray = byteArrayOf(0x00, 0x00, 0x00, 0x00, 0x00)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,57 +36,57 @@ class GroupOutputKDB {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@Throws(DatabaseOutputException::class)
|
@Throws(DatabaseOutputException::class)
|
||||||
fun write(mOutputStream: OutputStream,
|
fun write(outputStream: OutputStream,
|
||||||
mGroup: GroupKDB) {
|
group: GroupKDB) {
|
||||||
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int, but most values can't be greater than 2^31, so it probably doesn't matter.
|
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int, but most values can't be greater than 2^31, so it probably doesn't matter.
|
||||||
try {
|
try {
|
||||||
// Group ID
|
// Group ID
|
||||||
mOutputStream.write(GROUPID_FIELD_TYPE)
|
outputStream.write(GROUPID_FIELD_TYPE)
|
||||||
mOutputStream.write(GROUPID_FIELD_SIZE)
|
outputStream.write(GROUPID_FIELD_SIZE)
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.id)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(group.id)))
|
||||||
|
|
||||||
// Name
|
// Name
|
||||||
mOutputStream.write(NAME_FIELD_TYPE)
|
outputStream.write(NAME_FIELD_TYPE)
|
||||||
StringDatabaseKDBUtils.writeStringToBytes(mGroup.title, mOutputStream)
|
StringDatabaseKDBUtils.writeStringToStream(outputStream, group.title)
|
||||||
|
|
||||||
// Create date
|
// Create date
|
||||||
mOutputStream.write(CREATE_FIELD_TYPE)
|
outputStream.write(CREATE_FIELD_TYPE)
|
||||||
mOutputStream.write(DATE_FIELD_SIZE)
|
outputStream.write(DATE_FIELD_SIZE)
|
||||||
mOutputStream.write(dateTo5Bytes(mGroup.creationTime.date))
|
outputStream.write(dateTo5Bytes(group.creationTime.date))
|
||||||
|
|
||||||
// Modification date
|
// Modification date
|
||||||
mOutputStream.write(MOD_FIELD_TYPE)
|
outputStream.write(MOD_FIELD_TYPE)
|
||||||
mOutputStream.write(DATE_FIELD_SIZE)
|
outputStream.write(DATE_FIELD_SIZE)
|
||||||
mOutputStream.write(dateTo5Bytes(mGroup.lastModificationTime.date))
|
outputStream.write(dateTo5Bytes(group.lastModificationTime.date))
|
||||||
|
|
||||||
// Access date
|
// Access date
|
||||||
mOutputStream.write(ACCESS_FIELD_TYPE)
|
outputStream.write(ACCESS_FIELD_TYPE)
|
||||||
mOutputStream.write(DATE_FIELD_SIZE)
|
outputStream.write(DATE_FIELD_SIZE)
|
||||||
mOutputStream.write(dateTo5Bytes(mGroup.lastAccessTime.date))
|
outputStream.write(dateTo5Bytes(group.lastAccessTime.date))
|
||||||
|
|
||||||
// Expiration date
|
// Expiration date
|
||||||
mOutputStream.write(EXPIRE_FIELD_TYPE)
|
outputStream.write(EXPIRE_FIELD_TYPE)
|
||||||
mOutputStream.write(DATE_FIELD_SIZE)
|
outputStream.write(DATE_FIELD_SIZE)
|
||||||
mOutputStream.write(dateTo5Bytes(mGroup.expiryTime.date))
|
outputStream.write(dateTo5Bytes(group.expiryTime.date))
|
||||||
|
|
||||||
// Image ID
|
// Image ID
|
||||||
mOutputStream.write(IMAGEID_FIELD_TYPE)
|
outputStream.write(IMAGEID_FIELD_TYPE)
|
||||||
mOutputStream.write(IMAGEID_FIELD_SIZE)
|
outputStream.write(IMAGEID_FIELD_SIZE)
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.icon.iconId)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(group.icon.iconId)))
|
||||||
|
|
||||||
// Level
|
// Level
|
||||||
mOutputStream.write(LEVEL_FIELD_TYPE)
|
outputStream.write(LEVEL_FIELD_TYPE)
|
||||||
mOutputStream.write(LEVEL_FIELD_SIZE)
|
outputStream.write(LEVEL_FIELD_SIZE)
|
||||||
mOutputStream.write(uShortTo2Bytes(mGroup.level))
|
outputStream.write(uShortTo2Bytes(group.level))
|
||||||
|
|
||||||
// Flags
|
// Flags
|
||||||
mOutputStream.write(FLAGS_FIELD_TYPE)
|
outputStream.write(FLAGS_FIELD_TYPE)
|
||||||
mOutputStream.write(FLAGS_FIELD_SIZE)
|
outputStream.write(FLAGS_FIELD_SIZE)
|
||||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.groupFlags)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(group.groupFlags)))
|
||||||
|
|
||||||
// End
|
// End
|
||||||
mOutputStream.write(END_FIELD_TYPE)
|
outputStream.write(END_FIELD_TYPE)
|
||||||
mOutputStream.write(ZERO_FIELD_SIZE)
|
outputStream.write(ZERO_FIELD_SIZE)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw DatabaseOutputException("Failed to output a group", e)
|
throw DatabaseOutputException("Failed to output a group", e)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,12 +53,12 @@ object StringDatabaseKDBUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
fun writeStringToBytes(string: String?, os: OutputStream): Int {
|
fun writeStringToStream(outputStream: OutputStream, string: String?): Int {
|
||||||
var str = string
|
var str = string
|
||||||
if (str == null) {
|
if (str == null) {
|
||||||
// Write out a null character
|
// Write out a null character
|
||||||
os.write(uIntTo4Bytes(UnsignedInt(1)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(1)))
|
||||||
os.write(0x00)
|
outputStream.write(0x00)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,9 +69,9 @@ object StringDatabaseKDBUtils {
|
|||||||
val initial = str.toByteArray(defaultCharset)
|
val initial = str.toByteArray(defaultCharset)
|
||||||
|
|
||||||
val length = initial.size + 1
|
val length = initial.size + 1
|
||||||
os.write(uIntTo4Bytes(UnsignedInt(length)))
|
outputStream.write(uIntTo4Bytes(UnsignedInt(length)))
|
||||||
os.write(initial)
|
outputStream.write(initial)
|
||||||
os.write(0x00)
|
outputStream.write(0x00)
|
||||||
|
|
||||||
return length
|
return length
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user