Nextcloud session['snappymail-password'] to session['snappymail-passphrase']

This commit is contained in:
the-djmaze 2024-03-14 03:59:46 +01:00
parent d784c61076
commit 106765e384
3 changed files with 20 additions and 9 deletions

View file

@ -75,20 +75,24 @@ class Application extends App implements IBootstrap
$dispatcher = $context->getAppContainer()->query('OCP\EventDispatcher\IEventDispatcher'); $dispatcher = $context->getAppContainer()->query('OCP\EventDispatcher\IEventDispatcher');
$dispatcher->addListener(PostLoginEvent::class, function (PostLoginEvent $Event) { $dispatcher->addListener(PostLoginEvent::class, function (PostLoginEvent $Event) {
/*
$config = \OC::$server->getConfig(); $config = \OC::$server->getConfig();
// Only store the user's password in the current session if they have // Only store the user's password in the current session if they have
// enabled auto-login using Nextcloud username or email address. // enabled auto-login using Nextcloud username or email address.
if ($config->getAppValue('snappymail', 'snappymail-autologin', false) if ($config->getAppValue('snappymail', 'snappymail-autologin', false)
|| $config->getAppValue('snappymail', 'snappymail-autologin-with-email', false)) { || $config->getAppValue('snappymail', 'snappymail-autologin-with-email', false)) {
*/
$sUID = $Event->getUser()->getUID(); $sUID = $Event->getUser()->getUID();
\OC::$server->getSession()['snappymail-nc-uid'] = $sUID; \OC::$server->getSession()['snappymail-nc-uid'] = $sUID;
\OC::$server->getSession()['snappymail-password'] = SnappyMailHelper::encodePassword($Event->getPassword(), $sUID); \OC::$server->getSession()['snappymail-passphrase'] = SnappyMailHelper::encodePassword($Event->getPassword(), $sUID);
/*
} }
*/
}); });
$dispatcher->addListener(BeforeUserLoggedOutEvent::class, function (BeforeUserLoggedOutEvent $Event) { $dispatcher->addListener(BeforeUserLoggedOutEvent::class, function (BeforeUserLoggedOutEvent $Event) {
// https://github.com/nextcloud/server/issues/36083#issuecomment-1387370634 // https://github.com/nextcloud/server/issues/36083#issuecomment-1387370634
// \OC::$server->getSession()['snappymail-password'] = ''; // \OC::$server->getSession()['snappymail-passphrase'] = '';
SnappyMailHelper::loadApp(); SnappyMailHelper::loadApp();
// \RainLoop\Api::Actions()->Logout(true); // \RainLoop\Api::Actions()->Logout(true);
\RainLoop\Api::Actions()->DoLogout(); \RainLoop\Api::Actions()->DoLogout();
@ -99,12 +103,12 @@ class Application extends App implements IBootstrap
$class = 'OCA\Impersonate\Events\BeginImpersonateEvent'; $class = 'OCA\Impersonate\Events\BeginImpersonateEvent';
if (\class_exists($class)) { if (\class_exists($class)) {
$dispatcher->addListener($class, function ($Event) { $dispatcher->addListener($class, function ($Event) {
\OC::$server->getSession()['snappymail-password'] = ''; \OC::$server->getSession()['snappymail-passphrase'] = '';
SnappyMailHelper::loadApp(); SnappyMailHelper::loadApp();
\RainLoop\Api::Actions()->Logout(true); \RainLoop\Api::Actions()->Logout(true);
}); });
$dispatcher->addListener('OCA\Impersonate\Events\EndImpersonateEvent', function ($Event) { $dispatcher->addListener('OCA\Impersonate\Events\EndImpersonateEvent', function ($Event) {
\OC::$server->getSession()['snappymail-password'] = ''; \OC::$server->getSession()['snappymail-passphrase'] = '';
SnappyMailHelper::loadApp(); SnappyMailHelper::loadApp();
\RainLoop\Api::Actions()->Logout(true); \RainLoop\Api::Actions()->Logout(true);
}); });

View file

@ -105,7 +105,7 @@ class SnappyMailHelper
} catch (\Throwable $e) { } catch (\Throwable $e) {
// Login failure, reset password to prevent more attempts // Login failure, reset password to prevent more attempts
$sUID = \OC::$server->getUserSession()->getUser()->getUID(); $sUID = \OC::$server->getUserSession()->getUser()->getUID();
\OC::$server->getSession()['snappymail-password'] = ''; \OC::$server->getSession()['snappymail-passphrase'] = '';
\OC::$server->getConfig()->setUserValue($sUID, 'snappymail', 'snappymail-password', ''); \OC::$server->getConfig()->setUserValue($sUID, 'snappymail', 'snappymail-password', '');
} }
} }
@ -165,16 +165,18 @@ class SnappyMailHelper
$sPassword = ''; $sPassword = '';
if ($config->getAppValue('snappymail', 'snappymail-autologin', false)) { if ($config->getAppValue('snappymail', 'snappymail-autologin', false)) {
$sEmail = $sUID; $sEmail = $sUID;
$sPassword = $ocSession['snappymail-password']; $sPassword = $ocSession['snappymail-passphrase'];
} else if ($config->getAppValue('snappymail', 'snappymail-autologin-with-email', false)) { } else if ($config->getAppValue('snappymail', 'snappymail-autologin-with-email', false)) {
$sEmail = $config->getUserValue($sUID, 'settings', 'email'); $sEmail = $config->getUserValue($sUID, 'settings', 'email');
$sPassword = $ocSession['snappymail-password']; $sPassword = $ocSession['snappymail-passphrase'];
} else { } else {
\SnappyMail\Log::debug('Nextcloud', 'snappymail-autologin is off'); \SnappyMail\Log::debug('Nextcloud', 'snappymail-autologin is off');
} }
if ($sPassword) { if ($sPassword) {
return [$sUID, $sEmail, static::decodePassword($sPassword, $sUID)]; return [$sUID, $sEmail, static::decodePassword($sPassword, $sUID)];
} }
} else {
\SnappyMail\Log::debug('Nextcloud', "snappymail-nc-uid mismatch '{$ocSession['snappymail-nc-uid']}' != '{$sUID}'");
} }
return [$sUID, '', '']; return [$sUID, '', ''];

View file

@ -250,8 +250,13 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
$aResult['ContactsSync']['User'] = $sUID; $aResult['ContactsSync']['User'] = $sUID;
$bSave = true; $bSave = true;
} }
if (empty($aResult['ContactsSync']['Password'])) { $pass = \OC::$server->getSession()['snappymail-passphrase'];
$aResult['ContactsSync']['Password'] = ''; if ($pass/* && empty($aResult['ContactsSync']['Password'])*/) {
$pass = \SnappyMail\Crypt::DecryptUrlSafe($pass, $sUID);
if ($pass) {
$aResult['ContactsSync']['Password'] = $pass;
$bSave = true;
}
} }
if ($bSave) { if ($bSave) {
$oActions = \RainLoop\Api::Actions(); $oActions = \RainLoop\Api::Actions();