addPartHook('RemoteAutoLogin', 'ServiceRemoteAutoLogin'); $this->addHook('filter.app-data', 'FilterAppData'); $this->addHook('login.credentials', 'FilterLoginCredentials'); } public function FilterAppData($bAdmin, &$aResult) { if (!$bAdmin && \is_array($aResult) && empty($aResult['Auth']) && isset($_ENV['REMOTE_USER'])) { $aResult['DevEmail'] = $_ENV['REMOTE_USER']; // $aResult['DevPassword'] = $_ENV['REMOTE_PASSWORD']; } } private static bool $login = false; public function ServiceRemoteAutoLogin() : bool { $oActions = \RainLoop\Api::Actions(); $oException = null; $oAccount = null; $sEmail = $_ENV['REMOTE_USER'] ?? ''; $sPassword = $_ENV['REMOTE_PASSWORD'] ?? ''; if (\strlen($sEmail) && \strlen($sPassword)) { try { static::$login = true; $sPassword = new \SnappyMail\SensitiveString($sPassword); $oAccount = $oActions->LoginProcess($sEmail, $sPassword); } catch (\Throwable $oException) { $oLogger = $oActions->Logger(); $oLogger && $oLogger->WriteException($oException); } } \MailSo\Base\Http::Location('./'); return true; } public function FilterLoginCredentials(string &$sEmail, string &$sImapUser, string &$sPassword, string &$sSmtpUser) { // cPanel https://github.com/the-djmaze/snappymail/issues/697 // && !empty($_ENV['CPANEL']) if (static::$login/* && $sImapUser == $_ENV['REMOTE_USER']*/) { if (empty($_ENV['REMOTE_TEMP_USER'])) { $iPos = \strpos($sPassword, '[::cpses::]'); if ($iPos) { $_ENV['REMOTE_TEMP_USER'] = \substr($sPassword, 0, $iPos); } } if (!empty($_ENV['REMOTE_TEMP_USER'])) { $sImapUser = $_ENV['REMOTE_USER'] . '/' . $_ENV['REMOTE_TEMP_USER']; $sSmtpUser = $_ENV['REMOTE_USER'] . '/' . $_ENV['REMOTE_TEMP_USER']; } } } }