Skip to content

Commit 6251d1e

Browse files
committed
Refactor Token::bearerToken()
1 parent d46e330 commit 6251d1e

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/Drivers/APNs/Token.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Exception;
66
use GuzzleHttp;
7+
use RuntimeException;
78
use Sunaoka\PushNotifications\Drivers\Driver;
89
use Sunaoka\PushNotifications\Drivers\Feedback;
910
use Sunaoka\PushNotifications\Exceptions\OptionTypeError;
@@ -112,22 +113,31 @@ private function _send($device)
112113
private function bearerToken($authKey, $keyId, $teamId)
113114
{
114115
$key = openssl_pkey_get_private($authKey);
116+
if ($key === false) {
117+
throw new RuntimeException(openssl_error_string()); // @codeCoverageIgnore
118+
}
119+
120+
$segments = [];
121+
$segments[] = $this->encodeB64URLSafe(json_encode(['alg' => 'ES256', 'kid' => $keyId]));
122+
$segments[] = $this->encodeB64URLSafe(json_encode(['iss' => $teamId, 'iat' => time()]));
115123

116-
$header = $this->jwtEncode(['alg' => 'ES256', 'kid' => $keyId]);
117-
$claims = $this->jwtEncode(['iss' => $teamId, 'iat' => time()]);
124+
$success = openssl_sign(implode('.', $segments), $signature, $key, 'sha256');
125+
if ($success === false) {
126+
throw new RuntimeException(openssl_error_string()); // @codeCoverageIgnore
127+
}
118128

119-
openssl_sign("{$header}.{$claims}", $signature, $key, 'sha256');
129+
$segments[] = $this->encodeB64URLSafe($signature);
120130

121-
return sprintf('bearer %s.%s.%s', $header, $claims, base64_encode($signature));
131+
return 'bearer ' . implode('.', $segments);
122132
}
123133

124134
/**
125-
* @param array $input
135+
* @param string $input
126136
*
127137
* @return string
128138
*/
129-
private function jwtEncode($input)
139+
private function encodeB64URLSafe($input)
130140
{
131-
return str_replace('=', '', strtr(base64_encode(json_encode($input)), '+/', '-_'));
141+
return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
132142
}
133143
}

tests/Fake/Certs/fake.p8

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIGTAgEAMA0GCSqGSIb3DQEBAQUABH8wfQIBAAIXAM2ikj0CTh0vyIu5/zLk+fPF
3-
4K2g7xECAwEAAQIWXt1zDYY0ty5GHH78Up+IrvvbkC7XKQIMAOcX2sPRaFcqXAPH
4-
AgwA48xLmgs6aQPVRmcCC3IcFFkHCTepYgA3AgwA18HzRWcnHrojsjcCCzx4xaxZ
5-
N+kN9ocw
2+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+K4GtiSGthyWghna
3+
pMC+R1chj8fvydobNaOl/UBoCGqhRANCAATneGLhyb/UZd0HBBQhSqsMGN4ede8N
4+
eEvlJmgZ8z7NYbQpUZehHwm4M64oW90uzmUgj0r+CSMfyksBK/2CZK6j
65
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)