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 e5ca89a6b..f1c0ad52e 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 @@ -62,4 +62,19 @@ class ConnectSettings // $this->ssl['capath'] = (string) $oConfig->Get('ssl', 'capath', ''); } + public static function fromArray(array $aSettings) : self + { + $object = new self; + $object->host = $aSettings['Host']; + $object->port = $aSettings['Port']; + $object->type = $aSettings['Secure']; + $object->ssl['verify_peer'] = !!$aSettings['VerifySsl']; + $object->ssl['verify_peer_name'] = !!$aSettings['VerifySsl']; + $object->ssl['allow_self_signed'] = !!$aSettings['AllowSelfSigned']; + if (!empty($aSettings['ClientCert'])) { + $object->ssl['local_cert'] = $aSettings['ClientCert']; + } + return $object; + } + } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php index 4058025eb..dcf0a2bc8 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Response.php @@ -180,7 +180,6 @@ trait Response $sSubject = $mResult['subject']; $mResult['Hash'] = \md5($mResult['Folder'].$mResult['Uid']); $mResult['RequestHash'] = Utils::EncodeKeyValuesQ(array( - 'V' => APP_VERSION, 'Account' => $oAccount->Hash(), 'Folder' => $mResult['Folder'], 'Uid' => $mResult['Uid'], @@ -237,7 +236,6 @@ trait Response $mResult = $mResponse->jsonSerialize(); $mResult['IsThumbnail'] = $this->GetCapa(Capa::ATTACHMENT_THUMBNAILS) && $this->isFileHasThumbnail($mResult['FileName']); $mResult['Download'] = Utils::EncodeKeyValuesQ(array( - 'V' => APP_VERSION, 'Account' => $this->getAccountFromToken()->Hash(), 'Folder' => $mResult['Folder'], 'Uid' => $mResult['Uid'], diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php index 290f479e0..dab59f712 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php @@ -182,8 +182,7 @@ trait User if (!$bError) { $mResult = array( 'FileHash' => Utils::EncodeKeyValuesQ(array( - 'V' => APP_VERSION, - 'Account' => $oAccount ? \md5($oAccount->Hash()) : '', + 'Account' => $oAccount ? $oAccount->Hash() : '', 'FileName' => 'attachments.zip', 'MimeType' => 'application/zip', 'FileHash' => $sZipHash diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php b/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php index fa191f9a9..b5df87b4e 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php @@ -277,10 +277,7 @@ class ActionsAdmin extends Actions $oImapClient->SetTimeOuts($iConnectionTimeout); $iTime = \microtime(true); - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $oDomain->IncHost(); - $oSettings->port = $oDomain->IncPort(); - $oSettings->type = $oDomain->IncSecure(); + $oSettings = \MailSo\Net\ConnectSettings::fromArray($oDomain->ImapSettings()); $oImapClient->Connect($oSettings); $sUsername = $this->GetActionParam('username', ''); @@ -339,10 +336,7 @@ class ActionsAdmin extends Actions $oSmtpClient->SetTimeOuts($iConnectionTimeout); $iTime = \microtime(true); - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $oDomain->OutHost(); - $oSettings->port = $oDomain->OutPort(); - $oSettings->type = $oDomain->OutSecure(); + $oSettings = \MailSo\Net\ConnectSettings::fromArray($oDomain->SmtpSettings()); $oSmtpClient->Connect($oSettings, \MailSo\Smtp\SmtpClient::EhloHelper()); $oSmtpClient->Disconnect(); @@ -373,10 +367,7 @@ class ActionsAdmin extends Actions $oSieveClient->SetTimeOuts($iConnectionTimeout); $iTime = \microtime(true); - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $oDomain->SieveHost(); - $oSettings->port = $oDomain->SievePort(); - $oSettings->type = $oDomain->SieveSecure(); + $oSettings = \MailSo\Net\ConnectSettings::fromArray($oDomain->SieveSettings()); $oSieveClient->Connect($oSettings); $oSieveClient->Disconnect(); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php index 4257a4743..0adf20248 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php @@ -99,9 +99,9 @@ abstract class Account implements \JsonSerializable { return \sha1(\implode(APP_SALT, [ $this->sEmail, - $this->Domain()->IncHost(), - $this->Domain()->IncPort(), - $this->sPassword + APP_VERSION +// \json_encode($this->Domain()), +// $this->sPassword ])); } @@ -213,16 +213,7 @@ abstract class Account implements \JsonSerializable $oPlugins->RunHook('imap.before-connect', array($this, $oImapClient, &$aCredentials)); if ($aCredentials['UseConnect']) { - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $aCredentials['Host']; - $oSettings->port = $aCredentials['Port']; - $oSettings->type = $aCredentials['Secure']; - $oSettings->ssl['verify_peer'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['verify_peer_name'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['allow_self_signed'] = !!$aCredentials['AllowSelfSigned']; - if ($aCredentials['ClientCert']) { - $oSettings->ssl['local_cert'] = $aCredentials['ClientCert']; - } + $oSettings = \MailSo\Net\ConnectSettings::fromArray($aCredentials); $oImapClient->Connect($oSettings); } $oPlugins->RunHook('imap.after-connect', array($this, $oImapClient, $aCredentials)); @@ -248,13 +239,7 @@ abstract class Account implements \JsonSerializable $aCredentials['UseAuth'] = $aCredentials['UseAuth'] && !$aCredentials['UsePhpMail']; if ($aCredentials['UseConnect'] && !$aCredentials['UsePhpMail']) { - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $aCredentials['Host']; - $oSettings->port = $aCredentials['Port']; - $oSettings->type = $aCredentials['Secure']; - $oSettings->ssl['verify_peer'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['verify_peer_name'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['allow_self_signed'] = !!$aCredentials['AllowSelfSigned']; + $oSettings = \MailSo\Net\ConnectSettings::fromArray($aCredentials); $oSmtpClient->Connect($oSettings, $aCredentials['Ehlo']); } $oPlugins->RunHook('smtp.after-connect', array($this, $oSmtpClient, $aCredentials)); @@ -276,13 +261,7 @@ abstract class Account implements \JsonSerializable $oPlugins->RunHook('sieve.before-connect', array($this, $oSieveClient, &$aCredentials)); if ($aCredentials['UseConnect']) { - $oSettings = new \MailSo\Net\ConnectSettings; - $oSettings->host = $aCredentials['Host']; - $oSettings->port = $aCredentials['Port']; - $oSettings->type = $aCredentials['Secure']; - $oSettings->ssl['verify_peer'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['verify_peer_name'] = !!$aCredentials['VerifySsl']; - $oSettings->ssl['allow_self_signed'] = !!$aCredentials['AllowSelfSigned']; + $oSettings = \MailSo\Net\ConnectSettings::fromArray($aCredentials); $oSieveClient->Connect($oSettings); } $oPlugins->RunHook('sieve.after-connect', array($this, $oSieveClient, $aCredentials)); 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 cb801ff53..71e913467 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 @@ -6,8 +6,6 @@ use MailSo\Net\Enumerations\ConnectionSecurityType; class Domain implements \JsonSerializable { - const DEFAULT_FORWARDED_FLAG = '$Forwarded'; - /** * @var string */ @@ -106,7 +104,7 @@ class Domain implements \JsonSerializable /** * See ToIniString() for valid values */ - public static function NewInstanceFromDomainConfigArray(string $sName, array $aDomain) : ?self + public static function fromIniArray(string $sName, array $aDomain) : ?self { $oDomain = null; @@ -220,6 +218,9 @@ class Domain implements \JsonSerializable return $sType; } + /** + * deprecated + */ public function SetConfig( string $sIncHost, int $iIncPort, int $iIncSecure, bool $bIncShortLogin, bool $bUseSieve, string $sSieveHost, int $iSievePort, int $iSieveSecure, @@ -265,11 +266,6 @@ class Domain implements \JsonSerializable return $this->iIncPort; } - public function IncSecure() : int - { - return $this->iIncSecure; - } - public function IncShortLogin() : bool { return $this->bIncShortLogin; @@ -280,21 +276,6 @@ class Domain implements \JsonSerializable return $this->bUseSieve; } - public function SieveHost() : string - { - return $this->sSieveHost; - } - - public function SievePort() : int - { - return $this->iSievePort; - } - - public function SieveSecure() : int - { - return $this->iSieveSecure; - } - public function OutHost() : string { return $this->sOutHost; @@ -305,21 +286,11 @@ class Domain implements \JsonSerializable return $this->iOutPort; } - public function OutSecure() : int - { - return $this->iOutSecure; - } - public function OutShortLogin() : bool { return $this->bOutShortLogin; } - public function OutAuth() : bool - { - return $this->bOutAuth; - } - public function OutSetSender() : bool { return $this->bOutSetSender; @@ -330,21 +301,9 @@ class Domain implements \JsonSerializable return $this->bOutUsePhpMail; } - public function WhiteList() : string - { - return $this->sWhiteList; - } - - public function AliasName() : string - { - return $this->sAliasName; - } - - public function SetAliasName(string $sAliasName) : self + public function SetAliasName(string $sAliasName) : void { $this->sAliasName = $sAliasName; - - return $this; } public function ValidateWhiteList(string $sEmail, string $sLogin = '') : bool @@ -400,10 +359,42 @@ class Domain implements \JsonSerializable ); } + /** + * See jsonSerialize() for valid values + */ + public static function fromArray(string $sName, array $aDomain) : ?self + { + $oDomain = null; + if (\strlen($sName) && \strlen($aDomain['imapHost'])) { + $oDomain = new self($sName); + + $oDomain->sIncHost = \MailSo\Base\Utils::IdnToAscii($aDomain['imapHost']); + $oDomain->iIncPort = (int) $aDomain['imapPort']; + $oDomain->iIncSecure = (int) $aDomain['imapSecure']; + $oDomain->bIncShortLogin = !empty($aDomain['imapShortLogin']); + + $oDomain->bUseSieve = !empty($aDomain['useSieve']); + $oDomain->sSieveHost = \MailSo\Base\Utils::IdnToAscii($aDomain['sieveHost']); + $oDomain->iSievePort = (int) $aDomain['sievePort']; + $oDomain->iSieveSecure = (int) $aDomain['sieveSecure']; + + $oDomain->sOutHost = \MailSo\Base\Utils::IdnToAscii($aDomain['smtpHost']); + $oDomain->iOutPort = (int) $aDomain['smtpPort']; + $oDomain->iOutSecure = (int) $aDomain['smtpSecure']; + $oDomain->bOutShortLogin = !empty($aDomain['smtpShortLogin']); + $oDomain->bOutAuth = !empty($aDomain['smtpAuth']); + $oDomain->bOutSetSender = !empty($aDomain['smtpSetSender']); + $oDomain->bOutUsePhpMail = !empty($aDomain['smtpPhpMail']); + + $oDomain->sWhiteList = (string) $aDomain['whiteList']; + } + return $oDomain; + } + #[\ReturnTypeWillChange] public function jsonSerialize() { - return array( + $aResult = array( // '@Object' => 'Object/Domain', 'name' => \MailSo\Base\Utils::IdnToUtf8($this->sName), 'imapHost' => \MailSo\Base\Utils::IdnToUtf8($this->sIncHost), @@ -421,8 +412,11 @@ class Domain implements \JsonSerializable 'smtpAuth' => $this->bOutAuth, 'smtpSetSender' => $this->bOutSetSender, 'smtpPhpMail' => $this->bOutUsePhpMail, - 'whiteList' => $this->sWhiteList, - 'aliasName' => $this->sAliasName + 'whiteList' => $this->sWhiteList ); + if ($this->sAliasName) { + $aResult['aliasName'] = $this->sAliasName; + } + return $aResult; } } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain.php index ce647b2a5..5fcbf11ca 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain.php @@ -14,8 +14,7 @@ class Domain extends AbstractProvider */ private $oPlugins; - public function __construct(Domain\DomainInterface $oDriver, - \RainLoop\Plugins\Manager $oPlugins) + public function __construct(Domain\DomainInterface $oDriver, \RainLoop\Plugins\Manager $oPlugins) { $this->oDriver = $oDriver; $this->oPlugins = $oPlugins; @@ -24,11 +23,7 @@ class Domain extends AbstractProvider public function Load(string $sName, bool $bFindWithWildCard = false, bool $bCheckDisabled = true, bool $bCheckAliases = true) : ?\RainLoop\Model\Domain { $oDomain = $this->oDriver->Load($sName, $bFindWithWildCard, $bCheckDisabled, $bCheckAliases); - if ($oDomain instanceof \RainLoop\Model\Domain) - { - $this->oPlugins->RunHook('filter.domain', array(&$oDomain)); - } - + $oDomain && $this->oPlugins->RunHook('filter.domain', array($oDomain)); return $oDomain; } @@ -39,11 +34,9 @@ class Domain extends AbstractProvider public function SaveAlias(string $sName, string $sAlias) : bool { - if ($this->Load($sName, false, false)) - { + if ($this->Load($sName, false, false)) { throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::DomainAlreadyExists); } - return $this->oDriver->SaveAlias($sName, $sAlias); } @@ -64,60 +57,34 @@ class Domain extends AbstractProvider public function LoadOrCreateNewFromAction(\RainLoop\Actions $oActions, string $sNameForTest = null) : ?\RainLoop\Model\Domain { - $oDomain = null; - $sName = (string) $oActions->GetActionParam('Name', ''); - - if (\strlen($sName) && $sNameForTest && !\str_contains($sName, '*')) - { + if (\strlen($sName) && $sNameForTest && !\str_contains($sName, '*')) { $sNameForTest = null; } - - if (\strlen($sName) || $sNameForTest) - { - $bCreate = !empty($oActions->GetActionParam('Create', 0)); - $sIncHost = (string) $oActions->GetActionParam('IncHost', ''); - $iIncPort = (int) $oActions->GetActionParam('IncPort', 143); - $iIncSecure = (int) $oActions->GetActionParam('IncSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE); - $bIncShortLogin = !empty($oActions->GetActionParam('IncShortLogin', 0)); - $bUseSieve = !empty($oActions->GetActionParam('UseSieve', 0)); - $sSieveHost = (string) $oActions->GetActionParam('SieveHost', ''); - $iSievePort = (int) $oActions->GetActionParam('SievePort', 4190); - $iSieveSecure = (int) $oActions->GetActionParam('SieveSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE); - $sOutHost = (string) $oActions->GetActionParam('OutHost', ''); - $iOutPort = (int) $oActions->GetActionParam('OutPort', 25); - $iOutSecure = (int) $oActions->GetActionParam('OutSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE); - $bOutShortLogin = !empty($oActions->GetActionParam('OutShortLogin', 0)); - $bOutAuth = !empty($oActions->GetActionParam('OutAuth', 1)); - $bOutSetSender = !empty($oActions->GetActionParam('OutSetSender', 0)); - $bOutUsePhpMail = !empty($oActions->GetActionParam('OutUsePhpMail', 0)); - $sWhiteList = (string) $oActions->GetActionParam('WhiteList', ''); - - $oDomain = $sNameForTest ? null : $this->Load($sName); - if ($oDomain instanceof \RainLoop\Model\Domain) - { - if ($bCreate) - { - throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::DomainAlreadyExists); - } + if (\strlen($sName) || $sNameForTest) { + if (!$sNameForTest && !empty($oActions->GetActionParam('Create', 0)) && $this->Load($sName)) { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::DomainAlreadyExists); } - else - { - $oDomain = new \RainLoop\Model\Domain($sNameForTest ?: $sName); - } - - $sIncHost = \MailSo\Base\Utils::IdnToAscii($sIncHost); - $sSieveHost = \MailSo\Base\Utils::IdnToAscii($sSieveHost); - $sOutHost = \MailSo\Base\Utils::IdnToAscii($sOutHost); - - $oDomain->SetConfig( - $sIncHost, $iIncPort, $iIncSecure, $bIncShortLogin, - $bUseSieve, $sSieveHost, $iSievePort, $iSieveSecure, - $sOutHost, $iOutPort, $iOutSecure, $bOutShortLogin, $bOutAuth, $bOutSetSender, $bOutUsePhpMail, - $sWhiteList); + return \RainLoop\Model\Domain::fromArray($sNameForTest ?: $sName, [ + 'imapHost' => $oActions->GetActionParam('IncHost', ''), + 'imapPort' => $oActions->GetActionParam('IncPort', 143), + 'imapSecure' => $oActions->GetActionParam('IncSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE), + 'imapShortLogin' => $oActions->GetActionParam('IncShortLogin', 0), + 'useSieve' => $oActions->GetActionParam('UseSieve', 0), + 'sieveHost' => $oActions->GetActionParam('SieveHost', ''), + 'sievePort' => $oActions->GetActionParam('SievePort', 4190), + 'sieveSecure' => $oActions->GetActionParam('SieveSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE), + 'smtpHost' => $oActions->GetActionParam('OutHost', ''), + 'smtpPort' => $oActions->GetActionParam('OutPort', 25), + 'smtpSecure' => $oActions->GetActionParam('OutSecure', \MailSo\Net\Enumerations\ConnectionSecurityType::NONE), + 'smtpShortLogin' => $oActions->GetActionParam('OutShortLogin', 0), + 'smtpAuth' => $oActions->GetActionParam('OutAuth', 1), + 'smtpSetSender' => $oActions->GetActionParam('OutSetSender', 0), + 'smtpPhpMail' => $oActions->GetActionParam('OutUsePhpMail', 0), + 'whiteList' => $oActions->GetActionParam('WhiteList', '') + ]); } - - return $oDomain; + return null; } public function IsActive() : bool diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php index c4881658c..b01d34b2c 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php @@ -42,36 +42,38 @@ class DefaultDomain implements DomainInterface private function getWildcardDomainsLine() : string { - if ($this->oCacher) - { + if ($this->oCacher) { $sResult = $this->oCacher->Get(static::wildcardDomainsCacheKey()); - if (\strlen($sResult)) - { + if (\strlen($sResult)) { return $sResult; } } - $sResult = ''; $aNames = array(); +// $aList = \glob($this->sDomainPath.'/*.{ini,json}', GLOB_BRACE); + $aList = \glob($this->sDomainPath.'/*.json'); + foreach ($aList as $sFile) { + $sName = \substr(\basename($sFile), 0, -5); + if ('default' === $sName || false !== \strpos($sName, '_wildcard_')) { + $aNames[] = static::codeFileName($sName, true); + } + } $aList = \glob($this->sDomainPath.'/*.ini'); - foreach ($aList as $sFile) - { + foreach ($aList as $sFile) { $sName = \substr(\basename($sFile), 0, -4); - if ('default' === $sName || false !== \strpos($sName, '_wildcard_')) - { + if ('default' === $sName || false !== \strpos($sName, '_wildcard_')) { $aNames[] = static::codeFileName($sName, true); } } - if (\count($aNames)) - { + $sResult = ''; + if ($aNames) { \rsort($aNames, SORT_STRING); - $sResult = \implode(' ', $aNames); + $sResult = \implode(' ', \array_unique($aNames)); } - if ($this->oCacher) - { + if ($this->oCacher) { $this->oCacher->Set(static::wildcardDomainsCacheKey(), $sResult); } @@ -80,62 +82,48 @@ class DefaultDomain implements DomainInterface public function Load(string $sName, bool $bFindWithWildCard = false, bool $bCheckDisabled = true, bool $bCheckAliases = true) : ?\RainLoop\Model\Domain { - $mResult = null; - - $aDisabled = []; - $sFoundValue = ''; + if ($bCheckDisabled) { + $aDisabled = []; + if (\file_exists($this->sDomainPath.'/disabled')) { + $aDisabled = \explode(',', \file_get_contents($this->sDomainPath.'/disabled')); + if ($aDisabled && \in_array(\MailSo\Base\Utils::IdnToAscii($sName, true), $aDisabled)) { + return null; + } + } + } $sRealFileName = static::codeFileName($sName); - if (\file_exists($this->sDomainPath.'/disabled')) { - $aDisabled = \explode(',', \file_get_contents($this->sDomainPath.'/disabled')); + if (\file_exists($this->sDomainPath.'/'.$sRealFileName.'.json')) { + $aDomain = \json_decode(\file_get_contents($this->sDomainPath.'/'.$sRealFileName.'.json'), true) ?: array(); + return \RainLoop\Model\Domain::fromArray($sName, $aDomain); } - $bCheckDisabled = $bCheckDisabled && 0 < \count($aDisabled); - - if (\file_exists($this->sDomainPath.'/'.$sRealFileName.'.ini') && - (!$bCheckDisabled || !\in_array(\MailSo\Base\Utils::IdnToAscii($sName, true), $aDisabled))) - { + if (\file_exists($this->sDomainPath.'/'.$sRealFileName.'.ini')) { $aDomain = \parse_ini_file($this->sDomainPath.'/'.$sRealFileName.'.ini') ?: array(); -// if ($bCheckAliases && !empty($aDomain['alias'])) -// { -// $oDomain = $this->Load($aDomain['alias'], false, false, false); -// if ($oDomain && $oDomain instanceof \RainLoop\Model\Domain) -// { -// $oDomain->SetAliasName($sName); -// } -// -// return $oDomain; -// } - $mResult = \RainLoop\Model\Domain::NewInstanceFromDomainConfigArray($sName, $aDomain); + return \RainLoop\Model\Domain::fromIniArray($sName, $aDomain); } - else if ($bCheckAliases && \file_exists($this->sDomainPath.'/'.$sRealFileName.'.alias') && - (!$bCheckDisabled || !\in_array(\MailSo\Base\Utils::IdnToAscii($sName, true), $aDisabled))) - { - $sAlias = \trim(\file_get_contents($this->sDomainPath.'/'.$sRealFileName.'.alias')); - if (!empty($sAlias)) - { - $oDomain = $this->Load($sAlias, false, false, false); - if ($oDomain && $oDomain instanceof \RainLoop\Model\Domain) - { - $oDomain->SetAliasName($sName); - } + if ($bCheckAliases && \file_exists($this->sDomainPath.'/'.$sRealFileName.'.alias')) { + $sAlias = \trim(\file_get_contents($this->sDomainPath.'/'.$sRealFileName.'.alias')); + if (!empty($sAlias)) { + $oDomain = $this->Load($sAlias, false, false, false); + $oDomain && $oDomain->SetAliasName($sName); return $oDomain; } } - else if ($bFindWithWildCard) - { + + if ($bFindWithWildCard) { $sNames = $this->getWildcardDomainsLine(); + $sFoundValue = ''; if (\strlen($sNames) && \RainLoop\Plugins\Helper::ValidateWildcardValues(\MailSo\Base\Utils::IdnToUtf8($sName, true), $sNames, $sFoundValue) && \strlen($sFoundValue) - && (!$bCheckDisabled || !\in_array($sFoundValue, $aDisabled)) ) { - $mResult = $this->Load($sFoundValue, false); + return $this->Load($sFoundValue, false); } } - return $mResult; + return null; } public function Save(\RainLoop\Model\Domain $oDomain) : bool @@ -147,7 +135,8 @@ class DefaultDomain implements DomainInterface $this->oCacher->Delete(static::wildcardDomainsCacheKey()); } - \RainLoop\Utils::saveFile($this->sDomainPath.'/'.$sRealFileName.'.ini', $oDomain->ToIniString()); +// \RainLoop\Utils::saveFile($this->sDomainPath.'/'.$sRealFileName.'.ini', $oDomain->ToIniString()); + \RainLoop\Utils::saveFile($this->sDomainPath.'/'.$sRealFileName.'.json', \json_encode($oDomain, \JSON_PRETTY_PRINT)); return true; } @@ -204,6 +193,10 @@ class DefaultDomain implements DomainInterface if (\strlen($sName)) { + if (\file_exists($this->sDomainPath.'/'.$sRealFileName.'.json')) + { + $bResult = \unlink($this->sDomainPath.'/'.$sRealFileName.'.json'); + } if (\file_exists($this->sDomainPath.'/'.$sRealFileName.'.ini')) { $bResult = \unlink($this->sDomainPath.'/'.$sRealFileName.'.ini'); @@ -245,12 +238,12 @@ class DefaultDomain implements DomainInterface $aWildCards = array(); $aAliases = array(); -// $aList = \glob($this->sDomainPath.'/*.{ini,alias}', GLOB_BRACE); +// $aList = \glob($this->sDomainPath.'/*.{ini,json,alias}', GLOB_BRACE); $aList = \array_diff(\scandir($this->sDomainPath), array('.', '..')); foreach ($aList as $sFile) { $bAlias = '.alias' === \substr($sFile, -6); - if ($bAlias || '.ini' === \substr($sFile, -4)) { - $sName = static::codeFileName(\preg_replace('/\.(ini|alias)$/', '', $sFile), true); + if ($bAlias || '.json' === \substr($sFile, -5) || '.ini' === \substr($sFile, -4)) { + $sName = static::codeFileName(\preg_replace('/\.(ini|json|alias)$/', '', $sFile), true); if ($bAlias) { if ($bIncludeAliases) { $aAliases[$sName] = array(