private function copyPackageFiles(Package $package) { $packageDir = $package->getPackageDir(); mkdir($packageDir . '/icon.iconset'); foreach (Package::$packageFiles as $rawFile) { $filePath = sprintf('%s/%s', $packageDir, $rawFile); copy(sprintf('%s/%s', $this->basePushPackagePath, $rawFile), $filePath); if ($rawFile === 'website.json') { $websiteJson = file_get_contents($filePath); $websiteJson = str_replace('{{ userId }}', $package->getUserId(), $websiteJson); $websiteJson = str_replace('{{ host }}', $this->host, $websiteJson); file_put_contents($filePath, $websiteJson); } } }
/** * Creates a package signature using the given certificate and package directory. * * @param \JWage\APNS\Certificate $certificate * @param \JWage\APNS\Safari\Package $package * * @return string Path of signature */ public function createPackageSignature(Certificate $certificate, Package $package) { $pkcs12 = $certificate->getCertificateString(); $certPassword = $certificate->getPassword(); $certs = array(); if (!openssl_pkcs12_read($pkcs12, $certs, $certPassword)) { throw new RuntimeException('Failed to create signature.'); } $signaturePath = sprintf('%s/signature', $package->getPackageDir()); $manifestJsonPath = sprintf('%s/manifest.json', $package->getPackageDir()); // Sign the manifest.json file with the private key from the certificate $certData = openssl_x509_read($certs['cert']); $privateKey = openssl_pkey_get_private($certs['pkey'], $certPassword); openssl_pkcs7_sign($manifestJsonPath, $signaturePath, $certData, $privateKey, array(), PKCS7_BINARY | PKCS7_DETACHED); // Convert the signature from PEM to DER $signaturePem = file_get_contents($signaturePath); $matches = array(); if (!preg_match('~Content-Disposition:[^\\n]+\\s*?([A-Za-z0-9+=/\\r\\n]+)\\s*?-----~', $signaturePem, $matches)) { throw new ErrorException('Failed to extract content from signature pem.'); } $signatureDer = base64_decode($matches[1]); file_put_contents($signaturePath, $signatureDer); return $signaturePath; }
public function createPackageSignature(Certificate $certificate, Package $package) { $signaturePath = sprintf('%s/signature', $package->getPackageDir()); file_put_contents($signaturePath, 'test signature'); }