mirror of
https://github.com/shlinkio/shlink.git
synced 2024-12-18 05:10:43 -06:00
46 lines
1.2 KiB
PHP
46 lines
1.2 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace ShlinkMigrations;
|
||
|
|
||
|
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
||
|
use Doctrine\DBAL\Schema\Schema;
|
||
|
use Doctrine\Migrations\AbstractMigration;
|
||
|
|
||
|
use function hash;
|
||
|
|
||
|
/**
|
||
|
* Hash API keys as SHA256
|
||
|
*/
|
||
|
final class Version20241105215309 extends AbstractMigration
|
||
|
{
|
||
|
public function up(Schema $schema): void
|
||
|
{
|
||
|
$keyColumnName = $this->connection->quoteIdentifier('key');
|
||
|
|
||
|
$qb = $this->connection->createQueryBuilder();
|
||
|
$qb->select($keyColumnName)
|
||
|
->from('api_keys');
|
||
|
$result = $qb->executeQuery();
|
||
|
|
||
|
$updateQb = $this->connection->createQueryBuilder();
|
||
|
$updateQb
|
||
|
->update('api_keys')
|
||
|
->set($keyColumnName, ':encryptedKey')
|
||
|
->where($updateQb->expr()->eq($keyColumnName, ':plainTextKey'));
|
||
|
|
||
|
while ($key = $result->fetchOne()) {
|
||
|
$updateQb->setParameters([
|
||
|
'encryptedKey' => hash('sha256', $key),
|
||
|
'plainTextKey' => $key,
|
||
|
])->executeStatement();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function isTransactional(): bool
|
||
|
{
|
||
|
return ! ($this->connection->getDatabasePlatform() instanceof MySQLPlatform);
|
||
|
}
|
||
|
}
|