Consider OTP tokens as possible lines in password files

This commit is contained in:
Danny Moesch 2018-03-11 13:01:46 +01:00 committed by Bob Sun
parent 673aee1e7a
commit 3a0e6fa3f6

View file

@ -87,7 +87,7 @@ public class Password {
additions.removeAll()
// split the plain text
let plainTextSplit = self.plainText.split(maxSplits: 1, omittingEmptySubsequences: false) {
let plainTextSplit = self.plainText.split(omittingEmptySubsequences: true) {
$0 == "\n" || $0 == "\r\n"
}.map(String.init)
@ -95,16 +95,25 @@ public class Password {
password = plainTextSplit.first ?? ""
// get remaining lines
let additionalFields = plainTextSplit.last ?? ""
let additionalLines = plainTextSplit[1...]
// separate normal lines (no otp tokens)
let normalAdditionalLines = additionalLines.filter {
!$0.hasPrefix(Password.OTPAUTH_URL_START)
}.joined(separator: "\n")
// try to interpret the text format as YAML first
do {
try getAdditionalFields(fromYaml: additionalFields)
try getAdditionalFields(fromYaml: normalAdditionalLines)
}
catch {
getAdditionalFields(fromPlainText: additionalFields)
getAdditionalFields(fromPlainText: normalAdditionalLines)
}
// get and append otp tokens
let otpAdditionalLines = additionalLines.filter { $0.hasPrefix(Password.OTPAUTH_URL_START) }
otpAdditionalLines.forEach { self.additions.append((Password.OTPAUTH, $0)) }
// check whether the first line looks like an otp entry
let (key, value) = Password.getKeyValuePair(from: self.password)
if Password.otpKeywords.contains(key ?? "") {