From 7d66adbe3c573114d9e9b9837a1f90d149d3c598 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Mon, 11 Mar 2024 12:32:59 +0100 Subject: [PATCH] Polyfill idn_to_*() --- .../libraries/MailSo/Net/ConnectSettings.php | 2 +- .../app/libraries/RainLoop/Model/Domain.php | 9 ++---- .../v/0.0.0/app/libraries/polyfill/intl.php | 13 ++++++++ .../v/0.0.0/app/libraries/snappymail/idn.php | 31 ++++++------------- snappymail/v/0.0.0/include.php | 4 +++ snappymail/v/0.0.0/setup.php | 2 +- 6 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 snappymail/v/0.0.0/app/libraries/polyfill/intl.php diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php b/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php index f706b99e3..09dfc83e3 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php @@ -74,7 +74,7 @@ class ConnectSettings implements \JsonSerializable public static function Host() : string { - return \SnappyMail\IDN::toAscii($this->host); + return \idn_to_ascii($this->host); } public static function fromArray(array $aSettings) : self diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Domain.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Domain.php index 49c451d87..21c1107ac 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Domain.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Domain.php @@ -4,9 +4,6 @@ namespace RainLoop\Model; use MailSo\Net\Enumerations\ConnectionSecurityType; -// \SnappyMail\IDN::toAscii( -// \SnappyMail\IDN::toUtf8( - class Domain implements \JsonSerializable { private string $Name; @@ -187,17 +184,17 @@ class Domain implements \JsonSerializable if (\strlen($sName) && \strlen($aDomain['imap_host'])) { $oDomain = new self($sName); - $oDomain->IMAP->host = \SnappyMail\IDN::toUtf8($aDomain['imap_host']); + $oDomain->IMAP->host = \idn_to_utf8($aDomain['imap_host']); $oDomain->IMAP->port = (int) $aDomain['imap_port']; $oDomain->IMAP->type = self::StrConnectionSecurityTypeToCons($aDomain['imap_secure'] ?? ''); $oDomain->IMAP->shortLogin = !empty($aDomain['imap_short_login']); $oDomain->Sieve->enabled = !empty($aDomain['sieve_use']); - $oDomain->Sieve->host = \SnappyMail\IDN::toUtf8($aDomain['sieve_host']); + $oDomain->Sieve->host = \idn_to_utf8($aDomain['sieve_host']); $oDomain->Sieve->port = (int) ($aDomain['sieve_port'] ?? 4190);; $oDomain->Sieve->type = self::StrConnectionSecurityTypeToCons($aDomain['sieve_secure'] ?? ''); - $oDomain->SMTP->host = \SnappyMail\IDN::toUtf8($aDomain['smtp_host']); + $oDomain->SMTP->host = \idn_to_utf8($aDomain['smtp_host']); $oDomain->SMTP->port = (int) ($aDomain['smtp_port'] ?? 25); $oDomain->SMTP->type = self::StrConnectionSecurityTypeToCons($aDomain['smtp_secure'] ?? ''); $oDomain->SMTP->shortLogin = !empty($aDomain['smtp_short_login']); diff --git a/snappymail/v/0.0.0/app/libraries/polyfill/intl.php b/snappymail/v/0.0.0/app/libraries/polyfill/intl.php new file mode 100644 index 000000000..d23d1edea --- /dev/null +++ b/snappymail/v/0.0.0/app/libraries/polyfill/intl.php @@ -0,0 +1,13 @@ + $v) { - $conv = $toAscii ? static::toAscii($v) : static::toUtf8($v); + $conv = $toAscii ? \idn_to_ascii($v) : \idn_to_utf8($v); if ($conv) $arr[$k] = $conv; } return $local . '@' . \implode('.', $arr); } - return $toAscii ? static::toAscii($address) : static::toUtf8($address); + return $toAscii ? \idn_to_ascii($address) : \idn_to_utf8($address); } private static function uri(string $address, bool $toAscii) : string @@ -83,7 +72,7 @@ abstract class IDN if (isset($parsed['host'])) { $arr = \explode('.', $parsed['host']); foreach ($arr as $k => $v) { - $conv = $toAscii ? static::toAscii($v) : static::toUtf8($v); + $conv = $toAscii ? \idn_to_ascii($v) : \idn_to_utf8($v); if ($conv) $arr[$k] = $conv; } $parsed['host'] = \implode('.', $arr); @@ -110,12 +99,12 @@ abstract class IDN // parse_url seems to have failed, try without it $arr = \explode('.', $address); foreach ($arr as $k => $v) { - $conv = $toAscii ? static::toAscii($v) : static::toUtf8($v); + $conv = $toAscii ? \idn_to_ascii($v) : \idn_to_utf8($v); if ($conv) $arr[$k] = $conv; } return \implode('.', $arr); } - return $toAscii ? static::toAscii($address) : static::toUtf8($address); + return $toAscii ? \idn_to_ascii($address) : \idn_to_utf8($address); } } diff --git a/snappymail/v/0.0.0/include.php b/snappymail/v/0.0.0/include.php index eb32c8bcc..36fd600e1 100644 --- a/snappymail/v/0.0.0/include.php +++ b/snappymail/v/0.0.0/include.php @@ -12,6 +12,10 @@ if (!extension_loaded('ctype')) { require __DIR__ . '/app/libraries/polyfill/ctype.php'; } +if (!extension_loaded('intl')) { + require __DIR__ . '/app/libraries/polyfill/intl.php'; +} + if (!defined('APP_VERSION')) { define('APP_VERSION', basename(__DIR__)); } diff --git a/snappymail/v/0.0.0/setup.php b/snappymail/v/0.0.0/setup.php index b073eaeac..5dfa799fd 100644 --- a/snappymail/v/0.0.0/setup.php +++ b/snappymail/v/0.0.0/setup.php @@ -107,7 +107,7 @@ if (defined('APP_VERSION')) { } } - $sName = \SnappyMail\IDN::toAscii(mb_strtolower(gethostname())); + $sName = idn_to_ascii(mb_strtolower(gethostname())); $sFile = APP_PRIVATE_DATA.'domains/'.$sName.'.json'; if (!file_exists($sFile) && !file_exists(APP_PRIVATE_DATA.'domains/'.$sName.'.ini')) { $config = json_decode(file_get_contents(__DIR__ . '/app/domains/default.json'), true);