Implement structured iPhone entry viewer

This commit is contained in:
2026-08-11 19:59:18 +02:00
parent 873db91204
commit 900e62e523
9 changed files with 1728 additions and 92 deletions

View File

@@ -587,8 +587,16 @@ public protocol MobileAuthenticationProtocol: AnyObject, Sendable {
func cancel() throws
func copyEntryField(path: String, field: UInt64) throws -> MobileEntryCopy
func entryPage(path: String) throws -> MobileEntryPage
func manualLock() throws
func replaceEntryField(path: String, field: UInt64, value: String) throws -> MobileEntryPage
func revealEntryField(path: String, field: UInt64) throws -> String
func setBiometricUnlock(enabled: Bool) throws -> MobileAuthenticationState
func state() throws -> MobileAuthenticationState
@@ -659,6 +667,27 @@ open func cancel()throws {try rustCallWithError(FfiConverterTypeMobileAuthenti
}
}
open func copyEntryField(path: String, field: UInt64)throws -> MobileEntryCopy {
return try FfiConverterTypeMobileEntryCopy_lift(try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_method_mobileauthentication_copy_entry_field(
self.uniffiCloneHandle(),
FfiConverterString.lower(path),
FfiConverterUInt64.lower(field),uniffiCallStatus
)
})
}
open func entryPage(path: String)throws -> MobileEntryPage {
return try FfiConverterTypeMobileEntryPage_lift(try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_method_mobileauthentication_entry_page(
self.uniffiCloneHandle(),
FfiConverterString.lower(path),uniffiCallStatus
)
})
}
open func manualLock()throws {try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_method_mobileauthentication_manual_lock(
@@ -667,6 +696,29 @@ open func manualLock()throws {try rustCallWithError(FfiConverterTypeMobileAuth
}
}
open func replaceEntryField(path: String, field: UInt64, value: String)throws -> MobileEntryPage {
return try FfiConverterTypeMobileEntryPage_lift(try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_method_mobileauthentication_replace_entry_field(
self.uniffiCloneHandle(),
FfiConverterString.lower(path),
FfiConverterUInt64.lower(field),
FfiConverterString.lower(value),uniffiCallStatus
)
})
}
open func revealEntryField(path: String, field: UInt64)throws -> String {
return try FfiConverterString.lift(try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_method_mobileauthentication_reveal_entry_field(
self.uniffiCloneHandle(),
FfiConverterString.lower(path),
FfiConverterUInt64.lower(field),uniffiCallStatus
)
})
}
open func setBiometricUnlock(enabled: Bool)throws -> MobileAuthenticationState {
return try FfiConverterTypeMobileAuthenticationState_lift(try rustCallWithError(FfiConverterTypeMobileAuthenticationFfiError_lift) {
uniffiCallStatus in
@@ -1133,6 +1185,266 @@ public func FfiConverterTypeMobileAuthenticationState_lower(_ value: MobileAuthe
}
public struct MobileEntryCopy: Equatable, Hashable {
public var value: String
public var timeoutSeconds: UInt64
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(value: String, timeoutSeconds: UInt64) {
self.value = value
self.timeoutSeconds = timeoutSeconds
}
}
#if compiler(>=6)
extension MobileEntryCopy: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobileEntryCopy: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobileEntryCopy {
return
try MobileEntryCopy(
value: FfiConverterString.read(from: &buf),
timeoutSeconds: FfiConverterUInt64.read(from: &buf)
)
}
public static func write(_ value: MobileEntryCopy, into buf: inout [UInt8]) {
FfiConverterString.write(value.value, into: &buf)
FfiConverterUInt64.write(value.timeoutSeconds, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryCopy_lift(_ buf: RustBuffer) throws -> MobileEntryCopy {
return try FfiConverterTypeMobileEntryCopy.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryCopy_lower(_ value: MobileEntryCopy) -> RustBuffer {
return FfiConverterTypeMobileEntryCopy.lower(value)
}
public struct MobileEntryField: Equatable, Hashable {
public var id: UInt64
public var label: String
public var systemImage: String
public var value: String?
public var maskedValue: String
public var detail: String?
public var diagnostic: String?
public var sensitive: Bool
public var multiline: Bool
public var selectable: Bool
public var editable: Bool
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(id: UInt64, label: String, systemImage: String, value: String?, maskedValue: String, detail: String?, diagnostic: String?, sensitive: Bool, multiline: Bool, selectable: Bool, editable: Bool) {
self.id = id
self.label = label
self.systemImage = systemImage
self.value = value
self.maskedValue = maskedValue
self.detail = detail
self.diagnostic = diagnostic
self.sensitive = sensitive
self.multiline = multiline
self.selectable = selectable
self.editable = editable
}
}
#if compiler(>=6)
extension MobileEntryField: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobileEntryField: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobileEntryField {
return
try MobileEntryField(
id: FfiConverterUInt64.read(from: &buf),
label: FfiConverterString.read(from: &buf),
systemImage: FfiConverterString.read(from: &buf),
value: FfiConverterOptionString.read(from: &buf),
maskedValue: FfiConverterString.read(from: &buf),
detail: FfiConverterOptionString.read(from: &buf),
diagnostic: FfiConverterOptionString.read(from: &buf),
sensitive: FfiConverterBool.read(from: &buf),
multiline: FfiConverterBool.read(from: &buf),
selectable: FfiConverterBool.read(from: &buf),
editable: FfiConverterBool.read(from: &buf)
)
}
public static func write(_ value: MobileEntryField, into buf: inout [UInt8]) {
FfiConverterUInt64.write(value.id, into: &buf)
FfiConverterString.write(value.label, into: &buf)
FfiConverterString.write(value.systemImage, into: &buf)
FfiConverterOptionString.write(value.value, into: &buf)
FfiConverterString.write(value.maskedValue, into: &buf)
FfiConverterOptionString.write(value.detail, into: &buf)
FfiConverterOptionString.write(value.diagnostic, into: &buf)
FfiConverterBool.write(value.sensitive, into: &buf)
FfiConverterBool.write(value.multiline, into: &buf)
FfiConverterBool.write(value.selectable, into: &buf)
FfiConverterBool.write(value.editable, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryField_lift(_ buf: RustBuffer) throws -> MobileEntryField {
return try FfiConverterTypeMobileEntryField.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryField_lower(_ value: MobileEntryField) -> RustBuffer {
return FfiConverterTypeMobileEntryField.lower(value)
}
public struct MobileEntryPage: Equatable, Hashable {
public var id: String
public var title: String
public var sections: [MobileEntrySection]
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(id: String, title: String, sections: [MobileEntrySection]) {
self.id = id
self.title = title
self.sections = sections
}
}
#if compiler(>=6)
extension MobileEntryPage: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobileEntryPage: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobileEntryPage {
return
try MobileEntryPage(
id: FfiConverterString.read(from: &buf),
title: FfiConverterString.read(from: &buf),
sections: FfiConverterSequenceTypeMobileEntrySection.read(from: &buf)
)
}
public static func write(_ value: MobileEntryPage, into buf: inout [UInt8]) {
FfiConverterString.write(value.id, into: &buf)
FfiConverterString.write(value.title, into: &buf)
FfiConverterSequenceTypeMobileEntrySection.write(value.sections, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryPage_lift(_ buf: RustBuffer) throws -> MobileEntryPage {
return try FfiConverterTypeMobileEntryPage.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntryPage_lower(_ value: MobileEntryPage) -> RustBuffer {
return FfiConverterTypeMobileEntryPage.lower(value)
}
public struct MobileEntrySection: Equatable, Hashable {
public var kind: MobileEntrySectionKind
public var title: String
public var fields: [MobileEntryField]
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(kind: MobileEntrySectionKind, title: String, fields: [MobileEntryField]) {
self.kind = kind
self.title = title
self.fields = fields
}
}
#if compiler(>=6)
extension MobileEntrySection: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobileEntrySection: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobileEntrySection {
return
try MobileEntrySection(
kind: FfiConverterTypeMobileEntrySectionKind.read(from: &buf),
title: FfiConverterString.read(from: &buf),
fields: FfiConverterSequenceTypeMobileEntryField.read(from: &buf)
)
}
public static func write(_ value: MobileEntrySection, into buf: inout [UInt8]) {
FfiConverterTypeMobileEntrySectionKind.write(value.kind, into: &buf)
FfiConverterString.write(value.title, into: &buf)
FfiConverterSequenceTypeMobileEntryField.write(value.fields, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntrySection_lift(_ buf: RustBuffer) throws -> MobileEntrySection {
return try FfiConverterTypeMobileEntrySection.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntrySection_lower(_ value: MobileEntrySection) -> RustBuffer {
return FfiConverterTypeMobileEntrySection.lower(value)
}
public struct MobileHomeChange: Equatable, Hashable {
public var id: String
public var title: String
@@ -2150,6 +2462,86 @@ public func FfiConverterTypeMobileAuthenticationFfiError_lower(_ value: MobileAu
public enum MobileEntrySectionKind: Equatable, Hashable {
case password
case details
case oneTimePassword
case notes
}
#if compiler(>=6)
extension MobileEntrySectionKind: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobileEntrySectionKind: FfiConverterRustBuffer {
typealias SwiftType = MobileEntrySectionKind
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobileEntrySectionKind {
let variant: Int32 = try readInt(&buf)
switch variant {
case 1: return .password
case 2: return .details
case 3: return .oneTimePassword
case 4: return .notes
default: throw UniffiInternalError.unexpectedEnumCase
}
}
public static func write(_ value: MobileEntrySectionKind, into buf: inout [UInt8]) {
switch value {
case .password:
writeInt(&buf, Int32(1))
case .details:
writeInt(&buf, Int32(2))
case .oneTimePassword:
writeInt(&buf, Int32(3))
case .notes:
writeInt(&buf, Int32(4))
}
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntrySectionKind_lift(_ buf: RustBuffer) throws -> MobileEntrySectionKind {
return try FfiConverterTypeMobileEntrySectionKind.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobileEntrySectionKind_lower(_ value: MobileEntrySectionKind) -> RustBuffer {
return FfiConverterTypeMobileEntrySectionKind.lower(value)
}
public enum MobileHomeChangeKind: Equatable, Hashable {
case passwordEntry
@@ -3514,6 +3906,56 @@ fileprivate struct FfiConverterSequenceString: FfiConverterRustBuffer {
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
fileprivate struct FfiConverterSequenceTypeMobileEntryField: FfiConverterRustBuffer {
typealias SwiftType = [MobileEntryField]
public static func write(_ value: [MobileEntryField], into buf: inout [UInt8]) {
let len = Int32(value.count)
writeInt(&buf, len)
for item in value {
FfiConverterTypeMobileEntryField.write(item, into: &buf)
}
}
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [MobileEntryField] {
let len: Int32 = try readInt(&buf)
var seq = [MobileEntryField]()
seq.reserveCapacity(Int(len))
for _ in 0 ..< len {
seq.append(try FfiConverterTypeMobileEntryField.read(from: &buf))
}
return seq
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
fileprivate struct FfiConverterSequenceTypeMobileEntrySection: FfiConverterRustBuffer {
typealias SwiftType = [MobileEntrySection]
public static func write(_ value: [MobileEntrySection], into buf: inout [UInt8]) {
let len = Int32(value.count)
writeInt(&buf, len)
for item in value {
FfiConverterTypeMobileEntrySection.write(item, into: &buf)
}
}
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [MobileEntrySection] {
let len: Int32 = try readInt(&buf)
var seq = [MobileEntrySection]()
seq.reserveCapacity(Int(len))
for _ in 0 ..< len {
seq.append(try FfiConverterTypeMobileEntrySection.read(from: &buf))
}
return seq
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
@@ -3754,9 +4196,21 @@ private let initializationResult: InitializationResult = {
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_cancel() != 6512) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_copy_entry_field() != 17773) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_entry_page() != 56594) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_manual_lock() != 57220) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_replace_entry_field() != 15315) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_reveal_entry_field() != 13396) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_method_mobileauthentication_set_biometric_unlock() != 9486) {
return InitializationResult.apiChecksumMismatch
}

View File

@@ -258,11 +258,31 @@ void uniffi_ironstorage_apple_fn_free_mobileauthentication(uint64_t handle, Rust
void uniffi_ironstorage_apple_fn_method_mobileauthentication_cancel(uint64_t ptr, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_COPY_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_COPY_ENTRY_FIELD
RustBuffer uniffi_ironstorage_apple_fn_method_mobileauthentication_copy_entry_field(uint64_t ptr, RustBuffer path, uint64_t field, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_ENTRY_PAGE
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_ENTRY_PAGE
RustBuffer uniffi_ironstorage_apple_fn_method_mobileauthentication_entry_page(uint64_t ptr, RustBuffer path, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_MANUAL_LOCK
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_MANUAL_LOCK
void uniffi_ironstorage_apple_fn_method_mobileauthentication_manual_lock(uint64_t ptr, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_REPLACE_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_REPLACE_ENTRY_FIELD
RustBuffer uniffi_ironstorage_apple_fn_method_mobileauthentication_replace_entry_field(uint64_t ptr, RustBuffer path, uint64_t field, RustBuffer value, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_REVEAL_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_REVEAL_ENTRY_FIELD
RustBuffer uniffi_ironstorage_apple_fn_method_mobileauthentication_reveal_entry_field(uint64_t ptr, RustBuffer path, uint64_t field, RustCallStatus *_Nonnull out_status
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_SET_BIOMETRIC_UNLOCK
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEAUTHENTICATION_SET_BIOMETRIC_UNLOCK
RustBuffer uniffi_ironstorage_apple_fn_method_mobileauthentication_set_biometric_unlock(uint64_t ptr, int8_t enabled, RustCallStatus *_Nonnull out_status
@@ -720,12 +740,36 @@ uint16_t uniffi_ironstorage_apple_checksum_func_set_selected_mobile_tab(void
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_CANCEL
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_cancel(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_COPY_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_COPY_ENTRY_FIELD
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_copy_entry_field(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_ENTRY_PAGE
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_ENTRY_PAGE
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_entry_page(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_MANUAL_LOCK
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_MANUAL_LOCK
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_manual_lock(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_REPLACE_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_REPLACE_ENTRY_FIELD
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_replace_entry_field(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_REVEAL_ENTRY_FIELD
#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_REVEAL_ENTRY_FIELD
uint16_t uniffi_ironstorage_apple_checksum_method_mobileauthentication_reveal_entry_field(void
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEAUTHENTICATION_SET_BIOMETRIC_UNLOCK