Browse Source
fix(oauth2): store hashed secret instead of encrypted
fix(oauth2): store hashed secret instead of encrypted
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>pull/47635/head
No known key found for this signature in database
GPG Key ID: 4141FEE162030638
12 changed files with 118 additions and 55 deletions
-
2apps/oauth2/appinfo/info.xml
-
1apps/oauth2/composer/composer/autoload_classmap.php
-
1apps/oauth2/composer/composer/autoload_static.php
-
5apps/oauth2/lib/Controller/OauthApiController.php
-
4apps/oauth2/lib/Controller/SettingsController.php
-
49apps/oauth2/lib/Migration/Version011901Date20240829164356.php
-
5apps/oauth2/lib/Settings/Admin.php
-
8apps/oauth2/src/App.vue
-
3apps/oauth2/src/components/OAuthItem.vue
-
81apps/oauth2/tests/Controller/OauthApiControllerTest.php
-
10apps/oauth2/tests/Controller/SettingsControllerTest.php
-
4apps/oauth2/tests/Settings/AdminTest.php
@ -0,0 +1,49 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
namespace OCA\OAuth2\Migration; |
|||
|
|||
use Closure; |
|||
use OCP\DB\QueryBuilder\IQueryBuilder; |
|||
use OCP\IDBConnection; |
|||
use OCP\Migration\IOutput; |
|||
use OCP\Migration\SimpleMigrationStep; |
|||
use OCP\Security\ICrypto; |
|||
|
|||
class Version011901Date20240829164356 extends SimpleMigrationStep { |
|||
|
|||
public function __construct( |
|||
private IDBConnection $connection, |
|||
private ICrypto $crypto, |
|||
) { |
|||
} |
|||
|
|||
public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { |
|||
$qbUpdate = $this->connection->getQueryBuilder(); |
|||
$qbUpdate->update('oauth2_clients') |
|||
->set('secret', $qbUpdate->createParameter('updateSecret')) |
|||
->where( |
|||
$qbUpdate->expr()->eq('id', $qbUpdate->createParameter('updateId')) |
|||
); |
|||
|
|||
$qbSelect = $this->connection->getQueryBuilder(); |
|||
$qbSelect->select('id', 'secret') |
|||
->from('oauth2_clients'); |
|||
$req = $qbSelect->executeQuery(); |
|||
while ($row = $req->fetch()) { |
|||
$id = $row['id']; |
|||
$storedEncryptedSecret = $row['secret']; |
|||
$secret = $this->crypto->decrypt($storedEncryptedSecret); |
|||
$hashedSecret = bin2hex($this->crypto->calculateHMAC($secret)); |
|||
$qbUpdate->setParameter('updateSecret', $hashedSecret, IQueryBuilder::PARAM_STR); |
|||
$qbUpdate->setParameter('updateId', $id, IQueryBuilder::PARAM_INT); |
|||
$qbUpdate->executeStatement(); |
|||
} |
|||
$req->closeCursor(); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue