diff --git a/integrations/nextcloud/snappymail/lib/Controller/FetchController.php b/integrations/nextcloud/snappymail/lib/Controller/FetchController.php index 68e65cdbc..8119d2408 100644 --- a/integrations/nextcloud/snappymail/lib/Controller/FetchController.php +++ b/integrations/nextcloud/snappymail/lib/Controller/FetchController.php @@ -59,6 +59,14 @@ class FetchController extends Controller { ]); } + if (!empty($_POST['import-rainloop'])) { + $result = SnappyMailHelper::importRainLoop(); + return new JSONResponse([ + 'status' => 'success', + 'Message' => \implode("\n", $result) + ]); + } + SnappyMailHelper::loadApp(); $debug = !empty($_POST['snappymail-debug']); $oConfig = \RainLoop\Api::Config(); diff --git a/integrations/nextcloud/snappymail/lib/Settings/AdminSettings.php b/integrations/nextcloud/snappymail/lib/Settings/AdminSettings.php index c87456f88..5b4294824 100644 --- a/integrations/nextcloud/snappymail/lib/Settings/AdminSettings.php +++ b/integrations/nextcloud/snappymail/lib/Settings/AdminSettings.php @@ -38,10 +38,15 @@ class AdminSettings implements ISettings $sPassword = ''; if (\is_file($passfile)) { $sPassword = \file_get_contents($passfile); - $parameters['snappymail-admin-panel-link'] .= SnappyMailHelper::getAppUrl().'?admin#/security'; + $parameters['snappymail-admin-panel-link'] .= '#/security'; } $parameters['snappymail-admin-password'] = $sPassword; + $parameters['can-import-rainloop'] = \is_dir( + \rtrim(\trim(\OC::$server->getSystemConfig()->getValue('datadirectory', '')), '\\/') + . '/rainloop-storage' + ); + $parameters['snappymail-debug'] = $oConfig->Get('debug', 'enable', false); // Check for nextcloud plugin update, if so then update diff --git a/integrations/nextcloud/snappymail/lib/Util/SnappyMailHelper.php b/integrations/nextcloud/snappymail/lib/Util/SnappyMailHelper.php index b252a2a20..60e8227ed 100644 --- a/integrations/nextcloud/snappymail/lib/Util/SnappyMailHelper.php +++ b/integrations/nextcloud/snappymail/lib/Util/SnappyMailHelper.php @@ -14,7 +14,7 @@ class SnappyMailHelper // Nextcloud the default spl_autoload_register() not working \spl_autoload_register(function($sClassName){ $file = RAINLOOP_APP_LIBRARIES_PATH . \strtolower(\strtr($sClassName, '\\', DIRECTORY_SEPARATOR)) . '.php'; - if (is_file($file)) { + if (\is_file($file)) { include_once $file; } }); @@ -22,31 +22,6 @@ class SnappyMailHelper $_ENV['SNAPPYMAIL_NEXTCLOUD'] = true; $_ENV['SNAPPYMAIL_INCLUDE_AS_API'] = true; - // Import data from RainLoop - $dir = \rtrim(\trim(\OC::$server->getSystemConfig()->getValue('datadirectory', '')), '\\/'); - $dir_snappy = $dir . '/appdata_snappymail/'; - $dir_rainloop = $dir . '/rainloop-storage'; - $rainloop_plugins = []; - if (!\is_dir($dir_snappy) && \is_dir($dir_rainloop)) { - \mkdir($dir_snappy, 0755, true); - $iterator = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($dir_rainloop, \RecursiveDirectoryIterator::SKIP_DOTS), - \RecursiveIteratorIterator::SELF_FIRST - ); - foreach ($iterator as $item) { - $target = $dir_snappy . $iterator->getSubPathname(); - if (\preg_match('@/plugins/([^/])@', $target, $match)) { - $rainloop_plugins[$match[1]] = $match[1]; - } else if (!\strpos($target, '/cache/')) { - if ($item->isDir()) { - \mkdir($target, 0755, true); - } else { - \copy($item, $target); - } - } - } - } - require_once \dirname(\dirname(__DIR__)) . '/app/index.php'; $oConfig = \RainLoop\Api::Config(); @@ -65,23 +40,6 @@ class SnappyMailHelper $bSave = true; } - $sPassword = $oConfig->Get('security', 'admin_password'); - if ('12345' == $sPassword || !$sPassword) { - $sPassword = \substr(\base64_encode(\random_bytes(16)), 0, 12); - \RainLoop\Utils::saveFile(APP_PRIVATE_DATA . 'admin_password.txt', $sPassword . "\n"); - $oConfig->SetPassword($sPassword); - $bSave = true; - } - - // Attempt to install same plugins as RainLoop - if ($rainloop_plugins) { - foreach (\SnappyMail\Repository::getPackagesList()['List'] as $plugin) { - if (\in_array($plugin['id'], $rainloop_plugins)) { - \SnappyMail\Repository::installPackage('plugin', $plugin['id']); - } - } - } - $bSave && $oConfig->Save(); } @@ -164,4 +122,63 @@ class SnappyMailHelper static::loadApp(); return \SnappyMail\Crypt::DecryptUrlSafe($sPassword, $sSalt); } + + // Imports data from RainLoop + public static function importRainLoop() : array + { + $result = []; + + $dir = \rtrim(\trim(\OC::$server->getSystemConfig()->getValue('datadirectory', '')), '\\/'); + $dir_snappy = $dir . '/appdata_snappymail/'; + $dir_rainloop = $dir . '/rainloop-storage'; + $rainloop_plugins = []; + if (\is_dir($dir_rainloop)) { + \is_dir($dir_snappy) || \mkdir($dir_snappy, 0755, true); + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir_rainloop, \RecursiveDirectoryIterator::SKIP_DOTS), + \RecursiveIteratorIterator::SELF_FIRST + ); + foreach ($iterator as $item) { + $target = $dir_snappy . $iterator->getSubPathname(); + if (\preg_match('@/plugins/([^/])@', $target, $match)) { + $rainloop_plugins[$match[1]] = $match[1]; + } else if (!\strpos($target, '/cache/')) { + if ($item->isDir()) { + \is_dir($target) || \mkdir($target, 0755, true); + } else if (\file_exists($target)) { + $result[] = "skipped: {$target}"; + } else { + \copy($item, $target); + $result[] = "copied : {$target}"; + } + } + } + } + +// $password = APP_PRIVATE_DATA . 'admin_password.txt'; +// \is_file($password) && \unlink($password); + + static::loadApp(); + + // Attempt to install same plugins as RainLoop + if ($rainloop_plugins) { + foreach (\SnappyMail\Repository::getPackagesList()['List'] as $plugin) { + if (\in_array($plugin['id'], $rainloop_plugins)) { + $result[] = "install plugin : {$plugin['id']}"; + \SnappyMail\Repository::installPackage('plugin', $plugin['id']); + unset($rainloop_plugins[$plugin['id']]); + } + } + foreach ($rainloop_plugins as $plugin) { + $result[] = "skipped plugin : {$plugin}"; + } + } + + $oConfig = \RainLoop\Api::Config(); + $oConfig->Set('webmail', 'theme', 'Nextcloud@custom'); + $oConfig->Save(); + + return $result; + } + } diff --git a/integrations/nextcloud/snappymail/templates/admin-local.php b/integrations/nextcloud/snappymail/templates/admin-local.php index ea92cecc7..f48fb5273 100755 --- a/integrations/nextcloud/snappymail/templates/admin-local.php +++ b/integrations/nextcloud/snappymail/templates/admin-local.php @@ -39,18 +39,25 @@
- > + >
- > + >
+ + +
+- +