abstract class ResponseType to enum ResponseType

This commit is contained in:
the-djmaze 2024-02-26 20:26:56 +01:00
parent 45de60a7e1
commit d0dc8c305a
3 changed files with 19 additions and 18 deletions

View file

@ -16,10 +16,10 @@ namespace MailSo\Imap\Enumerations;
* @package Imap * @package Imap
* @subpackage Enumerations * @subpackage Enumerations
*/ */
abstract class ResponseType enum ResponseType
{ {
const UNKNOWN = 0; case UNKNOWN;
const TAGGED = 1; case TAGGED;
const UNTAGGED = 2; case UNTAGGED;
const CONTINUATION = 3; case CONTINUATION;
} }

View file

@ -12,6 +12,7 @@
namespace MailSo\Imap; namespace MailSo\Imap;
use MailSo\Net\Enumerations\ConnectionSecurityType; use MailSo\Net\Enumerations\ConnectionSecurityType;
use MailSo\Imap\Enumerations\ResponseType;
/** /**
* @category MailSo * @category MailSo
@ -159,7 +160,7 @@ class ImapClient extends \MailSo\Net\NetClient
if ('CRAM-MD5' === $type) if ('CRAM-MD5' === $type)
{ {
$oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type)); $oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type));
$sChallenge = $this->getResponseValue($oResponse, Enumerations\ResponseType::CONTINUATION); $sChallenge = $this->getResponseValue($oResponse, ResponseType::CONTINUATION);
$sAuth = $SASL->authenticate($sLogin, $sPassword, $sChallenge); $sAuth = $SASL->authenticate($sLogin, $sPassword, $sChallenge);
$this->logMask($sAuth); $this->logMask($sAuth);
$this->sendRaw($sAuth); $this->sendRaw($sAuth);
@ -177,11 +178,11 @@ class ImapClient extends \MailSo\Net\NetClient
} }
$oResponse = $this->getResponse(); $oResponse = $this->getResponse();
if ($SASL->hasChallenge()) { if ($SASL->hasChallenge()) {
$sChallenge = $SASL->challenge($this->getResponseValue($oResponse, Enumerations\ResponseType::CONTINUATION)); $sChallenge = $SASL->challenge($this->getResponseValue($oResponse, ResponseType::CONTINUATION));
$this->logMask($sChallenge); $this->logMask($sChallenge);
$this->sendRaw($sChallenge); $this->sendRaw($sChallenge);
$oResponse = $this->getResponse(); $oResponse = $this->getResponse();
$SASL->verify($this->getResponseValue($oResponse, Enumerations\ResponseType::CONTINUATION)); $SASL->verify($this->getResponseValue($oResponse, ResponseType::CONTINUATION));
$this->sendRaw(''); $this->sendRaw('');
$oResponse = $this->getResponse(); $oResponse = $this->getResponse();
} }
@ -192,7 +193,7 @@ class ImapClient extends \MailSo\Net\NetClient
$this->logMask($sAuth); $this->logMask($sAuth);
$oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type, $sAuth)); $oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type, $sAuth));
$oR = $oResponse->getLast(); $oR = $oResponse->getLast();
if ($oR && Enumerations\ResponseType::CONTINUATION === $oR->ResponseType) { if ($oR && ResponseType::CONTINUATION === $oR->ResponseType) {
if (!empty($oR->ResponseList[1]) && \preg_match('/^[a-zA-Z0-9=+\/]+$/', $oR->ResponseList[1])) { if (!empty($oR->ResponseList[1]) && \preg_match('/^[a-zA-Z0-9=+\/]+$/', $oR->ResponseList[1])) {
$this->logWrite(\base64_decode($oR->ResponseList[1]), \LOG_WARNING); $this->logWrite(\base64_decode($oR->ResponseList[1]), \LOG_WARNING);
} }
@ -203,7 +204,7 @@ class ImapClient extends \MailSo\Net\NetClient
else if ($this->hasCapability('LOGINDISABLED')) else if ($this->hasCapability('LOGINDISABLED'))
{ {
$oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type)); $oResponse = $this->SendRequestGetResponse('AUTHENTICATE', array($type));
$sB64 = $this->getResponseValue($oResponse, Enumerations\ResponseType::CONTINUATION); $sB64 = $this->getResponseValue($oResponse, ResponseType::CONTINUATION);
$this->sendRaw($SASL->authenticate($sLogin, $sPassword, $sB64), true); $this->sendRaw($SASL->authenticate($sLogin, $sPassword, $sB64), true);
$this->getResponse(); $this->getResponse();
$sPass = $SASL->challenge(''/*UGFzc3dvcmQ6*/); $sPass = $SASL->challenge(''/*UGFzc3dvcmQ6*/);
@ -374,7 +375,7 @@ class ImapClient extends \MailSo\Net\NetClient
try { try {
$oResponseCollection = $this->SendRequestGetResponse('NAMESPACE'); $oResponseCollection = $this->SendRequestGetResponse('NAMESPACE');
foreach ($oResponseCollection as $oResponse) { foreach ($oResponseCollection as $oResponse) {
if (Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType if (ResponseType::UNTAGGED === $oResponse->ResponseType
&& 'NAMESPACE' === $oResponse->StatusOrIndex) && 'NAMESPACE' === $oResponse->StatusOrIndex)
{ {
return new NamespaceResult($oResponse); return new NamespaceResult($oResponse);
@ -455,10 +456,10 @@ class ImapClient extends \MailSo\Net\NetClient
return $this->getResponse(); return $this->getResponse();
} }
protected function getResponseValue(ResponseCollection $oResponseCollection, int $type = 0) : string protected function getResponseValue(ResponseCollection $oResponseCollection, ResponseType $type) : string
{ {
$oResponse = $oResponseCollection->getLast(); $oResponse = $oResponseCollection->getLast();
if ($oResponse && (!$type || $type === $oResponse->ResponseType)) { if ($oResponse && ($type === ResponseType::UNKNOWN || $type === $oResponse->ResponseType)) {
$sResult = $oResponse->ResponseList[1] ?? null; $sResult = $oResponse->ResponseList[1] ?? null;
if ($sResult) { if ($sResult) {
return $sResult; return $sResult;
@ -512,7 +513,7 @@ class ImapClient extends \MailSo\Net\NetClient
$oResult->append($oResponse); $oResult->append($oResponse);
if ($oResponse->IsStatusResponse if ($oResponse->IsStatusResponse
&& Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType && ResponseType::UNTAGGED === $oResponse->ResponseType
&& Enumerations\ResponseStatus::PREAUTH === $oResponse->StatusOrIndex && Enumerations\ResponseStatus::PREAUTH === $oResponse->StatusOrIndex
// && (Enumerations\ResponseStatus::PREAUTH === $oResponse->StatusOrIndex || Enumerations\ResponseStatus::BYE === $oResponse->StatusOrIndex) // && (Enumerations\ResponseStatus::PREAUTH === $oResponse->StatusOrIndex || Enumerations\ResponseStatus::BYE === $oResponse->StatusOrIndex)
) { ) {
@ -525,7 +526,7 @@ class ImapClient extends \MailSo\Net\NetClient
// \SnappyMail\Log::warning('IMAP', "{$oResponse->OptionalResponse[0]}: {$this->lastCommand}"); // \SnappyMail\Log::warning('IMAP', "{$oResponse->OptionalResponse[0]}: {$this->lastCommand}");
} }
if ($sEndTag === $oResponse->Tag || Enumerations\ResponseType::CONTINUATION === $oResponse->ResponseType) { if ($sEndTag === $oResponse->Tag || ResponseType::CONTINUATION === $oResponse->ResponseType) {
if (isset($this->aTagTimeouts[$sEndTag])) { if (isset($this->aTagTimeouts[$sEndTag])) {
$this->writeLog((\microtime(true) - $this->aTagTimeouts[$sEndTag]).' ('.$sEndTag.')', \LOG_DEBUG); $this->writeLog((\microtime(true) - $this->aTagTimeouts[$sEndTag]).' ('.$sEndTag.')', \LOG_DEBUG);
@ -557,7 +558,7 @@ class ImapClient extends \MailSo\Net\NetClient
while (true) { while (true) {
$oResponse = $this->partialParseResponse(); $oResponse = $this->partialParseResponse();
if (Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType) { if (ResponseType::UNTAGGED === $oResponse->ResponseType) {
yield $oResponse; yield $oResponse;
} else { } else {
$oResult->append($oResponse); $oResult->append($oResponse);
@ -569,7 +570,7 @@ class ImapClient extends \MailSo\Net\NetClient
// \SnappyMail\Log::warning('IMAP', "{$oResponse->OptionalResponse[0]}: {$this->lastCommand}"); // \SnappyMail\Log::warning('IMAP', "{$oResponse->OptionalResponse[0]}: {$this->lastCommand}");
} }
if ($sEndTag === $oResponse->Tag || Enumerations\ResponseType::CONTINUATION === $oResponse->ResponseType) { if ($sEndTag === $oResponse->Tag || ResponseType::CONTINUATION === $oResponse->ResponseType) {
if (isset($this->aTagTimeouts[$sEndTag])) { if (isset($this->aTagTimeouts[$sEndTag])) {
$this->writeLog((\microtime(true) - $this->aTagTimeouts[$sEndTag]).' ('.$sEndTag.')', \LOG_DEBUG); $this->writeLog((\microtime(true) - $this->aTagTimeouts[$sEndTag]).' ('.$sEndTag.')', \LOG_DEBUG);

View file

@ -29,7 +29,7 @@ class Response
public bool $IsStatusResponse = false; public bool $IsStatusResponse = false;
public int $ResponseType = 0; public ResponseType $ResponseType = ResponseType::UNKNOWN;
public ?string $Tag = null; public ?string $Tag = null;