mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-07 00:17:03 +03:00
Add more logging to find solution for #719
This commit is contained in:
parent
0d6499702d
commit
85556d9c4c
3 changed files with 37 additions and 42 deletions
|
|
@ -334,11 +334,9 @@ trait UserAuth
|
||||||
|
|
||||||
private function SetSignMeToken(MainAccount $oAccount): void
|
private function SetSignMeToken(MainAccount $oAccount): void
|
||||||
{
|
{
|
||||||
$this->ClearSignMeData();
|
// $this->ClearSignMeData();
|
||||||
|
|
||||||
$uuid = \SnappyMail\UUID::generate();
|
$uuid = \SnappyMail\UUID::generate();
|
||||||
$data = \SnappyMail\Crypt::Encrypt($oAccount);
|
$data = \SnappyMail\Crypt::Encrypt($oAccount);
|
||||||
|
|
||||||
Utils::SetCookie(
|
Utils::SetCookie(
|
||||||
self::AUTH_SIGN_ME_TOKEN_KEY,
|
self::AUTH_SIGN_ME_TOKEN_KEY,
|
||||||
\SnappyMail\Crypt::EncryptUrlSafe([
|
\SnappyMail\Crypt::EncryptUrlSafe([
|
||||||
|
|
@ -348,13 +346,7 @@ trait UserAuth
|
||||||
]),
|
]),
|
||||||
\time() + 3600 * 24 * 30 // 30 days
|
\time() + 3600 * 24 * 30 // 30 days
|
||||||
);
|
);
|
||||||
|
$this->StorageProvider()->Put($oAccount, StorageType::SIGN_ME, $uuid, $data[2]);
|
||||||
$this->StorageProvider()->Put(
|
|
||||||
$oAccount,
|
|
||||||
StorageType::SIGN_ME,
|
|
||||||
$uuid,
|
|
||||||
$data[2]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function GetAccountFromSignMeToken(): ?MainAccount
|
public function GetAccountFromSignMeToken(): ?MainAccount
|
||||||
|
|
@ -368,36 +360,32 @@ trait UserAuth
|
||||||
StorageType::SIGN_ME,
|
StorageType::SIGN_ME,
|
||||||
$aTokenData['u']
|
$aTokenData['u']
|
||||||
);
|
);
|
||||||
if ($sAuthToken) {
|
if (!$sAuthToken) {
|
||||||
$aAccountHash = \SnappyMail\Crypt::Decrypt([
|
throw new \RuntimeException("server token not found for {$aTokenData['e']}/.sign_me/{$aTokenData['u']}");
|
||||||
\array_key_last($aTokenData),
|
|
||||||
\base64_decode(\end($aTokenData)),
|
|
||||||
$sAuthToken
|
|
||||||
]);
|
|
||||||
if (\is_array($aAccountHash)) {
|
|
||||||
$oAccount = MainAccount::NewInstanceFromTokenArray($this, $aAccountHash);
|
|
||||||
if ($oAccount) {
|
|
||||||
$this->CheckMailConnection($oAccount);
|
|
||||||
// Update lifetime
|
|
||||||
$this->SetSignMeToken($oAccount);
|
|
||||||
return $oAccount;
|
|
||||||
}
|
|
||||||
\SnappyMail\Log::notice(self::AUTH_SIGN_ME_TOKEN_KEY, 'has no account');
|
|
||||||
} else {
|
|
||||||
\SnappyMail\Log::notice(self::AUTH_SIGN_ME_TOKEN_KEY, 'decrypt failed');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
\SnappyMail\Log::notice(self::AUTH_SIGN_ME_TOKEN_KEY, "server token not found for {$aTokenData['e']}/.sign_me/{$aTokenData['u']}");
|
|
||||||
}
|
}
|
||||||
|
$aAccountHash = \SnappyMail\Crypt::Decrypt([
|
||||||
|
\array_key_last($aTokenData),
|
||||||
|
\base64_decode(\end($aTokenData)),
|
||||||
|
$sAuthToken
|
||||||
|
]);
|
||||||
|
if (!\is_array($aAccountHash)) {
|
||||||
|
throw new \RuntimeException('token decrypt failed');
|
||||||
|
}
|
||||||
|
$oAccount = MainAccount::NewInstanceFromTokenArray($this, $aAccountHash);
|
||||||
|
if (!$oAccount) {
|
||||||
|
throw new \RuntimeException('token has no account');
|
||||||
|
}
|
||||||
|
$this->CheckMailConnection($oAccount);
|
||||||
|
// Update lifetime
|
||||||
|
$this->SetSignMeToken($oAccount);
|
||||||
|
return $oAccount;
|
||||||
}
|
}
|
||||||
catch (\Throwable $oException)
|
catch (\Throwable $oException)
|
||||||
{
|
{
|
||||||
\SnappyMail\Log::notice(self::AUTH_SIGN_ME_TOKEN_KEY, $oException->getMessage());
|
\SnappyMail\Log::warning(self::AUTH_SIGN_ME_TOKEN_KEY, $oException->getMessage());
|
||||||
}
|
}
|
||||||
|
$this->ClearSignMeData();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->ClearSignMeData();
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -195,12 +195,17 @@ class Utils
|
||||||
*/
|
*/
|
||||||
// Set the new 4K split cookie
|
// Set the new 4K split cookie
|
||||||
foreach (\str_split($sValue, $iMaxSize) as $i => $sPart) {
|
foreach (\str_split($sValue, $iMaxSize) as $i => $sPart) {
|
||||||
|
\SnappyMail\Log::debug('COOKIE', "set {$sName}~{$i}");
|
||||||
static::_SetCookie($i ? "{$sName}~{$i}" : $sName, $sPart, $iExpire);
|
static::_SetCookie($i ? "{$sName}~{$i}" : $sName, $sPart, $iExpire);
|
||||||
}
|
}
|
||||||
// Delete unused old 4K split cookie parts
|
// Delete unused old 4K split cookie parts
|
||||||
while (($sCookieName = "{$sName}~" . ++$i) && isset($_COOKIE[$sCookieName])) {
|
foreach (\array_keys($_COOKIE) as $sCookieName) {
|
||||||
unset($_COOKIE[$sCookieName]);
|
$aSplit = \explode('~', $sCookieName);
|
||||||
static::_SetCookie($sCookieName, '', \time() - 3600 * 24 * 30);
|
if (isset($aSplit[1]) && $aSplit[0] == $sName && $aSplit[1] > $i) {
|
||||||
|
\SnappyMail\Log::debug('COOKIE', "unset {$sCookieName}");
|
||||||
|
unset($_COOKIE[$sCookieName]);
|
||||||
|
static::_SetCookie($sCookieName, '', \time() - 3600 * 24 * 30);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,11 @@ abstract class Crypt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
\trigger_error(__CLASS__ . "::{$fn}(): " . $e->getMessage());
|
Log::error('Crypt', "{$fn}(): {$e->getMessage()}");
|
||||||
}
|
}
|
||||||
// \trigger_error(__CLASS__ . '::Decrypt() invalid $data or $key');
|
Log::warning('Crypt', 'Decrypt() invalid $data or $key');
|
||||||
} else {
|
} else {
|
||||||
// \trigger_error(__CLASS__ . '::Decrypt() invalid $data');
|
Log::warning('Crypt', 'Decrypt() invalid $data');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +77,7 @@ abstract class Crypt
|
||||||
{
|
{
|
||||||
$data = static::jsonDecode($data);
|
$data = static::jsonDecode($data);
|
||||||
if (!\is_array($data)) {
|
if (!\is_array($data)) {
|
||||||
// \trigger_error(__CLASS__ . '::DecryptFromJSON() invalid $data');
|
Log::notice('Crypt', 'DecryptFromJSON() invalid $data');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return static::Decrypt(\array_map('base64_decode', $data), $key);
|
return static::Decrypt(\array_map('base64_decode', $data), $key);
|
||||||
|
|
@ -87,7 +87,7 @@ abstract class Crypt
|
||||||
{
|
{
|
||||||
$data = \explode('.', $data);
|
$data = \explode('.', $data);
|
||||||
if (!\is_array($data)) {
|
if (!\is_array($data)) {
|
||||||
// \trigger_error(__CLASS__ . '::DecryptUrlSafe() invalid $data');
|
Log::notice('Crypt', 'DecryptUrlSafe() invalid $data');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return static::Decrypt(\array_map('MailSo\\Base\\Utils::UrlSafeBase64Decode', $data), $key);
|
return static::Decrypt(\array_map('MailSo\\Base\\Utils::UrlSafeBase64Decode', $data), $key);
|
||||||
|
|
@ -175,6 +175,7 @@ abstract class Crypt
|
||||||
if (!static::$cipher) {
|
if (!static::$cipher) {
|
||||||
throw new \Exception('openssl $cipher not set');
|
throw new \Exception('openssl $cipher not set');
|
||||||
}
|
}
|
||||||
|
Log::debug('Crypt', 'openssl_decrypt() with cipher ' . static::$cipher);
|
||||||
return \openssl_decrypt(
|
return \openssl_decrypt(
|
||||||
$data,
|
$data,
|
||||||
static::$cipher,
|
static::$cipher,
|
||||||
|
|
@ -195,6 +196,7 @@ abstract class Crypt
|
||||||
if (!static::$cipher) {
|
if (!static::$cipher) {
|
||||||
throw new \Exception('openssl $cipher not set');
|
throw new \Exception('openssl $cipher not set');
|
||||||
}
|
}
|
||||||
|
Log::debug('Crypt', 'openssl_encrypt() with cipher ' . static::$cipher);
|
||||||
$result = \openssl_encrypt(
|
$result = \openssl_encrypt(
|
||||||
$data,
|
$data,
|
||||||
static::$cipher,
|
static::$cipher,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue