From ba5f81ee863903d6c080a0dfca65c7c766c29c52 Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Mon, 14 Apr 2025 22:17:21 +0200 Subject: [PATCH] Show icon in react native app (#771) --- mobile-app/app/(tabs)/(credentials)/[id].tsx | 12 +- mobile-app/app/(tabs)/(credentials)/index.tsx | 51 +++++-- mobile-app/app/(tabs)/emails.tsx | 1 - mobile-app/app/components/CredentialIcon.tsx | 0 mobile-app/app/login.tsx | 4 +- .../assets/images/partial-react-logo.png | Bin 5075 -> 0 bytes mobile-app/assets/images/react-logo.png | Bin 6341 -> 0 bytes mobile-app/assets/images/react-logo@2x.png | Bin 14225 -> 0 bytes mobile-app/assets/images/react-logo@3x.png | Bin 21252 -> 0 bytes .../assets/images/service-placeholder.webp | Bin 0 -> 117366 bytes mobile-app/components/CredentialIcon.tsx | 135 +++++++++++++++++ .../SharedCredentialStore.swift | 113 +++++++++------ mobile-app/ios/Podfile.lock | 47 ++++++ .../ios/aliasvault.xcodeproj/project.pbxproj | 2 + mobile-app/package-lock.json | 137 +++++++++++++++++- mobile-app/package.json | 1 + mobile-app/utils/SqliteClient.tsx | 112 +------------- 17 files changed, 433 insertions(+), 182 deletions(-) create mode 100644 mobile-app/app/components/CredentialIcon.tsx delete mode 100644 mobile-app/assets/images/partial-react-logo.png delete mode 100644 mobile-app/assets/images/react-logo.png delete mode 100644 mobile-app/assets/images/react-logo@2x.png delete mode 100644 mobile-app/assets/images/react-logo@3x.png create mode 100644 mobile-app/assets/images/service-placeholder.webp create mode 100644 mobile-app/components/CredentialIcon.tsx diff --git a/mobile-app/app/(tabs)/(credentials)/[id].tsx b/mobile-app/app/(tabs)/(credentials)/[id].tsx index d44f06566..942edd658 100644 --- a/mobile-app/app/(tabs)/(credentials)/[id].tsx +++ b/mobile-app/app/(tabs)/(credentials)/[id].tsx @@ -9,6 +9,7 @@ import { useDb } from '@/context/DbContext'; import { Credential } from '@/utils/types/Credential'; import SqliteClient from '@/utils/SqliteClient'; import { ThemedScrollView } from '@/components/ThemedScrollView'; +import { CredentialIcon } from '@/components/CredentialIcon'; interface FormInputCopyToClipboardProps { label: string; @@ -89,7 +90,7 @@ export default function CredentialDetailsScreen() { useEffect(() => { const loadCredential = async () => { if (!dbContext.dbAvailable || !id) return; - + try { const cred = await dbContext.sqliteClient!.getCredentialById(id as string); if (cred?.Alias?.BirthDate) { @@ -132,12 +133,7 @@ export default function CredentialDetailsScreen() { return ( - {credential.Logo && ( - - )} + {credential.ServiceName} @@ -292,4 +288,4 @@ const styles = StyleSheet.create({ notes: { fontSize: 14, }, -}); \ No newline at end of file +}); \ No newline at end of file diff --git a/mobile-app/app/(tabs)/(credentials)/index.tsx b/mobile-app/app/(tabs)/(credentials)/index.tsx index 655a9c5e9..ab2de8d93 100644 --- a/mobile-app/app/(tabs)/(credentials)/index.tsx +++ b/mobile-app/app/(tabs)/(credentials)/index.tsx @@ -1,4 +1,4 @@ -import { StyleSheet, View, Text, FlatList, ActivityIndicator, useColorScheme, TouchableOpacity, TextInput, Keyboard } from 'react-native'; +import { StyleSheet, View, Text, FlatList, ActivityIndicator, useColorScheme, TouchableOpacity, TextInput, Keyboard, Image } from 'react-native'; import { useState, useEffect } from 'react'; import { router, Stack } from 'expo-router'; @@ -8,6 +8,7 @@ import { ThemedSafeAreaView } from '@/components/ThemedSafeAreaView'; import { useDb } from '@/context/DbContext'; import { useAuth } from '@/context/AuthContext'; import { Credential } from '@/utils/types/Credential'; +import { CredentialIcon } from '@/components/CredentialIcon'; export default function CredentialsScreen() { const colorScheme = useColorScheme(); @@ -109,19 +110,24 @@ export default function CredentialsScreen() { style={[styles.credentialItem, dynamicStyles.credentialItem]} activeOpacity={0.7} > - - {item.ServiceName ?? 'Unknown Service'} - - {item.Username && ( - - Username: {item.Username} - - )} - {item.Alias?.Email && ( - - Email: {item.Alias.Email} - - )} + + + + + {item.ServiceName ?? 'Unknown Service'} + + {item.Username && ( + + Username: {item.Username} + + )} + {item.Alias?.Email && ( + + Email: {item.Alias.Email} + + )} + + )} ListEmptyComponent={ @@ -157,11 +163,24 @@ const styles = StyleSheet.create({ gap: 8, }, credentialItem: { - padding: 16, + padding: 12, borderRadius: 8, marginBottom: 8, borderWidth: 1, }, + credentialContent: { + flexDirection: 'row', + alignItems: 'center', + }, + logo: { + width: 32, + height: 32, + borderRadius: 4, + marginRight: 12, + }, + credentialInfo: { + flex: 1, + }, serviceName: { fontSize: 16, fontWeight: '600', @@ -181,4 +200,4 @@ const styles = StyleSheet.create({ marginBottom: 16, fontSize: 16, }, -}); \ No newline at end of file +}); \ No newline at end of file diff --git a/mobile-app/app/(tabs)/emails.tsx b/mobile-app/app/(tabs)/emails.tsx index 06e70c4f9..43605bd8a 100644 --- a/mobile-app/app/(tabs)/emails.tsx +++ b/mobile-app/app/(tabs)/emails.tsx @@ -49,7 +49,6 @@ export default function TabTwoScreen() { @3x suffixes to provide files for different screen densities - Learn more diff --git a/mobile-app/app/components/CredentialIcon.tsx b/mobile-app/app/components/CredentialIcon.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/mobile-app/app/login.tsx b/mobile-app/app/login.tsx index bd6cf1ba6..8a762ab49 100644 --- a/mobile-app/app/login.tsx +++ b/mobile-app/app/login.tsx @@ -208,7 +208,7 @@ export default function LoginScreen() { AliasVault - + {error && ( {error} @@ -391,4 +391,4 @@ const styles = StyleSheet.create({ textAlign: 'center', marginTop: 16, }, -}); \ No newline at end of file +}); \ No newline at end of file diff --git a/mobile-app/assets/images/partial-react-logo.png b/mobile-app/assets/images/partial-react-logo.png deleted file mode 100644 index 66fd9570e4fac42bca15352def191c563100b2ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5075 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 diff --git a/mobile-app/assets/images/react-logo.png b/mobile-app/assets/images/react-logo.png deleted file mode 100644 index 9d72a9ffcbb39d89709073e1a7edd8ba414932c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6341 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

OG^bt6yG2??7FhdGVc8feK}syBta)V!iG4 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

