[AltStoreCore] Refactors core AltStore logic into AltStoreCore framework

AltStoreCore will contain all shared AltStore code between AltStore and any app extensions. Initially, it includes all AltStore model logic.
This commit is contained in:
Riley Testut
2020-09-03 16:39:08 -07:00
parent de925e7fea
commit f1a39e1a1f
149 changed files with 3266 additions and 1792 deletions

View File

@@ -0,0 +1,88 @@
//
// 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
public struct KeychainItem<Value>
{
public let key: String
public var wrappedValue: Value? {
get {
switch Value.self
{
case is Data.Type: return try? Keychain.shared.keychain.getData(self.key) as? Value
case is String.Type: return try? Keychain.shared.keychain.getString(self.key) as? Value
default: return nil
}
}
set {
switch Value.self
{
case is Data.Type: Keychain.shared.keychain[data: self.key] = newValue as? Data
case is String.Type: Keychain.shared.keychain[self.key] = newValue as? String
default: break
}
}
}
public init(key: String)
{
self.key = key
}
}
public class Keychain
{
public static let shared = Keychain()
fileprivate let keychain = KeychainAccess.Keychain(service: "com.rileytestut.AltStore").accessibility(.afterFirstUnlock).synchronizable(true)
@KeychainItem(key: "appleIDEmailAddress")
public var appleIDEmailAddress: String?
@KeychainItem(key: "appleIDPassword")
public var appleIDPassword: String?
@KeychainItem(key: "signingCertificatePrivateKey")
public var signingCertificatePrivateKey: Data?
@KeychainItem(key: "signingCertificateSerialNumber")
public var signingCertificateSerialNumber: String?
@KeychainItem(key: "signingCertificate")
public var signingCertificate: Data?
@KeychainItem(key: "signingCertificatePassword")
public var signingCertificatePassword: String?
@KeychainItem(key: "patreonAccessToken")
public var patreonAccessToken: String?
@KeychainItem(key: "patreonRefreshToken")
public var patreonRefreshToken: String?
@KeychainItem(key: "patreonCreatorAccessToken")
public var patreonCreatorAccessToken: String?
private init()
{
}
public func reset()
{
self.appleIDEmailAddress = nil
self.appleIDPassword = nil
self.signingCertificatePrivateKey = nil
self.signingCertificateSerialNumber = nil
}
}