Skip to content

Commit e7e11f7

Browse files
Merge pull request #1105 from nextcloud/backport/1100/stable20
[stable20] Restore old device signature so the proxy works again
2 parents 97f9506 + 86087ab commit e7e11f7

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

lib/Controller/PushController.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,13 @@ public function registerDevice(string $pushTokenHash, string $devicePublicKey, s
118118
$key = $this->identityProof->getKey($user);
119119

120120
$deviceIdentifier = json_encode([$user->getCloudId(), $token->getId()]);
121-
$deviceIdentifier = base64_encode(hash('sha512', $deviceIdentifier, true));
122121
openssl_sign($deviceIdentifier, $signature, $key->getPrivate(), OPENSSL_ALGO_SHA512);
122+
/**
123+
* For some reason the push proxy's golang code needs the signature
124+
* of the deviceIdentifier before the sha512 hashing. Assumption is that
125+
* openssl_sign already does the sha512 internally.
126+
*/
127+
$deviceIdentifier = base64_encode(hash('sha512', $deviceIdentifier, true));
123128

124129
$appType = 'unknown';
125130
if ($this->request->isUserAgent([

tests/Integration/features/bootstrap/FeatureContext.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,18 +268,28 @@ public function registerForPushNotifications(string $user, TableNode $formData)
268268
}
269269

270270
/**
271-
* @Then /^can validate the response and signature$/
271+
* @Then /^can validate the response and (skip verifying|verify) signature$/
272272
*/
273-
public function validateResponseAndSignature(): void {
273+
public function validateResponseAndSignature(string $verify): void {
274274
$response = $this->getArrayOfNotificationsResponded($this->response);
275275

276276
Assert::assertStringStartsWith('-----BEGIN PUBLIC KEY-----' . "\n", $response['publicKey']);
277277
Assert::assertStringEndsWith('-----END PUBLIC KEY-----' . "\n", $response['publicKey']);
278278
Assert::assertNotEmpty($response['deviceIdentifier'], 'Device identifier should not be empty');
279279
Assert::assertNotEmpty($response['signature'], 'Signature should not be empty');
280280

281-
$result = openssl_verify($response['deviceIdentifier'], base64_decode($response['signature']), $response['publicKey'], OPENSSL_ALGO_SHA512);
282-
Assert::assertEquals(true, $result, 'Failed to verify the signature');
281+
if ($verify === 'verify') {
282+
$result = openssl_verify($response['deviceIdentifier'], base64_decode($response['signature']), $response['publicKey'], OPENSSL_ALGO_SHA512);
283+
Assert::assertEquals(true, $result, 'Failed to verify the signature');
284+
} else {
285+
/**
286+
* For some weird reason the push proxy's golang code needs the signature
287+
* of the deviceIdentifier before the sha512 hashing. Assumption is that
288+
* openssl_sign already does the sha512 internally.
289+
* The problem is we can not revert the sha512 of the deviceIdentifier
290+
*/
291+
var_dump("\n\nEnjoy with care, signature was not verified!\n\n");
292+
}
283293
}
284294

285295
/**

tests/Integration/features/push-registration.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Feature: Push registration
3838
| devicePublicKey | VALID_KEY |
3939
| proxyServer | https://push-notifications.nextcloud.com/ |
4040
Then status code is 201
41-
And can validate the response and signature
41+
And can validate the response and skip verifying signature
4242

4343
Scenario: Unregistering from push notifications without app password
4444
Given user "test1" forgets the app password
@@ -52,7 +52,7 @@ Feature: Push registration
5252
| devicePublicKey | VALID_KEY |
5353
| proxyServer | https://push-notifications.nextcloud.com/ |
5454
Then status code is 201
55-
And can validate the response and signature
55+
And can validate the response and skip verifying signature
5656
Given user "test1" unregisters from push notifications
5757
Then status code is 202
5858
Given user "test1" unregisters from push notifications

tests/Unit/Controller/PushControllerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ public function dataRegisterDevice() {
302302
[
303303
'publicKey' => $this->userPublicKey,
304304
'deviceIdentifier' => 'XUCEZ1EHvTUcVhIvrQQQ1XcP0ZD2BFdFqw4EYbOhBfiEgXgirurR4x/ve4GSSyfivvbQOdOkZUM+g4m+tSb0Ew==',
305-
'signature' => 'X9+J7NNLfG9Ft6C36zrYLVJ5aH5euIROzdV937hsU81jL7WvOwzBfc7bImzxU3Bnev5wEKwkw7Ts/2q/+UUkOxgtEZinp52s87S5obKtsVXsczHbsqg4p/ueoBPhF17VsP1e8kMtxZ4snk/iArX4Eu1cfaM3+OckmpO0MYXy0rUbYpQPAJo4VgRFKKjFvfEVOj8N74DTIJ+TjRsvvDhJbb9KpeFe3a6Rv9mIo0AqoK+deAbUkWY0aM+74noVXvPtNzExgK4mWJ02+JHEuQEUbCuQsgoBia0vC3fILbwVxHzrieWGEnE7vkRyFEzlkeo7ZSMawDPxsPN5HxwBs2SZig==',
305+
'signature' => 'LRhbXO71WYX9qqDbQX7C+87YaaFfWoT/vG0DlaXdBz6+lhyOA0dw/1Ggz3fd7RerCQ0MfgnnTyxO+cSeRpUaPdA2yPjfoiPpfYA5SOJQGF3comS/HYna3fHiFDbOoM3BJOnjvqiSZdxA/ICdyl2mEEC5wO7AZ4OZKBTa5XfL7eSCXZLEv1YldqcLOStbXrI7voDQocTMJxoQZI/j8BVcf2i3D6F454aXIFDrYYzC2PQY+CKJoXZW0m0RMWaTM2B8tBmFFwrmaGLDqcjjpd33TsTtsV5DB7WimffLBPpOuGV4Z1Kiagp/mxpPLz2NImNV79mDX9gY3ZppCZTwChP5qQ==',
306306
],
307307
Http::STATUS_CREATED,
308308
],
@@ -317,7 +317,7 @@ public function dataRegisterDevice() {
317317
[
318318
'publicKey' => $this->userPublicKey,
319319
'deviceIdentifier' => 'x9vSImcGjhzR9BfZ/XbbUqqCCNC4bHKsX7vkQWNZRd1/MiY+OuF02fx8K08My0RpkNnwj/rQ/gVSU1oEdFwkww==',
320-
'signature' => 'GFpnv3MO7mcBef2RJ4Ayrl6RQakGM7AvlKhoTr3DUWnv+iBzwGy8YV34HIPoArz4tyqonHRlLsxPYq4ENPfGO99KrIS16z4RUq0wiCBGf+S8/K8lM9cE9EBKE9yrkTsSvZGICEusvxQ+cTfVr30bnavvi1wL1UuxxDBlJebda9FJ9HfaS24j4rT7K78oMguqDVM+4hhr6BMhcpUVV+kTpOaBpluw5pRDwUP3jJBmkkOa57WRKFcu0Lr/XIx/G0c8Si+BAfM//CTMstwp5XDFn4W9EYSStjNrvsULdV+tOKFwnowqts+UFzEDvmZ1g4qIMWUUPBF4/pjaiDqtMojgrA==',
320+
'signature' => 'J9AcdJt5youJmMnBhS+Cc9ytArynIKtCRoNf/m0oOFO/e0hWHqs1NRdQBe81qzYIjf0+bj0Q97X9Xv1rnVJesPkQUbGaa4nAPt+viGSfvzTptjX4LKgqm8B3UkduBA262IcaWgM5P84gUqelkQIC1nIqq/MJTuC6oQ5lUwIV1a92ZurDjhwH4b3f7/ZLTTOTRD0DWN9W/yOyF1qECivgePR3eu+mkcBzXVU/TDZDJic9G7xhqcTnWV6qk+aKyzdNo1tu5W7mF+v5vF6rrGZrq55vPLWAHApTD7P+NFV01BnaCuN7/qGJNVs7m7EH03jpOw7y3jqNMmcmonYrJSMVqg==',
321321
],
322322
Http::STATUS_OK,
323323
],

0 commit comments

Comments
 (0)