f7cloud_client/apps/mail/lib/Exception/CouldNotConnectException.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

81 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Mail\Exception;
use Horde_Imap_Client_Exception;
use Throwable;
class CouldNotConnectException extends ServiceException {
/** @var string */
private $service;
/** @var string */
private $host;
/** @var int */
private $port;
/** @var Throwable */
private $previous;
public function __construct(Throwable $previous, string $service, string $host, int $port) {
parent::__construct(
"Connection to {$service} at {$host}:{$port} failed. {$previous->getMessage()}",
$previous->getCode(),
$previous
);
$this->service = $service;
$this->host = $host;
$this->port = $port;
$this->previous = $previous;
}
/**
* @return string
*/
public function getService(): string {
return $this->service;
}
/**
* @return string
*/
public function getHost(): string {
return $this->host;
}
/**
* @return int
*/
public function getPort(): int {
return $this->port;
}
public function getReason(): string {
if (!($this->previous instanceof Horde_Imap_Client_Exception)) {
return 'OTHER';
}
switch ($this->previous->getCode()) {
case Horde_Imap_Client_Exception::LOGIN_AUTHENTICATIONFAILED:
return match ($this->previous->getMessage()) {
'Authentication failed.' => 'AUTHENTICATION_WRONG_PASSWORD',
'Mail server denied authentication.' => 'AUTHENTICATION_DENIED',
default => 'AUTHENTICATION',
};
case Horde_Imap_Client_Exception::SERVER_CONNECT:
case Horde_Imap_Client_Exception::SERVER_READERROR:
return 'CONNECTION_ERROR';
default:
return 'OTHER';
}
}
}