Skip to content

Commit

Permalink
Move to fork of Zip
Browse files Browse the repository at this point in the history
  • Loading branch information
fpseverino committed Aug 14, 2024
1 parent 755ff55 commit 59cee89
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 30 deletions.
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ let package = Package(
.package(url: "https://github.com/vapor/vapor.git", from: "4.102.0"),
.package(url: "https://github.com/vapor/fluent.git", from: "4.11.0"),
.package(url: "https://github.com/vapor/apns.git", from: "4.1.0"),
.package(url: "https://github.com/weichsel/ZIPFoundation.git", branch: "chore/swift6"),
.package(url: "https://github.com/fpseverino/Zip.git", branch: "update"),
.package(url: "https://github.com/apple/swift-certificates.git", from: "1.5.0"),
// used in tests
.package(url: "https://github.com/vapor/fluent-sqlite-driver.git", from: "4.7.4"),
Expand All @@ -26,7 +26,7 @@ let package = Package(
.product(name: "Fluent", package: "fluent"),
.product(name: "Vapor", package: "vapor"),
.product(name: "VaporAPNS", package: "apns"),
.product(name: "ZIPFoundation", package: "zipfoundation"),
.product(name: "Zip", package: "zip"),
.product(name: "X509", package: "swift-certificates"),
],
swiftSettings: swiftSettings
Expand Down
21 changes: 11 additions & 10 deletions Sources/Orders/OrdersServiceCustom.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import APNSCore
import Fluent
import NIOSSL
import PassKit
import ZIPFoundation
import Zip
@_spi(CMS) import X509

/// Class to handle ``OrdersService``.
Expand Down Expand Up @@ -432,15 +432,16 @@ extension OrdersServiceCustom {
/// - db: The `Database` to use.
/// - Returns: The generated order content as `Data`.
public func generateOrderContent(for order: O, on db: any Database) async throws -> Data {
let src = try await delegate.template(for: order, db: db)
guard (try? src.resourceValues(forKeys: [.isDirectoryKey]).isDirectory) ?? false else {
let templateDirectory = try await delegate.template(for: order, db: db)
guard (try? templateDirectory.resourceValues(forKeys: [.isDirectoryKey]).isDirectory) ?? false else {
throw OrdersError.templateNotDirectory
}
var files = try FileManager.default.contentsOfDirectory(at: templateDirectory, includingPropertiesForKeys: nil)

let tmp = FileManager.default.temporaryDirectory
let root = tmp.appendingPathComponent(UUID().uuidString, isDirectory: true)

try FileManager.default.copyItem(at: src, to: root)
try FileManager.default.copyItem(at: templateDirectory, to: root)
defer { _ = try? FileManager.default.removeItem(at: root) }

let encoder = JSONEncoder()
Expand All @@ -451,11 +452,11 @@ extension OrdersServiceCustom {
for: Self.generateManifestFile(using: encoder, in: root),
in: root
)
let zipFile = tmp.appendingPathComponent("\(UUID().uuidString).order")
try FileManager.default.zipItem(at: root, to: zipFile, shouldKeepParent: false)
defer { _ = try? FileManager.default.removeItem(at: zipFile) }
return try Data(contentsOf: zipFile)

files.append(URL(fileURLWithPath: "order.json", relativeTo: root))
files.append(URL(fileURLWithPath: "manifest.json", relativeTo: root))
files.append(URL(fileURLWithPath: "signature", relativeTo: root))

return try Data(contentsOf: Zip.quickZipFiles(files, fileName: UUID().uuidString))
}
}
34 changes: 16 additions & 18 deletions Sources/Passes/PassesServiceCustom.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import APNSCore
import Fluent
import NIOSSL
import PassKit
import ZIPFoundation
import Zip
@_spi(CMS) import X509

/// Class to handle ``PassesService``.
Expand Down Expand Up @@ -529,15 +529,15 @@ extension PassesServiceCustom {
/// - db: The `Database` to use.
/// - Returns: The generated pass content as `Data`.
public func generatePassContent(for pass: P, on db: any Database) async throws -> Data {
let src = try await delegate.template(for: pass, db: db)
guard (try? src.resourceValues(forKeys: [.isDirectoryKey]).isDirectory) ?? false else {
let templateDirectory = try await delegate.template(for: pass, db: db)
guard (try? templateDirectory.resourceValues(forKeys: [.isDirectoryKey]).isDirectory) ?? false else {
throw PassesError.templateNotDirectory
}
var files = try FileManager.default.contentsOfDirectory(at: templateDirectory, includingPropertiesForKeys: nil)

let tmp = FileManager.default.temporaryDirectory
let root = tmp.appendingPathComponent(UUID().uuidString, isDirectory: true)

try FileManager.default.copyItem(at: src, to: root)
try FileManager.default.copyItem(at: templateDirectory, to: root)
defer { _ = try? FileManager.default.removeItem(at: root) }

let encoder = JSONEncoder()
Expand All @@ -547,18 +547,18 @@ extension PassesServiceCustom {
// Pass Personalization
if let encodedPersonalization = try await self.delegate.encodePersonalization(for: pass, db: db, encoder: encoder) {
try encodedPersonalization.write(to: root.appendingPathComponent("personalization.json"))
files.append(URL(fileURLWithPath: "personalization.json", relativeTo: root))
}

try self.generateSignatureFile(
for: Self.generateManifestFile(using: encoder, in: root),
in: root
)

let zipFile = tmp.appendingPathComponent("\(UUID().uuidString).pkpass")
try FileManager.default.zipItem(at: root, to: zipFile, shouldKeepParent: false)
defer { _ = try? FileManager.default.removeItem(at: zipFile) }

return try Data(contentsOf: zipFile)

files.append(URL(fileURLWithPath: "pass.json", relativeTo: root))
files.append(URL(fileURLWithPath: "manifest.json", relativeTo: root))
files.append(URL(fileURLWithPath: "signature", relativeTo: root))
return try Data(contentsOf: Zip.quickZipFiles(files, fileName: UUID().uuidString))
}

/// Generates a bundle of passes to enable your user to download multiple passes at once.
Expand All @@ -581,15 +581,13 @@ extension PassesServiceCustom {
try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true)
defer { _ = try? FileManager.default.removeItem(at: root) }

var files: [URL] = []
for (i, pass) in passes.enumerated() {
let name = "pass\(i).pkpass"
try await self.generatePassContent(for: pass, on: db)
.write(to: root.appendingPathComponent("pass\(i).pkpass"))
.write(to: root.appendingPathComponent(name))
files.append(URL(fileURLWithPath: name, relativeTo: root))
}

let zipFile = tmp.appendingPathComponent("\(UUID().uuidString).pkpasses")
try FileManager.default.zipItem(at: root, to: zipFile, shouldKeepParent: false)
defer { _ = try? FileManager.default.removeItem(at: zipFile) }

return try Data(contentsOf: zipFile)
return try Data(contentsOf: Zip.quickZipFiles(files, fileName: UUID().uuidString))
}
}

0 comments on commit 59cee89

Please sign in to comment.