1
0
mirror of https://github.com/delight-im/PHP-Auth.git synced 2025-08-05 15:47:25 +02:00

Create function 'EmailAddress::mask'

This commit is contained in:
Marco
2024-08-16 06:44:17 +02:00
parent e5bc48eaa6
commit a25b57cd7b

59
src/EmailAddress.php Normal file
View File

@@ -0,0 +1,59 @@
<?php
/*
* PHP-Auth (https://github.com/delight-im/PHP-Auth)
* Copyright (c) delight.im (https://www.delight.im/)
* Licensed under the MIT License (https://opensource.org/licenses/MIT)
*/
namespace Delight\Auth;
final class EmailAddress {
/**
* Returns a masked version of the given email address that can be used for privacy reasons and data safety reasons
*
* @param string $emailAddress
* @return string
*/
public static function mask($emailAddress) {
if (empty($emailAddress)) {
return $emailAddress;
}
// split the email address into local part and domain part and then split the domain part into individual segments
$emailAddress = \trim((string) $emailAddress);
$partsSeparatedByAtSymbol = \explode('@', $emailAddress);
$domainPart = \array_pop($partsSeparatedByAtSymbol);
$localPart = \implode('@', $partsSeparatedByAtSymbol);
$localPart = \str_replace('"', '', $localPart);
$localPart = \str_replace("'", "", $localPart);
$parts = \explode('.', $domainPart);
\array_unshift($parts, $localPart);
// mask the individual parts of the address one by one
for ($i = 0; $i < \count($parts); $i++) {
$parts[$i] = \trim($parts[$i]);
if (\mb_strlen($parts[$i]) >= 5) {
$parts[$i] = \mb_substr($parts[$i], 0, 1) . '***' . \mb_substr($parts[$i], -1);
}
elseif (\mb_strlen($parts[$i]) === 4) {
$parts[$i] = \mb_substr($parts[$i], 0, 1) . '**' . \mb_substr($parts[$i], -1);
}
elseif (\mb_strlen($parts[$i]) === 3 && $i <= 1) {
$parts[$i] = \mb_substr($parts[$i], 0, 1) . '*' . \mb_substr($parts[$i], -1);
}
elseif (\mb_strlen($parts[$i]) === 2 && $i <= 1) {
$parts[$i] = \mb_substr($parts[$i], 0, 1) . '*';
}
elseif (\mb_strlen($parts[$i]) === 1 && $i <= 1) {
$parts[$i] = '*';
}
}
// join the individual parts back together
return \array_shift($parts) . '@' . \implode('.', $parts);
}
}