diff --git a/passKit/Models/PasswordStore.swift b/passKit/Models/PasswordStore.swift index f71b8a6..b6d01b1 100644 --- a/passKit/Models/PasswordStore.swift +++ b/passKit/Models/PasswordStore.swift @@ -410,7 +410,7 @@ public class PasswordStore { } if Defaults.isEnableGPGIDOn { let encryptedDataPath = password.fileURL(in: storeURL) - return [findGPGID(from: encryptedDataPath)] + return findGPGIDs(from: encryptedDataPath) } return [] }() @@ -461,7 +461,7 @@ extension PasswordStore { } } -func findGPGID(from url: URL) -> String { +func findGPGIDs(from url: URL) -> [String] { var path = url while !FileManager.default.fileExists(atPath: path.appendingPathComponent(".gpg-id").path), path.path != "file:///" { @@ -469,5 +469,9 @@ func findGPGID(from url: URL) -> String { } path = path.appendingPathComponent(".gpg-id") - return (try? String(contentsOf: path))?.trimmed ?? "" + let allKeysSeparatedByNewline = (try? String(contentsOf: path)) ?? "" + return allKeysSeparatedByNewline + .split(separator: "\n") + .map { String($0).trimmed } + .filter { !$0.isEmpty } } diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/objects/23/44f8116ab49ad30dd96d92e306a2b28839ee71 b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/23/44f8116ab49ad30dd96d92e306a2b28839ee71 new file mode 100644 index 0000000..d798c2c Binary files /dev/null and b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/23/44f8116ab49ad30dd96d92e306a2b28839ee71 differ diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/objects/34/22e35e46f42b12fdca050c9bc424028d0e89c8 b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/34/22e35e46f42b12fdca050c9bc424028d0e89c8 new file mode 100644 index 0000000..69995d0 Binary files /dev/null and b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/34/22e35e46f42b12fdca050c9bc424028d0e89c8 differ diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/objects/8b/08bf485e19720eae26df62ddceefbb8b4d8247 b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/8b/08bf485e19720eae26df62ddceefbb8b4d8247 new file mode 100644 index 0000000..ea752fb Binary files /dev/null and b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/8b/08bf485e19720eae26df62ddceefbb8b4d8247 differ diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/objects/bb/1f455127743a2e202840fc39201937a2457ed2 b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/bb/1f455127743a2e202840fc39201937a2457ed2 new file mode 100644 index 0000000..61d0371 --- /dev/null +++ b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/bb/1f455127743a2e202840fc39201937a2457ed2 @@ -0,0 +1 @@ +x1 @k^BI(9Bj]lEUMC{lD+=rKd8.4uy: n痈Ky1F \ No newline at end of file diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/objects/c7/c52ac6962d08d69e5651eedd6cbaf2f8bd05c3 b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/c7/c52ac6962d08d69e5651eedd6cbaf2f8bd05c3 new file mode 100644 index 0000000..89b191d --- /dev/null +++ b/passKitTests/Fixtures/password-store-with-gpgid.git/objects/c7/c52ac6962d08d69e5651eedd6cbaf2f8bd05c3 @@ -0,0 +1,3 @@ +xAj0s+bF#Y < |@m]Hry}B>C_ +~O S+"@yڅh}`ޱ'1EGEP$7KEiyh8f +G[g 9g {;^oH'a0d{D ϨlUKS5T B-BfH’z9RS9v qkcJ \ No newline at end of file diff --git a/passKitTests/Fixtures/password-store-with-gpgid.git/refs/heads/master b/passKitTests/Fixtures/password-store-with-gpgid.git/refs/heads/master new file mode 100644 index 0000000..2b6288a --- /dev/null +++ b/passKitTests/Fixtures/password-store-with-gpgid.git/refs/heads/master @@ -0,0 +1 @@ +c7c52ac6962d08d69e5651eedd6cbaf2f8bd05c3 diff --git a/passKitTests/Models/PasswordStoreTest.swift b/passKitTests/Models/PasswordStoreTest.swift index 4fe2c80..bb78bbf 100644 --- a/passKitTests/Models/PasswordStoreTest.swift +++ b/passKitTests/Models/PasswordStoreTest.swift @@ -32,7 +32,7 @@ final class PasswordStoreTest: XCTestCase { try cloneRepository(.withGPGID) XCTAssertEqual(passwordStore.numberOfPasswords, 4) - XCTAssertEqual(passwordStore.numberOfCommits, 16) + XCTAssertEqual(passwordStore.numberOfCommits, 17) XCTAssertEqual(passwordStore.numberOfLocalCommits, 0) let entity = passwordStore.fetchPasswordEntity(with: "personal/github.com.gpg") @@ -319,11 +319,12 @@ final class PasswordStoreTest: XCTestCase { Defaults.isEnableGPGIDOn = true [ - ("work/github.com", "4712286271220DB299883EA7062E678DA1024DAE"), - ("personal/github.com", "787EAE1A5FA3E749AA34CC6AA0645EBED862027E"), - ].forEach { path, id in - let keyID = findGPGID(from: localRepoURL.appendingPathComponent(path)) - XCTAssertEqual(keyID, id) + ("work/github.com", ["4712286271220DB299883EA7062E678DA1024DAE"]), + ("personal/github.com", ["787EAE1A5FA3E749AA34CC6AA0645EBED862027E"]), + ("shared/github.com", ["4712286271220DB299883EA7062E678DA1024DAE", "787EAE1A5FA3E749AA34CC6AA0645EBED862027E"]), + ].forEach { path, keyIDs in + let foundKeyIDs = findGPGIDs(from: localRepoURL.appendingPathComponent(path)) + XCTAssertEqual(foundKeyIDs, keyIDs) } let personal = try decrypt(path: "personal/github.com.gpg")