Files
SideStore/Sources/SideStoreCore/Components/Keychain.swift

84 lines
2.3 KiB
Swift
Raw Normal View History

//
// Keychain.swift
// AltStore
//
// Created by Riley Testut on 6/4/19.
// Copyright © 2019 Riley Testut. All rights reserved.
//
import Foundation
import KeychainAccess
import AltSign
@propertyWrapper
2023-03-01 00:48:36 -05:00
public struct KeychainItem<Value> {
public let key: String
2023-03-01 00:48:36 -05:00
public var wrappedValue: Value? {
get {
2023-03-01 00:48:36 -05:00
switch Value.self {
case is Data.Type: return try? Keychain.shared.keychain.getData(key) as? Value
case is String.Type: return try? Keychain.shared.keychain.getString(key) as? Value
default: return nil
}
}
set {
2023-03-01 00:48:36 -05:00
switch Value.self {
case is Data.Type: Keychain.shared.keychain[data: key] = newValue as? Data
case is String.Type: Keychain.shared.keychain[key] = newValue as? String
default: break
}
}
}
2023-03-01 00:48:36 -05:00
public init(key: String) {
self.key = key
2019-06-06 14:46:23 -07:00
}
}
2023-03-01 00:48:36 -05:00
public class Keychain {
public static let shared = Keychain()
2023-03-01 00:48:36 -05:00
fileprivate let keychain = KeychainAccess.Keychain(service: Bundle.Info.appbundleIdentifier).accessibility(.afterFirstUnlock).synchronizable(true)
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "appleIDEmailAddress")
public var appleIDEmailAddress: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "appleIDPassword")
public var appleIDPassword: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "signingCertificatePrivateKey")
public var signingCertificatePrivateKey: Data?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "signingCertificateSerialNumber")
public var signingCertificateSerialNumber: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "signingCertificate")
public var signingCertificate: Data?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "signingCertificatePassword")
public var signingCertificatePassword: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "patreonAccessToken")
public var patreonAccessToken: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "patreonRefreshToken")
public var patreonRefreshToken: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "patreonCreatorAccessToken")
public var patreonCreatorAccessToken: String?
2023-03-01 00:48:36 -05:00
@KeychainItem(key: "patreonAccountID")
public var patreonAccountID: String?
2023-03-01 00:48:36 -05:00
private init() {}
public func reset() {
appleIDEmailAddress = nil
appleIDPassword = nil
signingCertificatePrivateKey = nil
signingCertificateSerialNumber = nil
}
}