mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
Verifies downloaded app’s build version matches source (if provided)
This commit is contained in:
@@ -23,6 +23,7 @@ extension VerificationError
|
|||||||
|
|
||||||
case mismatchedHash = 3
|
case mismatchedHash = 3
|
||||||
case mismatchedVersion = 4
|
case mismatchedVersion = 4
|
||||||
|
case mismatchedBuildVersion = 5
|
||||||
|
|
||||||
case undeclaredPermissions = 6
|
case undeclaredPermissions = 6
|
||||||
case addedPermissions = 7
|
case addedPermissions = 7
|
||||||
@@ -44,6 +45,10 @@ extension VerificationError
|
|||||||
VerificationError(code: .mismatchedVersion, app: app, version: version, expectedVersion: expectedVersion)
|
VerificationError(code: .mismatchedVersion, app: app, version: version, expectedVersion: expectedVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static func mismatchedBuildVersion(_ version: String, expectedVersion: String, app: AppProtocol) -> VerificationError {
|
||||||
|
VerificationError(code: .mismatchedBuildVersion, app: app, version: version, expectedVersion: expectedVersion)
|
||||||
|
}
|
||||||
|
|
||||||
static func undeclaredPermissions(_ permissions: [any ALTAppPermission], app: AppProtocol) -> VerificationError {
|
static func undeclaredPermissions(_ permissions: [any ALTAppPermission], app: AppProtocol) -> VerificationError {
|
||||||
VerificationError(code: .undeclaredPermissions, app: app, permissions: permissions)
|
VerificationError(code: .undeclaredPermissions, app: app, permissions: permissions)
|
||||||
}
|
}
|
||||||
@@ -144,6 +149,10 @@ struct VerificationError: ALTLocalizedError
|
|||||||
let appName = self.$app.name ?? NSLocalizedString("the app", comment: "")
|
let appName = self.$app.name ?? NSLocalizedString("the app", comment: "")
|
||||||
return String(format: NSLocalizedString("The downloaded version of %@ does not match the version specified by the source.", comment: ""), appName)
|
return String(format: NSLocalizedString("The downloaded version of %@ does not match the version specified by the source.", comment: ""), appName)
|
||||||
|
|
||||||
|
case .mismatchedBuildVersion:
|
||||||
|
let appName = self.$app.name ?? NSLocalizedString("the app", comment: "")
|
||||||
|
return String(format: NSLocalizedString("The downloaded version of %@ does not match the build number specified by the source.", comment: ""), appName)
|
||||||
|
|
||||||
case .undeclaredPermissions:
|
case .undeclaredPermissions:
|
||||||
let appName = self.$app.name ?? NSLocalizedString("The app", comment: "")
|
let appName = self.$app.name ?? NSLocalizedString("The app", comment: "")
|
||||||
return String(format: NSLocalizedString("%@ requires additional permissions not specified by the source.", comment: ""), appName)
|
return String(format: NSLocalizedString("%@ requires additional permissions not specified by the source.", comment: ""), appName)
|
||||||
|
|||||||
@@ -201,9 +201,14 @@ private extension VerifyAppOperation
|
|||||||
|
|
||||||
func verifyDownloadedVersion(of app: ALTApplication, @AsyncManaged matches appVersion: AppVersion) async throws
|
func verifyDownloadedVersion(of app: ALTApplication, @AsyncManaged matches appVersion: AppVersion) async throws
|
||||||
{
|
{
|
||||||
let version = await $appVersion.version
|
let (version, buildVersion) = await $appVersion.perform { ($0.version, $0.buildVersion) }
|
||||||
|
|
||||||
guard version == app.version else { throw VerificationError.mismatchedVersion(app.version, expectedVersion: version, app: app) }
|
guard version == app.version else { throw VerificationError.mismatchedVersion(app.version, expectedVersion: version, app: app) }
|
||||||
|
|
||||||
|
if let buildVersion
|
||||||
|
{
|
||||||
|
guard buildVersion == app.buildVersion else { throw VerificationError.mismatchedBuildVersion(app.buildVersion, expectedVersion: buildVersion, app: app) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyPermissions(of app: ALTApplication, @AsyncManaged match appVersion: AppVersion) async throws
|
func verifyPermissions(of app: ALTApplication, @AsyncManaged match appVersion: AppVersion) async throws
|
||||||
|
|||||||
Reference in New Issue
Block a user