mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 20:19:22 +03:00
Polyfill idn_to_*()
This commit is contained in:
parent
f726ac7061
commit
7d66adbe3c
6 changed files with 32 additions and 29 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
|
|
|
|||
13
snappymail/v/0.0.0/app/libraries/polyfill/intl.php
Normal file
13
snappymail/v/0.0.0/app/libraries/polyfill/intl.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
if (!\function_exists('idn_to_ascii')) {
|
||||
function idn_to_ascii(string $domain) {
|
||||
return \SnappyMail\Intl\Idn::toAscii($domain);
|
||||
}
|
||||
}
|
||||
|
||||
if (!\function_exists('idn_to_utf8')) {
|
||||
function idn_to_utf8(string $domain) {
|
||||
return \SnappyMail\Intl\Idn::toUtf8($domain);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* Internationalized domain names
|
||||
*/
|
||||
|
||||
namespace SnappyMail;
|
||||
|
||||
abstract class IDN
|
||||
{
|
||||
public static function toAscii(string $domain) : string
|
||||
{
|
||||
return \function_exists('idn_to_ascii')
|
||||
? \idn_to_ascii($domain)
|
||||
: Intl\Idn::toAscii($domain);
|
||||
}
|
||||
|
||||
public static function toUtf8(string $domain) : string
|
||||
{
|
||||
return \function_exists('idn_to_utf8')
|
||||
? \idn_to_utf8($domain)
|
||||
: Intl\Idn::toUtf8($domain);
|
||||
}
|
||||
|
||||
public static function anyToAscii(string $string) : string
|
||||
{
|
||||
if (\preg_match('#[:/]#', $string)) {
|
||||
|
|
@ -26,7 +15,7 @@ abstract class IDN
|
|||
if (\strpos($string, '@')) {
|
||||
return static::emailAddress($string, true);
|
||||
}
|
||||
return static::toAscii($string);
|
||||
return \idn_to_ascii($string);
|
||||
}
|
||||
|
||||
public static function anyToUtf8(string $string) : string
|
||||
|
|
@ -37,7 +26,7 @@ abstract class IDN
|
|||
if (\strpos($string, '@')) {
|
||||
return static::emailAddress($string, false);
|
||||
}
|
||||
return static::toUtf8($string);
|
||||
return \idn_to_utf8($string);
|
||||
}
|
||||
|
||||
public static function emailToAscii(string $address) : string
|
||||
|
|
@ -68,12 +57,12 @@ abstract class IDN
|
|||
$local = \implode('@', $local);
|
||||
$arr = \explode('.', $domain);
|
||||
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 $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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue