mirror of
https://github.com/bitwarden/ios.git
synced 2025-12-14 12:51:57 -06:00
49 lines
1.3 KiB
Swift
49 lines
1.3 KiB
Swift
import Foundation
|
|
import UIKit
|
|
|
|
@objc(StringEncryptionTransformer)
|
|
class StringEncryptionTransformer: ValueTransformer {
|
|
var cryptoService: CryptoService = .init()
|
|
|
|
override class func allowsReverseTransformation() -> Bool {
|
|
true
|
|
}
|
|
|
|
override func transformedValue(_ value: Any?) -> Any? {
|
|
var toEncrypt: String
|
|
|
|
switch value {
|
|
case let aString as String:
|
|
toEncrypt = aString
|
|
default:
|
|
return nil
|
|
}
|
|
|
|
if let encryptedData = cryptoService.encrypt(toEncrypt) {
|
|
return encryptedData
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
override func reverseTransformedValue(_ value: Any?) -> Any? {
|
|
if let encryptedData = value as? Data {
|
|
if let decryptedData = cryptoService.decrypt(encryptedData) {
|
|
return String(decoding: decryptedData, as: UTF8.self)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
extension StringEncryptionTransformer {
|
|
static let name = NSValueTransformerName(rawValue: String(describing: StringEncryptionTransformer.self))
|
|
|
|
/// Registers the value transformer with `ValueTransformer`.
|
|
static func register() {
|
|
let transformer = StringEncryptionTransformer()
|
|
ValueTransformer.setValueTransformer(transformer, forName: name)
|
|
}
|
|
}
|