Finally dropped the hashing of the address

This commit is contained in:
Alejandro Celaya 2018-09-14 19:04:40 +02:00
parent ffb54c4f7a
commit 3d0bca2781
3 changed files with 13 additions and 49 deletions

View File

@ -5,8 +5,6 @@ namespace ShlinkMigrations;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaException;
use Doctrine\DBAL\Types\Type;
use Doctrine\Migrations\AbstractMigration;
use Shlinkio\Shlink\Common\Exception\WrongIpException;
use Shlinkio\Shlink\Common\Util\IpAddress;
@ -18,35 +16,25 @@ final class Version20180913205455 extends AbstractMigration
{
/**
* @param Schema $schema
* @throws SchemaException
*/
public function up(Schema $schema): void
{
$visits = $schema->getTable('visits');
if ($visits->hasColumn('remote_addr_hash')) {
return;
}
$visits->addColumn('remote_addr_hash', Type::STRING, [
'notnull' => false,
'length' => 128,
]);
// Nothing to create
}
/**
* @param Schema $schema
* @throws DBALException
*/
public function postUp(Schema $schema)
public function postUp(Schema $schema): void
{
$qb = $this->connection->createQueryBuilder();
$qb->select('id', 'remote_addr', 'visit_location_id')
$qb->select('id', 'remote_addr')
->from('visits');
$st = $this->connection->executeQuery($qb->getSQL());
$qb = $this->connection->createQueryBuilder();
$qb->update('visits', 'v')
->set('v.remote_addr_hash', ':hash')
->set('v.remote_addr', ':obfuscatedAddr')
->where('v.id=:id');
@ -58,7 +46,6 @@ final class Version20180913205455 extends AbstractMigration
$qb->setParameters([
'id' => $row['id'],
'hash' => \hash('sha256', $addr),
'obfuscatedAddr' => $this->determineAddress((string) $addr, $row),
])->execute();
}
@ -66,11 +53,6 @@ final class Version20180913205455 extends AbstractMigration
private function determineAddress(string $addr, array $row): ?string
{
// When the visit has already been located, drop the IP address
if (isset($row['visit_location_id'])) {
return null;
}
if ($addr === IpAddress::LOCALHOST) {
return $addr;
}
@ -84,11 +66,9 @@ final class Version20180913205455 extends AbstractMigration
/**
* @param Schema $schema
* @throws SchemaException
*/
public function down(Schema $schema): void
{
$visits = $schema->getTable('visits');
$visits->dropColumn('remote_addr_hash');
// Nothing to rollback
}
}

View File

@ -10,17 +10,17 @@
"format": "date-time",
"description": "The date in which the visit was performed"
},
"remoteAddr": {
"type": "string",
"description": "This value is deprecated and will always be null",
"deprecated": true
},
"userAgent": {
"type": "string",
"description": "The user agent from which the visit was performed"
},
"visitLocation": {
"$ref": "./VisitLocation.json"
},
"remoteAddr": {
"type": "string",
"description": "This value is deprecated and will always be null",
"deprecated": true
}
}
}

View File

@ -33,11 +33,6 @@ class Visit extends AbstractEntity implements \JsonSerializable
* @ORM\Column(type="string", length=256, name="remote_addr", nullable=true)
*/
private $remoteAddr;
/**
* @var string|null
* @ORM\Column(type="string", length=256, name="remote_addr_hash", nullable=true)
*/
private $remoteAddrHash;
/**
* @var string
* @ORM\Column(type="string", length=256, name="user_agent", nullable=true)
@ -94,7 +89,7 @@ class Visit extends AbstractEntity implements \JsonSerializable
return $this;
}
public function getRemoteAddr(): string
public function getRemoteAddr(): ?string
{
return $this->remoteAddr;
}
@ -102,8 +97,6 @@ class Visit extends AbstractEntity implements \JsonSerializable
public function setRemoteAddr(?string $remoteAddr): self
{
$this->remoteAddr = $this->obfuscateAddress($remoteAddr);
$this->remoteAddrHash = $this->hashAddress($remoteAddr);
return $this;
}
@ -121,17 +114,6 @@ class Visit extends AbstractEntity implements \JsonSerializable
}
}
private function hashAddress(?string $address): ?string
{
return $address ? \hash('sha256', $address) : null;
}
public function resetObfuscatedAddr(): self
{
$this->remoteAddr = null;
return $this;
}
public function getUserAgent(): string
{
return $this->userAgent;
@ -166,9 +148,11 @@ class Visit extends AbstractEntity implements \JsonSerializable
return [
'referer' => $this->referer,
'date' => isset($this->date) ? $this->date->format(\DateTime::ATOM) : null,
'remoteAddr' => $this->remoteAddr,
'userAgent' => $this->userAgent,
'visitLocation' => $this->visitLocation,
// Deprecated
'remoteAddr' => null,
];
}
}