SsbbN@npTAT2(lQr1)nm`2 zk-yC$@>p6=O-1jt{LJ?gUsIXZIG(H`DN0>+)s_uVPMF^Z^!ydro1kc?9dw;uMHBcg z#TH5XeI_MCSbkjQj$Q%p(6q`NGoXv1gF`v}dR@kQtt-PfT6$G8X<9!;Z z(q-mSs<;Ra9SNERG5!6scxrO*SdeLsBW+bkAm6~=o*|L^Wd_akPxPwiNf1Am4w1V@ zp(uu*VqB*!O4+cAi`w%@X-!D!ba;@v$ zT9Qk|`P47#Pr-IZ!(L51;6qK2e@n0Ufs56z;iaOqEPD6gH6xv@Ub-p=KFuCiczQXe z4g<&a(#L`ca6 z#x|=VmIHQ+QOQY6iDcmt9>_bK=7b#dJXu32QsLP$M#sBLkJ55w&%A_$M4eBydyfF1 zK$32PDoUy`$f8`%pVQro14gTWrSCKuP;}p2`f`BIbGQm|Q7wDEM#V3oHNE

6#pR7JeF{diaL! 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%0Dgu3CA#eIFnHo? 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

<^SiAg{TQ);qR18vs~PKxLj6R?bg}dgF?Yr` zE3k$B{9mA4Nf|7N0F0Km;PFde8BsygLXFs#gtWD^5z|%skP`= zVE*9c#k5s2@wW_c`YVj4-yK7HUVSIvGAf5F%0=iuR#o)Bt9N&;;rfLcYAb2^Xf^); zxrtlD?+{>$S%!6Etd7GZ3jXino(a8f!;X>U-ew!Xew>dPa*8tk@V{+$;&5=MY-|c>lSv4 zj=fzgkks6JWSnU?XTPi*d#32}%-g_qWZ14N0I@*gOK@Zt3B&F`*y2{(#K*t%8+@e1 zu$ljgSg`Ha;r|!0cFeO(96u3D4Tl460ec=@O&%g>{aASc0~c6&{sb))II>QD2eke# zfb-vBR_&(*obzDKsO1qQBp(thJzbx7P@11|;_) zN46Zxl*#iOZk$D>=NDe?=@_+oyGzN4-iR9{W6lYFl2LGq#q6Zledi>P`qGC!H_zgv zuC+60GDr-CEmA~$@>X>7{3uS#G0W54%)@CXEdFNt%<&gVE4(&;pr>{{KQn!r{n1o& zYs(!p#;PR1an|pJPQK%*QyIplakQe9`gzD+li8OSEJyA(>z^5u8ArY9OFA&5H-3x5@%G=IVlVop_$r%O zs{2M?x`7SQnfs8%$l;jk{c`Xq*Z6L`d!M?#T)nE0t~>yZY8|{(k*c{*G`Q|sd54YL zlyq<7&`~nzb{b7>SSnZhZ) z)LT%>ImWSrSqcEN4*k;__$OffOFa4&u(YPK?ti`dDhwrV7@L>Jo3`log8mPj24@Y zJX644!?zO6jy2|+$-e04_L!adE7OqxN%2a#FJHIt)hn6b7Q6=e9~qIpINl~Q_+8wj zb@l7FJIH|4*wQmyt?e3`e`xSdC3|J+l;3=nrk_Vn%H$`g*)<;W*(`sqR+1)nVgao* z{f)FKI=@2?vrp#mS*&q!Ri;VYbauD$=aPYq{XJj(%q@&BpZk(&puFx&FL26v0V5pJ@BhTkMe;ALZNC`&2%+sr z_MfT)6)B4DFGfS;{y(4XLeT>k-mi8(r06d%lhC5}BZ2o23G_I}IZ>(l`eynt%QuBF z&Cm7s-D<@kCI2jn48=#rb9JOSdajz94xcRR&dkd}5t-8{Ebve=t5?cRqyQ2?3>iH!L zOvtg_L$C1?rN8{io6>#OqOJikC5)UZbHSw4T;3JYS9p$w zRP}Jeb?Rtb;dlD}D^cSco7V9!^%w=ur;s%e1T~sWx;$J*#Iw|rEd{4j+fZ+sZE=bH z^91pTj@u(Tc9FBEeT+8k?i)&(Q;XC0F4K(hIbL*6=nl7PwzKCF8c| zzJ{yuJR8rI71vrEeLvJ8+HT$+u;7<}SNH7d+>DQoPfmG7bQ^Cy>6;_fg96{o_p+(c zoVJT_?D@mPh`v}|aqyLGoaZ0BYSksHNs4taW z7c5CEF)l^B9!yypGH7hDcz1eF6U7JCb;>nTQ$_|1Xe9Qe(F-yHbOf!`eX&4J$>_|1Xe9Qe(F-yHbO zf!`eX&4J$>_|1Xe9Qfbkz_Kak#fdx@m3`U?@eF9&tc{uC^2{R5k2N<}q%wjC;RVR^ m6H*cfIkhjh { + if (!logoData) { + return { type: 'image', source: require('@/assets/images/service-placeholder.webp') }; + } + + try { + // If logo is already a base64 string (from iOS SQLite query result) + if (typeof logoData === 'string') { + const mimeType = detectMimeTypeFromBase64(logoData); + return { + type: mimeType === 'image/svg+xml' ? 'svg' : 'image', + source: `data:${mimeType};base64,${logoData}` + }; + } + + // Handle binary data (from Android or other sources) + const logoBytes = toUint8Array(logoData); + const base64Logo = Buffer.from(logoBytes).toString('base64'); + const mimeType = detectMimeType(logoBytes); + return { + type: mimeType === 'image/svg+xml' ? 'svg' : 'image', + source: `data:${mimeType};base64,${base64Logo}` + }; + } catch (error) { + console.error('Error converting logo:', error); + return { type: 'image', source: require('@/assets/images/service-placeholder.webp') }; + } + }; + + const logoSource = getLogoSource(logo); + + if (logoSource.type === 'svg') { + // SVGs are not supported in React Native Image component, + // so we use SvgUri from react-native-svg. + return ( + + ); + } + + return ( + + ); +} + +/** + * Detect MIME type from base64 string by decoding first few bytes + */ +function detectMimeTypeFromBase64(base64: string): string { + try { + const binaryString = atob(base64.slice(0, 8)); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return detectMimeType(bytes); + } catch (error) { + console.warn('Error detecting mime type from base64:', error); + return 'image/x-icon'; + } +} + +/** + * Detect MIME type from file signature (magic numbers) + */ +function detectMimeType(bytes: Uint8Array): string { + const isSvg = (): boolean => { + const header = new TextDecoder().decode(bytes.slice(0, 5)).toLowerCase(); + return header.includes(' { + return bytes[0] === 0x00 && bytes[1] === 0x00 && bytes[2] === 0x01 && bytes[3] === 0x00; + }; + + const isPng = (): boolean => { + return bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4E && bytes[3] === 0x47; + }; + + if (isSvg()) return 'image/svg+xml'; + if (isIco()) return 'image/x-icon'; + if (isPng()) return 'image/png'; + + return 'image/x-icon'; +} + +/** + * Convert various binary data formats to Uint8Array + */ +function toUint8Array(buffer: Uint8Array | number[] | {[key: number]: number}): Uint8Array { + if (buffer instanceof Uint8Array) { + return buffer; + } + + if (Array.isArray(buffer)) { + return new Uint8Array(buffer); + } + + const length = Object.keys(buffer).length; + const arr = new Uint8Array(length); + for (let i = 0; i < length; i++) { + arr[i] = buffer[i]; + } + + return arr; +} + +const styles = StyleSheet.create({ + logo: { + width: 32, + height: 32, + borderRadius: 4, + }, +}); \ No newline at end of file diff --git a/mobile-app/ios/CredentialManager/SharedCredentialStore.swift b/mobile-app/ios/CredentialManager/SharedCredentialStore.swift index 43dac693d..42e55297a 100644 --- a/mobile-app/ios/CredentialManager/SharedCredentialStore.swift +++ b/mobile-app/ios/CredentialManager/SharedCredentialStore.swift @@ -13,17 +13,17 @@ class SharedCredentialStore { private let encryptedDbFileName = "encrypted_db.sqlite" private var db: Connection? private var encryptionKey: Data? - + public init() {} // MARK: - Vault Status func isVaultInitialized() -> Bool { // Check if encrypted database file exists let hasDatabase = FileManager.default.fileExists(atPath: getEncryptedDbPath().path) - + return hasDatabase } - + // MARK: - Encryption Key Management private func getEncryptionKey() throws -> Data { if let key = encryptionKey { @@ -31,32 +31,32 @@ class SharedCredentialStore { print("Key found in memory: \(key.base64EncodedString())") return key } - + guard let keyData = try? keychain .authenticationPrompt("Authenticate to unlock your vault") .getData(encryptionKeyKey) else { throw NSError(domain: "SharedCredentialStore", code: 2, userInfo: [NSLocalizedDescriptionKey: "No encryption key found"]) } - + encryptionKey = keyData // print as base64 for debugging print("Key found in keychain: \(keyData.base64EncodedString())") return keyData } - + func storeEncryptionKey(_ base64Key: String) throws { print("Storing encryption key") - + // Convert base64 string to bytes guard let keyData = Data(base64Encoded: base64Key) else { throw NSError(domain: "SharedCredentialStore", code: 6, userInfo: [NSLocalizedDescriptionKey: "Invalid base64 key"]) } - + // Validate key length (AES-256 requires 32 bytes) guard keyData.count == 32 else { throw NSError(domain: "SharedCredentialStore", code: 7, userInfo: [NSLocalizedDescriptionKey: "Invalid key length. Expected 32 bytes"]) } - + do { try keychain .authenticationPrompt("Authenticate to unlock your vault") @@ -69,21 +69,21 @@ class SharedCredentialStore { throw error } } - + // MARK: - Database Management - + private func getEncryptedDbPath() -> URL { guard let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.net.aliasvault.autofill") else { fatalError("Failed to get shared container URL") } return containerURL.appendingPathComponent(encryptedDbFileName) } - + func storeEncryptedDatabase(_ base64EncryptedDb: String) throws { // Store the encrypted database (base64 encoded) in the app's documents directory try base64EncryptedDb.write(to: getEncryptedDbPath(), atomically: true, encoding: .utf8) } - + // Get the encrypted database as a base64 encoded string func getEncryptedDatabase() -> String? { do { @@ -93,13 +93,13 @@ class SharedCredentialStore { return nil } } - + func initializeDatabase() throws { // Get the encrypted database guard let encryptedDbBase64 = getEncryptedDatabase() else { throw NSError(domain: "SharedCredentialStore", code: 1, userInfo: [NSLocalizedDescriptionKey: "No encrypted database found"]) } - + let encryptedDbData = Data(base64Encoded: encryptedDbBase64)! // Get the encryption key @@ -114,60 +114,60 @@ class SharedCredentialStore { // Create a temporary file for the decrypted database in the same directory as the encrypted one let tempDbPath = FileManager.default.temporaryDirectory.appendingPathComponent("temp_db.sqlite") try decryptedDbData.write(to: tempDbPath) - + // Create an in-memory database db = try Connection(":memory:") - + // Import the decrypted database into memory try db?.attach(.uri(tempDbPath.path, parameters: [.mode(.readOnly)]), as: "source") try db?.execute("BEGIN TRANSACTION") - + // Copy all tables from source to memory let tables = try db?.prepare("SELECT name FROM source.sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'") for table in tables! { let tableName = table[0] as! String try db?.execute("CREATE TABLE \(tableName) AS SELECT * FROM source.\(tableName)") } - + try db?.execute("COMMIT") try db?.execute("DETACH DATABASE source") - + // Clean up the temporary file try? FileManager.default.removeItem(at: tempDbPath) - + // Setup database pragmas try db?.execute("PRAGMA journal_mode = WAL") try db?.execute("PRAGMA synchronous = NORMAL") try db?.execute("PRAGMA foreign_keys = ON") } - + // MARK: - Encryption/Decryption - + private func encrypt(data: Data, key: Data) throws -> Data { // TODO: make sure we encrypt the data the same as decryption works with combined iv/content/tag. let key = SymmetricKey(data: key) let sealedBox = try AES.GCM.seal(data, using: key) return sealedBox.combined! } - + private func decrypt(data: Data, key: Data) throws -> Data { let key = SymmetricKey(data: key) let sealedBox = try AES.GCM.SealedBox(combined: data) return try AES.GCM.open(sealedBox, using: key) } - + // MARK: - Credential Operations - + func addCredential(_ credential: Credential) throws { if db == nil { try initializeDatabase() } - + // After initialization attempt, check if db is still nil guard let db = db else { throw NSError(domain: "SharedCredentialStore", code: 4, userInfo: [NSLocalizedDescriptionKey: "Database not initialized"]) } - + // TODO: update this to use the actual database schema. // TODO: having the add logic here means we have duplicate code with the react native implementation. let credentials = Table("credentials") @@ -177,7 +177,7 @@ class SharedCredentialStore { let service = Expression("service") let createdAt = Expression("created_at") let updatedAt = Expression("updated_at") - + try db.run(credentials.insert( id <- UUID().uuidString, username <- credential.username, @@ -187,17 +187,17 @@ class SharedCredentialStore { updatedAt <- Date() )) } - + func getAllCredentials() throws -> [Credential] { if db == nil { try initializeDatabase() } - + // After initialization attempt, check if db is still nil guard let db = db else { throw NSError(domain: "SharedCredentialStore", code: 4, userInfo: [NSLocalizedDescriptionKey: "Database not initialized"]) } - + let query = """ SELECT DISTINCT c.Username, @@ -209,13 +209,13 @@ class SharedCredentialStore { WHERE c.IsDeleted = 0 ORDER BY c.CreatedAt DESC """ - + var result: [Credential] = [] for row in try db.prepare(query) { let username = row[0] as? String ?? "" let service = row[1] as? String ?? "" let password = row[2] as? String ?? "" - + result.append(Credential( username: username, password: password, @@ -229,7 +229,7 @@ class SharedCredentialStore { func clearCache() { // Clear the cached encryption key encryptionKey = nil - + // Clear the cached encrypted database db = nil } @@ -244,48 +244,67 @@ class SharedCredentialStore { clearCache() } - + // MARK: - Query Execution - + func executeQuery(_ query: String, params: [Binding?]) throws -> [[String: Any]] { guard let db = db else { throw NSError(domain: "SharedCredentialStore", code: 4, userInfo: [NSLocalizedDescriptionKey: "Database not initialized"]) } - + let statement = try db.prepare(query) var results: [[String: Any]] = [] - + for row in try statement.run(params) { var rowDict: [String: Any] = [:] for (index, column) in statement.columnNames.enumerated() { - rowDict[column] = row[index] + // Handle different SQLite data types appropriately + let value = row[index] + switch value { + case let data as SQLite.Blob: + // Convert SQLite blob to base64 string for React Native bridge + let binaryData = Data(data.bytes) + rowDict[column] = binaryData.base64EncodedString() + case let date as Date: + rowDict[column] = date + case let number as Int64: + rowDict[column] = number + case let number as Double: + rowDict[column] = number + case let text as String: + rowDict[column] = text + case .none: + rowDict[column] = NSNull() + default: + rowDict[column] = value + } } results.append(rowDict) } - + return results } - + func executeUpdate(_ query: String, params: [Binding?]) throws -> Int { guard let db = db else { throw NSError(domain: "SharedCredentialStore", code: 4, userInfo: [NSLocalizedDescriptionKey: "Database not initialized"]) } - + let statement = try db.prepare(query) try statement.run(params) return db.changes } - + // MARK: - Biometric Authentication - + func authenticateWithBiometrics() async throws -> Bool { let context = LAContext() var error: NSError? - + guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { throw error ?? NSError(domain: "SharedCredentialStore", code: 5, userInfo: [NSLocalizedDescriptionKey: "Biometrics not available"]) } - + return try await withCheckedThrowingContinuation { continuation in context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Authenticate to access your credentials") { success, error in diff --git a/mobile-app/ios/Podfile.lock b/mobile-app/ios/Podfile.lock index 5aa921bcf..2e1fe5e68 100644 --- a/mobile-app/ios/Podfile.lock +++ b/mobile-app/ios/Podfile.lock @@ -2095,6 +2095,49 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga + - RNSVG (15.11.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 15.11.2) + - Yoga + - RNSVG/common (15.11.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - SocketRocket (0.7.1) - SQLite.swift (0.14.1): - SQLite.swift/standard (= 0.14.1) @@ -2201,6 +2244,7 @@ DEPENDENCIES: - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) + - RNSVG (from `../node_modules/react-native-svg`) - SQLite.swift (~> 0.14.0) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -2405,6 +2449,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-reanimated" RNScreens: :path: "../node_modules/react-native-screens" + RNSVG: + :path: "../node_modules/react-native-svg" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -2507,6 +2553,7 @@ SPEC CHECKSUMS: RNGestureHandler: fffddeb8af59709c6d8de11b6461a6af63cad532 RNReanimated: 2e5069649cbab2c946652d3b97589b2ae0526220 RNScreens: 362f4c861dd155f898908d5035d97b07a3f1a9d1 + RNSVG: 3a1cce2e940268a7d3554e3cf2bbd2195871f4fe SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 SQLite.swift: 2992550ebf3c5b268bf4352603e3df87d2a4ed72 Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a diff --git a/mobile-app/ios/aliasvault.xcodeproj/project.pbxproj b/mobile-app/ios/aliasvault.xcodeproj/project.pbxproj index 278405dd2..7fd7377be 100644 --- a/mobile-app/ios/aliasvault.xcodeproj/project.pbxproj +++ b/mobile-app/ios/aliasvault.xcodeproj/project.pbxproj @@ -412,6 +412,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -427,6 +428,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", diff --git a/mobile-app/package-lock.json b/mobile-app/package-lock.json index fa95c5049..a6ea063a4 100644 --- a/mobile-app/package-lock.json +++ b/mobile-app/package-lock.json @@ -37,6 +37,7 @@ "react-native-reanimated": "~3.16.1", "react-native-safe-area-context": "4.12.0", "react-native-screens": "~4.4.0", + "react-native-svg": "^15.11.2", "react-native-toast-message": "^2.2.1", "react-native-web": "~0.19.13", "react-native-webview": "13.12.5", @@ -5128,6 +5129,12 @@ "node": ">=0.6" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, "node_modules/bplist-creator": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", @@ -5935,6 +5942,47 @@ "hyphenate-style-name": "^1.0.3" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -6178,6 +6226,32 @@ "node": ">=8" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -6192,6 +6266,35 @@ "node": ">=12" } }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dotenv": { "version": "16.4.7", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", @@ -6313,7 +6416,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -10079,6 +10181,12 @@ "node": ">=0.10" } }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -10916,6 +11024,18 @@ "node": ">=4" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -12013,6 +12133,21 @@ "react-native": "*" } }, + "node_modules/react-native-svg": { + "version": "15.11.2", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.11.2.tgz", + "integrity": "sha512-+YfF72IbWQUKzCIydlijV1fLuBsQNGMT6Da2kFlo1sh+LE3BIm/2Q7AR1zAAR6L0BFLi1WaQPLfFUC9bNZpOmw==", + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "css-tree": "^1.1.3", + "warn-once": "0.1.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-toast-message": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-native-toast-message/-/react-native-toast-message-2.2.1.tgz", diff --git a/mobile-app/package.json b/mobile-app/package.json index d11db99a0..d179c7f91 100644 --- a/mobile-app/package.json +++ b/mobile-app/package.json @@ -44,6 +44,7 @@ "react-native-reanimated": "~3.16.1", "react-native-safe-area-context": "4.12.0", "react-native-screens": "~4.4.0", + "react-native-svg": "^15.11.2", "react-native-toast-message": "^2.2.1", "react-native-web": "~0.19.13", "react-native-webview": "13.12.5", diff --git a/mobile-app/utils/SqliteClient.tsx b/mobile-app/utils/SqliteClient.tsx index 0fe1499dc..a603889bd 100644 --- a/mobile-app/utils/SqliteClient.tsx +++ b/mobile-app/utils/SqliteClient.tsx @@ -4,11 +4,6 @@ import { EncryptionKey } from './types/EncryptionKey'; import { TotpCode } from './types/TotpCode'; import { PasswordSettings } from './types/PasswordSettings'; -/** - * Placeholder base64 image for credentials without a logo. - */ -const placeholderBase64 = 'UklGRjoEAABXRUJQVlA4IC4EAAAwFwCdASqAAIAAPpFCm0olo6Ihp5IraLASCWUA0eb/0s56RrLtCnYfLPiBshdXWMx8j1Ez65f169iA4xUDBTEV6ylMQeCIj2b7RngGi7gKZ9WjKdSoy9R8JcgOmjCMlDmLG20KhNo/i/Dc/Ah5GAvGfm8kfniV3AkR6fxN6eKwjDc6xrDgSfS48G5uGV6WzQt24YAVlLSK9BMwndzfHnePK1KFchFrL7O3ulB8cGNCeomu4o+l0SrS/JKblJ4WTzj0DAD++lCUEouSfgRKdiV2TiYCD+H+l3tANKSPQFPQuzi7rbvxqGeRmXB9kDwURaoSTTpYjA9REMUi9uA6aV7PWtBNXgUzMLowYMZeos6Xvyhb34GmufswMHA5ZyYpxzjTphOak4ZjNOiz8aScO5ygiTx99SqwX/uL+HSeVOSraHw8IymrMwm+jLxqN8BS8dGcItLlm/ioulqH2j4V8glDgSut+ExkxiD7m8TGPrrjCQNJbRDzpOFsyCyfBZupvp8QjGKW2KGziSZeIWes4aTB9tRmeEBhnUrmTDZQuXcc67Fg82KHrSfaeeOEq6jjuUjQ8wUnzM4Zz3dhrwSyslVz/WvnKqYkr4V/TTXPFF5EjF4rM1bHZ8bK63EfTnK41+n3n4gEFoYP4mXkNH0hntnYcdTqiE7Gn+q0BpRRxnkpBSZlA6Wa70jpW0FGqkw5e591A5/H+OV+60WAo+4Mi+NlsKrvLZ9EiVaPnoEFZlJQx1fA777AJ2MjXJ4KSsrWDWJi1lE8yPs8V6XvcC0chDTYt8456sKXAagCZyY+fzQriFMaddXyKQdG8qBqcdYjAsiIcjzaRFBBoOK9sU+sFY7N6B6+xtrlu3c37rQKkI3O2EoiJOris54EjJ5OFuumA0M6riNUuBf/MEPFBVx1JRcUEs+upEBsCnwYski7FT3TTqHrx7v5AjgFN97xhPTkmVpu6sxRnWBi1fxIRp8eWZeFM6mUcGgVk1WeVb1yhdV9hoMo2TsNEPE0tHo/wvuSJSzbZo7wibeXM9v/rRfKcx7X93rfiXVnyQ9f/5CaAQ4lxedPp/6uzLtOS4FyL0bCNeZ6L5w+AiuyWCTDFIYaUzhwfG+/YTQpWyeZCdQIKzhV+3GeXI2cxoP0ER/DlOKymf1gm+zRU3sqf1lBVQ0y+mK/Awl9bS3uaaQmI0FUyUwHUKP7PKuXnO+LcwDv4OfPT6hph8smc1EtMe5ib/apar/qZ9dyaEaElALJ1KKxnHziuvVl8atk1fINSQh7OtXDyqbPw9o/nGIpTnv5iFmwmWJLis2oyEgPkJqyx0vYI8rjkVEzKc8eQavAJBYSpjMwM193Swt+yJyjvaGYWPnqExxKiNarpB2WSO7soCAZXhS1uEYHryrK47BH6W1dRiruqT0xpLih3MXiwU3VDwAAAA=='; - type SQLiteBindValue = string | number | null | Uint8Array; /** @@ -106,12 +101,9 @@ class SqliteClient { const results = await this.executeQuery(query, [credentialId]); if (results.length === 0) { - console.log('No results found for credential:', credentialId); return null; } - console.log('Results found for credential:', results); - // Convert the first row to a Credential object const row = results[0] as any; return { @@ -161,9 +153,9 @@ class SqliteClient { WHERE c.IsDeleted = 0 ORDER BY c.CreatedAt DESC`; - const results = await this.executeQuery(query); + const results = await this.executeQuery(query); - return results.map((row: any) => ({ + return results.map((row) => ({ Id: row.Id, Username: row.Username, Password: row.Password, @@ -243,7 +235,7 @@ class SqliteClient { */ public async getPasswordSettings(): Promise { const settingsJson = await this.getSetting('PasswordGenerationSettings'); - + // Default settings if none found or parsing fails const defaultSettings: PasswordSettings = { Length: 18, @@ -253,7 +245,7 @@ class SqliteClient { UseSpecialChars: true, UseNonAmbiguousChars: false }; - + try { if (settingsJson) { return { ...defaultSettings, ...JSON.parse(settingsJson) }; @@ -261,7 +253,7 @@ class SqliteClient { } catch (error) { console.warn('Failed to parse password settings:', error); } - + return defaultSettings; } @@ -445,100 +437,6 @@ class SqliteClient { } } - /** - * Convert binary data to a base64 encoded image source. - */ - public static imgSrcFromBytes(bytes: Uint8Array | number[] | undefined): string { - // Handle base64 image data - if (bytes) { - try { - const logoBytes = this.toUint8Array(bytes); - const base64Logo = this.base64Encode(logoBytes); - // Detect image type from first few bytes - const mimeType = this.detectMimeType(logoBytes); - return `data:${mimeType};base64,${base64Logo}`; - } catch (error) { - console.error('Error setting logo:', error); - return `data:image/x-icon;base64,${placeholderBase64}`; - } - } else { - return `data:image/x-icon;base64,${placeholderBase64}`; - } - } - - /** - * Detect MIME type from file signature (magic numbers) - */ - private static detectMimeType(bytes: Uint8Array): string { - /** - * Check if the file is an SVG file. - */ - const isSvg = () : boolean => { - const header = new TextDecoder().decode(bytes.slice(0, 5)).toLowerCase(); - return header.includes(' { - return bytes[0] === 0x00 && bytes[1] === 0x00 && bytes[2] === 0x01 && bytes[3] === 0x00; - }; - - /** - * Check if the file is an PNG file. - */ - const isPng = () : boolean => { - return bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4E && bytes[3] === 0x47; - }; - - if (isSvg()) { - return 'image/svg+xml'; - } - if (isIco()) { - return 'image/x-icon'; - } - if (isPng()) { - return 'image/png'; - } - - return 'image/x-icon'; - } - - /** - * Convert various binary data formats to Uint8Array - */ - private static toUint8Array(buffer: Uint8Array | number[] | {[key: number]: number}): Uint8Array { - if (buffer instanceof Uint8Array) { - return buffer; - } - - if (Array.isArray(buffer)) { - return new Uint8Array(buffer); - } - - const length = Object.keys(buffer).length; - const arr = new Uint8Array(length); - for (let i = 0; i < length; i++) { - arr[i] = buffer[i]; - } - - return arr; - } - - /** - * Base64 encode binary data. - */ - private static base64Encode(buffer: Uint8Array | number[] | {[key: number]: number}): string | null { - try { - const arr = Array.from(this.toUint8Array(buffer)); - return btoa(arr.reduce((data, byte) => data + String.fromCharCode(byte), '')); - } catch (error) { - console.error('Error encoding to base64:', error); - return null; - } - } - /** * Check if a table exists in the database * @param tableName - The name of the table to check