Files
nextcloud-mail/lib/Command/ExportAccount.php
Christoph Wurst b62227351d refactor: mark DTO classes as final
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2025-06-06 09:07:49 +02:00

97 lines
3.6 KiB
PHP

<?php
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Mail\Command;
use OCA\Mail\Service\AccountService;
use OCP\Security\ICrypto;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
final class ExportAccount extends Command {
public const ARGUMENT_USER_ID = 'user-id';
public const ARGUMENT_OUTPUT_FORMAT = 'output';
private AccountService $accountService;
private ICrypto $crypto;
public function __construct(AccountService $service, ICrypto $crypto) {
parent::__construct();
$this->accountService = $service;
$this->crypto = $crypto;
}
/**
* @return void
*/
protected function configure() {
$this->setName('mail:account:export');
$this->setDescription('Exports a user\'s IMAP account(s)');
$this->addArgument(self::ARGUMENT_USER_ID, InputArgument::REQUIRED);
$this->addOption(self::ARGUMENT_OUTPUT_FORMAT, '', InputOption::VALUE_OPTIONAL);
}
private function getAccountsData($accounts) {
$accountsData = [];
foreach ($accounts as $account) {
$accountsData[] = [
'id' => $account->getId(),
'email' => $account->getEmail(),
'name' => $account->getName(),
'provision' => [
'status' => $account->getMailAccount()->getProvisioningId() ? 'set' : 'none',
'id' => $account->getMailAccount()->getProvisioningId() ?: 'N/A'
],
'imap' => [
'user' => $account->getMailAccount()->getInboundUser(),
'host' => $account->getMailAccount()->getInboundHost(),
'port' => $account->getMailAccount()->getInboundPort(),
'security' => $account->getMailAccount()->getInboundSslMode()
],
'smtp' => [
'user' => $account->getMailAccount()->getOutboundUser(),
'host' => $account->getMailAccount()->getOutboundHost(),
'port' => $account->getMailAccount()->getOutboundPort(),
'security' => $account->getMailAccount()->getOutboundSslMode()
]
];
}
return $accountsData;
}
protected function execute(InputInterface $input, OutputInterface $output): int {
$userId = $input->getArgument(self::ARGUMENT_USER_ID);
$accounts = $this->accountService->findByUserId($userId);
if ($input->getOption(self::ARGUMENT_OUTPUT_FORMAT) === 'json') {
$output->writeln(json_encode($this->getAccountsData($accounts)));
} elseif ($input->getOption(self::ARGUMENT_OUTPUT_FORMAT) === 'json_pretty') {
$output->writeln(json_encode($this->getAccountsData($accounts), JSON_PRETTY_PRINT));
} else {
foreach ($accounts as $account) {
$output->writeln('<info>Account ' . $account->getId() . ':</info>');
$output->writeln('- E-Mail: ' . $account->getEmail());
$output->writeln('- Name: ' . $account->getName());
$output->writeln('- Provision: ' . ($account->getMailAccount()->getProvisioningId() ? 'set' : 'none') . ' ID: ' . ($account->getMailAccount()->getProvisioningId() ?: 'N/A'));
$output->writeln('- IMAP user: ' . $account->getMailAccount()->getInboundUser());
$output->writeln('- IMAP host: ' . $account->getMailAccount()->getInboundHost() . ':' . $account->getMailAccount()->getInboundPort() . ', security: ' . $account->getMailAccount()->getInboundSslMode());
$output->writeln('- SMTP user: ' . $account->getMailAccount()->getOutboundUser());
$output->writeln('- SMTP host: ' . $account->getMailAccount()->getOutboundHost() . ':' . $account->getMailAccount()->getOutboundPort() . ', security: ' . $account->getMailAccount()->getOutboundSslMode());
}
}
return 0;
}
}