mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-12 08:13:26 +01:00
Verifies downloaded app’s permissions match source
Renames source JSON permissions key to “appPermissions” in order to preserve backwards compatibility, since we’ve changed the schema for permissions.
This commit is contained in:
@@ -146,8 +146,6 @@ public class StoreApp: NSManagedObject, Decodable, Fetchable
|
||||
@NSManaged @objc(source) public var _source: Source?
|
||||
@NSManaged public internal(set) var featuringSource: Source?
|
||||
|
||||
@NSManaged @objc(permissions) public var _permissions: NSOrderedSet
|
||||
|
||||
@NSManaged @objc(latestVersion) public private(set) var latestSupportedVersion: AppVersion?
|
||||
@NSManaged @objc(versions) public private(set) var _versions: NSOrderedSet
|
||||
|
||||
@@ -163,9 +161,10 @@ public class StoreApp: NSManagedObject, Decodable, Fetchable
|
||||
}
|
||||
}
|
||||
|
||||
@nonobjc public var permissions: [AppPermission] {
|
||||
return self._permissions.array as! [AppPermission]
|
||||
@nonobjc public var permissions: Set<AppPermission> {
|
||||
return self._permissions as! Set<AppPermission>
|
||||
}
|
||||
@NSManaged @objc(permissions) internal private(set) var _permissions: NSSet // Use NSSet to avoid eagerly fetching values.
|
||||
|
||||
@nonobjc public var versions: [AppVersion] {
|
||||
return self._versions.array as! [AppVersion]
|
||||
@@ -216,7 +215,7 @@ public class StoreApp: NSManagedObject, Decodable, Fetchable
|
||||
case platformURLs
|
||||
case tintColor
|
||||
case subtitle
|
||||
case permissions
|
||||
case permissions = "appPermissions"
|
||||
case size
|
||||
case isBeta = "beta"
|
||||
case versions
|
||||
@@ -287,7 +286,11 @@ public class StoreApp: NSManagedObject, Decodable, Fetchable
|
||||
self.isBeta = try container.decodeIfPresent(Bool.self, forKey: .isBeta) ?? false
|
||||
|
||||
let permissions = try container.decodeIfPresent([AppPermission].self, forKey: .permissions) ?? []
|
||||
self._permissions = NSOrderedSet(array: permissions)
|
||||
for permission in permissions
|
||||
{
|
||||
permission.appBundleID = self.bundleIdentifier
|
||||
}
|
||||
self._permissions = NSSet(array: permissions)
|
||||
|
||||
if let versions = try container.decodeIfPresent([AppVersion].self, forKey: .versions)
|
||||
{
|
||||
@@ -367,6 +370,23 @@ internal extension StoreApp
|
||||
self._downloadURL = latestVersion.downloadURL
|
||||
self._size = Int32(latestVersion.size)
|
||||
}
|
||||
|
||||
func setPermissions(_ permissions: Set<AppPermission>)
|
||||
{
|
||||
for case let permission as AppPermission in self._permissions
|
||||
{
|
||||
if permissions.contains(permission)
|
||||
{
|
||||
permission.app = self
|
||||
}
|
||||
else
|
||||
{
|
||||
permission.app = nil
|
||||
}
|
||||
}
|
||||
|
||||
self._permissions = permissions as NSSet
|
||||
}
|
||||
}
|
||||
|
||||
public extension StoreApp
|
||||
|
||||
Reference in New Issue
Block a user