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 ->
|
||||
GroupOutputKDB.write(outputStream, group)
|
||||
}
|
||||
mDatabaseKDB.doForEachEntryInIndex { entry ->
|
||||
val binaryCipherKey = mDatabaseKDB.loadedCipherKey
|
||||
?: throw DatabaseOutputException("Unable to retrieve cipher key to write binaries")
|
||||
EntryOutputKDB.writeEntry(outputStream, entry, binaryCipherKey)
|
||||
mDatabaseKDB.doForEachEntryInIndex { entry ->
|
||||
EntryOutputKDB.write(outputStream, entry, binaryCipherKey)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,81 +36,80 @@ class EntryOutputKDB {
|
||||
|
||||
companion object {
|
||||
@Throws(DatabaseOutputException::class)
|
||||
fun writeEntry(mOutputStream: OutputStream,
|
||||
mEntry: EntryKDB,
|
||||
fun write(outputStream: OutputStream,
|
||||
entry: EntryKDB,
|
||||
binaryCipherKey: Database.LoadedKey) {
|
||||
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int
|
||||
try {
|
||||
// UUID
|
||||
mOutputStream.write(UUID_FIELD_TYPE)
|
||||
mOutputStream.write(UUID_FIELD_SIZE)
|
||||
mOutputStream.write(uuidTo16Bytes(mEntry.id))
|
||||
outputStream.write(UUID_FIELD_TYPE)
|
||||
outputStream.write(UUID_FIELD_SIZE)
|
||||
outputStream.write(uuidTo16Bytes(entry.id))
|
||||
|
||||
// Group ID
|
||||
mOutputStream.write(GROUPID_FIELD_TYPE)
|
||||
mOutputStream.write(GROUPID_FIELD_SIZE)
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.parent!!.id)))
|
||||
outputStream.write(GROUPID_FIELD_TYPE)
|
||||
outputStream.write(GROUPID_FIELD_SIZE)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(entry.parent!!.id)))
|
||||
|
||||
// Image ID
|
||||
mOutputStream.write(IMAGEID_FIELD_TYPE)
|
||||
mOutputStream.write(IMAGEID_FIELD_SIZE)
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.icon.iconId)))
|
||||
outputStream.write(IMAGEID_FIELD_TYPE)
|
||||
outputStream.write(IMAGEID_FIELD_SIZE)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(entry.icon.iconId)))
|
||||
|
||||
// Title
|
||||
//byte[] title = mEntry.title.getBytes("UTF-8");
|
||||
mOutputStream.write(TITLE_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.title, mOutputStream)
|
||||
outputStream.write(TITLE_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.title)
|
||||
|
||||
// URL
|
||||
mOutputStream.write(URL_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.url, mOutputStream)
|
||||
outputStream.write(URL_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.url)
|
||||
|
||||
// Username
|
||||
mOutputStream.write(USERNAME_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.username, mOutputStream)
|
||||
outputStream.write(USERNAME_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.username)
|
||||
|
||||
// Password
|
||||
mOutputStream.write(PASSWORD_FIELD_TYPE)
|
||||
writePassword(mOutputStream, mEntry.password)
|
||||
outputStream.write(PASSWORD_FIELD_TYPE)
|
||||
writePassword(outputStream, entry.password)
|
||||
|
||||
// Additional
|
||||
mOutputStream.write(ADDITIONAL_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.notes, mOutputStream)
|
||||
outputStream.write(ADDITIONAL_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.notes)
|
||||
|
||||
// Create date
|
||||
writeDate(mOutputStream, CREATE_FIELD_TYPE, dateTo5Bytes(mEntry.creationTime.date))
|
||||
writeDate(outputStream, CREATE_FIELD_TYPE, dateTo5Bytes(entry.creationTime.date))
|
||||
|
||||
// Modification date
|
||||
writeDate(mOutputStream, MOD_FIELD_TYPE, dateTo5Bytes(mEntry.lastModificationTime.date))
|
||||
writeDate(outputStream, MOD_FIELD_TYPE, dateTo5Bytes(entry.lastModificationTime.date))
|
||||
|
||||
// Access date
|
||||
writeDate(mOutputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(mEntry.lastAccessTime.date))
|
||||
writeDate(outputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(entry.lastAccessTime.date))
|
||||
|
||||
// Expiration date
|
||||
writeDate(mOutputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(mEntry.expiryTime.date))
|
||||
writeDate(outputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(entry.expiryTime.date))
|
||||
|
||||
// Binary description
|
||||
mOutputStream.write(BINARY_DESC_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mEntry.binaryDescription, mOutputStream)
|
||||
outputStream.write(BINARY_DESC_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.binaryDescription)
|
||||
|
||||
// Binary
|
||||
mOutputStream.write(BINARY_DATA_FIELD_TYPE)
|
||||
val binaryData = mEntry.binaryData
|
||||
outputStream.write(BINARY_DATA_FIELD_TYPE)
|
||||
val binaryData = entry.binaryData
|
||||
val binaryDataLength = binaryData?.length ?: 0L
|
||||
// Write data length
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength)))
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength)))
|
||||
// Write data
|
||||
if (binaryDataLength > 0) {
|
||||
binaryData?.getInputDataStream(binaryCipherKey).use { inputStream ->
|
||||
inputStream?.readAllBytes { buffer ->
|
||||
mOutputStream.write(buffer)
|
||||
outputStream.write(buffer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End
|
||||
mOutputStream.write(END_FIELD_TYPE)
|
||||
mOutputStream.write(ZERO_FIELD_SIZE)
|
||||
outputStream.write(END_FIELD_TYPE)
|
||||
outputStream.write(ZERO_FIELD_SIZE)
|
||||
} catch (e: IOException) {
|
||||
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 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 GROUPID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4))
|
||||
private val DATE_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(5))
|
||||
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_FIVE:ByteArray = byteArrayOf(0x00, 0x00, 0x00, 0x00, 0x00)
|
||||
}
|
||||
|
||||
@@ -36,57 +36,57 @@ class GroupOutputKDB {
|
||||
|
||||
companion object {
|
||||
@Throws(DatabaseOutputException::class)
|
||||
fun write(mOutputStream: OutputStream,
|
||||
mGroup: GroupKDB) {
|
||||
fun write(outputStream: OutputStream,
|
||||
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.
|
||||
try {
|
||||
// Group ID
|
||||
mOutputStream.write(GROUPID_FIELD_TYPE)
|
||||
mOutputStream.write(GROUPID_FIELD_SIZE)
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.id)))
|
||||
outputStream.write(GROUPID_FIELD_TYPE)
|
||||
outputStream.write(GROUPID_FIELD_SIZE)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(group.id)))
|
||||
|
||||
// Name
|
||||
mOutputStream.write(NAME_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToBytes(mGroup.title, mOutputStream)
|
||||
outputStream.write(NAME_FIELD_TYPE)
|
||||
StringDatabaseKDBUtils.writeStringToStream(outputStream, group.title)
|
||||
|
||||
// Create date
|
||||
mOutputStream.write(CREATE_FIELD_TYPE)
|
||||
mOutputStream.write(DATE_FIELD_SIZE)
|
||||
mOutputStream.write(dateTo5Bytes(mGroup.creationTime.date))
|
||||
outputStream.write(CREATE_FIELD_TYPE)
|
||||
outputStream.write(DATE_FIELD_SIZE)
|
||||
outputStream.write(dateTo5Bytes(group.creationTime.date))
|
||||
|
||||
// Modification date
|
||||
mOutputStream.write(MOD_FIELD_TYPE)
|
||||
mOutputStream.write(DATE_FIELD_SIZE)
|
||||
mOutputStream.write(dateTo5Bytes(mGroup.lastModificationTime.date))
|
||||
outputStream.write(MOD_FIELD_TYPE)
|
||||
outputStream.write(DATE_FIELD_SIZE)
|
||||
outputStream.write(dateTo5Bytes(group.lastModificationTime.date))
|
||||
|
||||
// Access date
|
||||
mOutputStream.write(ACCESS_FIELD_TYPE)
|
||||
mOutputStream.write(DATE_FIELD_SIZE)
|
||||
mOutputStream.write(dateTo5Bytes(mGroup.lastAccessTime.date))
|
||||
outputStream.write(ACCESS_FIELD_TYPE)
|
||||
outputStream.write(DATE_FIELD_SIZE)
|
||||
outputStream.write(dateTo5Bytes(group.lastAccessTime.date))
|
||||
|
||||
// Expiration date
|
||||
mOutputStream.write(EXPIRE_FIELD_TYPE)
|
||||
mOutputStream.write(DATE_FIELD_SIZE)
|
||||
mOutputStream.write(dateTo5Bytes(mGroup.expiryTime.date))
|
||||
outputStream.write(EXPIRE_FIELD_TYPE)
|
||||
outputStream.write(DATE_FIELD_SIZE)
|
||||
outputStream.write(dateTo5Bytes(group.expiryTime.date))
|
||||
|
||||
// Image ID
|
||||
mOutputStream.write(IMAGEID_FIELD_TYPE)
|
||||
mOutputStream.write(IMAGEID_FIELD_SIZE)
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.icon.iconId)))
|
||||
outputStream.write(IMAGEID_FIELD_TYPE)
|
||||
outputStream.write(IMAGEID_FIELD_SIZE)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(group.icon.iconId)))
|
||||
|
||||
// Level
|
||||
mOutputStream.write(LEVEL_FIELD_TYPE)
|
||||
mOutputStream.write(LEVEL_FIELD_SIZE)
|
||||
mOutputStream.write(uShortTo2Bytes(mGroup.level))
|
||||
outputStream.write(LEVEL_FIELD_TYPE)
|
||||
outputStream.write(LEVEL_FIELD_SIZE)
|
||||
outputStream.write(uShortTo2Bytes(group.level))
|
||||
|
||||
// Flags
|
||||
mOutputStream.write(FLAGS_FIELD_TYPE)
|
||||
mOutputStream.write(FLAGS_FIELD_SIZE)
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.groupFlags)))
|
||||
outputStream.write(FLAGS_FIELD_TYPE)
|
||||
outputStream.write(FLAGS_FIELD_SIZE)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(group.groupFlags)))
|
||||
|
||||
// End
|
||||
mOutputStream.write(END_FIELD_TYPE)
|
||||
mOutputStream.write(ZERO_FIELD_SIZE)
|
||||
outputStream.write(END_FIELD_TYPE)
|
||||
outputStream.write(ZERO_FIELD_SIZE)
|
||||
} catch (e: IOException) {
|
||||
throw DatabaseOutputException("Failed to output a group", e)
|
||||
}
|
||||
|
||||
@@ -53,12 +53,12 @@ object StringDatabaseKDBUtils {
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun writeStringToBytes(string: String?, os: OutputStream): Int {
|
||||
fun writeStringToStream(outputStream: OutputStream, string: String?): Int {
|
||||
var str = string
|
||||
if (str == null) {
|
||||
// Write out a null character
|
||||
os.write(uIntTo4Bytes(UnsignedInt(1)))
|
||||
os.write(0x00)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(1)))
|
||||
outputStream.write(0x00)
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -69,9 +69,9 @@ object StringDatabaseKDBUtils {
|
||||
val initial = str.toByteArray(defaultCharset)
|
||||
|
||||
val length = initial.size + 1
|
||||
os.write(uIntTo4Bytes(UnsignedInt(length)))
|
||||
os.write(initial)
|
||||
os.write(0x00)
|
||||
outputStream.write(uIntTo4Bytes(UnsignedInt(length)))
|
||||
outputStream.write(initial)
|
||||
outputStream.write(0x00)
|
||||
|
||||
return length
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user