@@ -22,7 +22,7 @@ import Compression
22
22
import Common
23
23
24
24
extension Code {
25
- static func checkLastPass( with str: String ) -> [ Code ] ? {
25
+ static func checkLastPass( with str: String ) -> ( codes : [ Code ] , totalCodesCount : Int ) ? {
26
26
guard let components = NSURLComponents ( string: str) ,
27
27
let scheme = components. scheme, scheme == " lpaauth-migration " ,
28
28
let host = components. host, host == " offline " ,
@@ -31,9 +31,9 @@ extension Code {
31
31
let value = data. value? . removingPercentEncoding,
32
32
let encodeData = Data ( base64Encoded: value) ,
33
33
let decompressedData = decompress ( encodeData) ,
34
- let codes = parseAndDecompressMainStructure ( for: decompressedData)
34
+ let ( codes, totalCodesCount ) = parseAndDecompressMainStructure ( for: decompressedData)
35
35
else { return nil }
36
- return codes
36
+ return ( codes, totalCodesCount )
37
37
}
38
38
}
39
39
@@ -77,7 +77,7 @@ private extension Code {
77
77
return decompressedData
78
78
}
79
79
80
- static func parseAndDecompressMainStructure( for data: Data ) -> [ Code ] ? {
80
+ static func parseAndDecompressMainStructure( for data: Data ) -> ( codes : [ Code ] , totalCodesCount : Int ) ? {
81
81
let supportedVersion : Int = 3
82
82
struct MainStructure : Decodable {
83
83
let content : String
@@ -112,16 +112,22 @@ private extension Code {
112
112
return nil
113
113
}
114
114
115
- return content. a. map ( { parseLastPassService ( $0) } )
115
+ return ( content. a. compactMap ( { parseLastPassService ( $0) } ) , totalCodesCount : content . a . count )
116
116
}
117
117
118
- static func parseLastPassService( _ service: LastPassService ) -> Code {
119
- Code (
118
+ static func parseLastPassService( _ service: LastPassService ) -> Code ? {
119
+ guard let digits = Digits ( rawValue: service. d) ,
120
+ let periodValue = service. tS,
121
+ let period = Period ( rawValue: periodValue) ,
122
+ service. s. sanitazeSecret ( ) . isValidSecret ( )
123
+ else { return nil }
124
+
125
+ return Code (
120
126
issuer: service. iN,
121
127
label: service. uN? . sanitizeInfo ( ) ,
122
128
secret: service. s. sanitazeSecret ( ) ,
123
- period: . create ( service . tS ) ,
124
- digits: . create ( service . d ) ,
129
+ period: period ,
130
+ digits: digits ,
125
131
algorithm: . create( service. a) ,
126
132
tokenType: . totp,
127
133
counter: 0 ,
0 commit comments