From 77697ff3eda8e97759e1ef6a96c59382dc264968 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 25 Jan 2023 11:42:45 +0100 Subject: [PATCH 1/2] Move encrypt-all password email to EmailTemplate Signed-off-by: Joas Schilling --- apps/encryption/lib/Crypto/EncryptAll.php | 73 +++++++++++------------ apps/encryption/templates/altmail.php | 16 ----- apps/encryption/templates/mail.php | 38 ------------ 3 files changed, 34 insertions(+), 93 deletions(-) delete mode 100644 apps/encryption/templates/altmail.php delete mode 100644 apps/encryption/templates/mail.php diff --git a/apps/encryption/lib/Crypto/EncryptAll.php b/apps/encryption/lib/Crypto/EncryptAll.php index 1889c557cdc97..72d9646f41a83 100644 --- a/apps/encryption/lib/Crypto/EncryptAll.php +++ b/apps/encryption/lib/Crypto/EncryptAll.php @@ -34,7 +34,10 @@ use OCA\Encryption\Util; use OCP\IConfig; use OCP\IL10N; +use OCP\IUser; use OCP\IUserManager; +use OCP\L10N\IFactory; +use OCP\Mail\Headers\AutoSubmitted; use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; use Symfony\Component\Console\Helper\ProgressBar; @@ -73,6 +76,9 @@ class EncryptAll { /** @var IL10N */ protected $l; + /** @var IFactory */ + protected $l10nFactory; + /** @var QuestionHelper */ protected $questionHelper; @@ -85,18 +91,6 @@ class EncryptAll { /** @var ISecureRandom */ protected $secureRandom; - /** - * @param Setup $userSetup - * @param IUserManager $userManager - * @param View $rootView - * @param KeyManager $keyManager - * @param Util $util - * @param IConfig $config - * @param IMailer $mailer - * @param IL10N $l - * @param QuestionHelper $questionHelper - * @param ISecureRandom $secureRandom - */ public function __construct( Setup $userSetup, IUserManager $userManager, @@ -106,6 +100,7 @@ public function __construct( IConfig $config, IMailer $mailer, IL10N $l, + IFactory $l10nFactory, QuestionHelper $questionHelper, ISecureRandom $secureRandom ) { @@ -117,6 +112,7 @@ public function __construct( $this->config = $config; $this->mailer = $mailer; $this->l = $l; + $this->l10nFactory = $l10nFactory; $this->questionHelper = $questionHelper; $this->secureRandom = $secureRandom; // store one time passwords for the users @@ -413,6 +409,10 @@ protected function sendPasswordsByMail() { $progress->advance(); if (!empty($password)) { $recipient = $this->userManager->get($uid); + if (!$recipient instanceof IUser) { + continue; + } + $recipientDisplayName = $recipient->getDisplayName(); $to = $recipient->getEMailAddress(); @@ -421,20 +421,33 @@ protected function sendPasswordsByMail() { continue; } - $subject = $this->l->t('one-time password for server-side-encryption'); - [$htmlBody, $textBody] = $this->createMailBody($password); + $l = $this->l10nFactory->get('encryption', $this->l10nFactory->getUserLanguage($recipient)); + + $template = $this->mailer->createEMailTemplate('encryption.encryptAllPassword', [ + 'user' => $recipient->getUID(), + 'password' => $password, + ]); + + $template->setSubject($l->t('one-time password for server-side-encryption')); + // 'Hey there,

The administration enabled server-side-encryption. Your files were encrypted using the password %s.

+ // Please login to the web interface, go to the section "Basic encryption module" of your personal settings and update your encryption password by entering this password into the "Old log-in password" field and your current login-password.

' + $template->addHeader(); + $template->addHeading($l->t('Encryption password')); + $template->addBodyText( + $l->t('The administration enabled server-side-encryption. Your files were encrypted using the password %s.', [htmlspecialchars($password)]), + $l->t('The administration enabled server-side-encryption. Your files were encrypted using the password "%s".', $password) + ); + $template->addBodyText( + $l->t('Please login to the web interface, go to the "Security" section of your personal settings and update your encryption password by entering this password into the "Old log-in password" field and your current login-password.') + ); + $template->addFooter(); // send it out now try { $message = $this->mailer->createMessage(); - $message->setSubject($subject); $message->setTo([$to => $recipientDisplayName]); - $message->setHtmlBody($htmlBody); - $message->setPlainBody($textBody); - $message->setFrom([ - \OCP\Util::getDefaultEmailAddress('admin-noreply') - ]); - + $message->useTemplate($template); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); $this->mailer->send($message); } catch (\Exception $e) { $noMail[] = $uid; @@ -458,22 +471,4 @@ protected function sendPasswordsByMail() { $table->render(); } } - - /** - * create mail body for plain text and html mail - * - * @param string $password one-time encryption password - * @return array an array of the html mail body and the plain text mail body - */ - protected function createMailBody($password) { - $html = new \OC_Template("encryption", "mail", ""); - $html->assign('password', $password); - $htmlMail = $html->fetchPage(); - - $plainText = new \OC_Template("encryption", "altmail", ""); - $plainText->assign('password', $password); - $plainTextMail = $plainText->fetchPage(); - - return [$htmlMail, $plainTextMail]; - } } diff --git a/apps/encryption/templates/altmail.php b/apps/encryption/templates/altmail.php deleted file mode 100644 index 2044fd8e74c0a..0000000000000 --- a/apps/encryption/templates/altmail.php +++ /dev/null @@ -1,16 +0,0 @@ -t("Hey there,\n\nThe administration enabled server-side-encryption. Your files were encrypted using the password \"%s\".\n\nPlease login to the web interface, go to the section \"Basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"Old log-in password\" field and your current login-password.\n\n", [$_['password']])); -if (isset($_['expiration'])) { - print_unescaped($l->t("The share will expire on %s.", [$_['expiration']])); - print_unescaped("\n\n"); -} -// TRANSLATORS term at the end of a mail -p($l->t("Cheers!")); -?> - - -- -getName() . ' - ' . $theme->getSlogan()); ?> -getBaseUrl()); diff --git a/apps/encryption/templates/mail.php b/apps/encryption/templates/mail.php deleted file mode 100644 index 0db4b67d08daa..0000000000000 --- a/apps/encryption/templates/mail.php +++ /dev/null @@ -1,38 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - -
- <?php p($theme->getName()); ?> -
 
  - t('Hey there,

The administration enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section "Basic encryption module" of your personal settings and update your encryption password by entering this password into the "Old log-in password" field and your current login-password.

', [$_['password']])); - // TRANSLATORS term at the end of a mail - p($l->t('Cheers!')); - ?> -
 
 --
- getName()); ?> - - getSlogan()); ?> -
getBaseUrl());?> -
 
-
From 68bd04e1734a8991d01076318706262e1ffb2bbe Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 8 Mar 2023 20:47:46 +0100 Subject: [PATCH 2/2] Fix unit tests Signed-off-by: Joas Schilling --- apps/encryption/tests/Crypto/EncryptAllTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php index 126dbec680ec5..b99e9144be868 100644 --- a/apps/encryption/tests/Crypto/EncryptAllTest.php +++ b/apps/encryption/tests/Crypto/EncryptAllTest.php @@ -36,6 +36,7 @@ use OCP\IConfig; use OCP\IL10N; use OCP\IUserManager; +use OCP\L10N\IFactory; use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; use OCP\UserInterface; @@ -106,6 +107,7 @@ protected function setUp(): void { ->disableOriginalConstructor()->getMock(); $this->mailer = $this->getMockBuilder(IMailer::class) ->disableOriginalConstructor()->getMock(); + $this->l10nFactory = $this->createMock(IFactory::class); $this->l = $this->getMockBuilder(IL10N::class) ->disableOriginalConstructor()->getMock(); $this->questionHelper = $this->getMockBuilder(QuestionHelper::class) @@ -140,6 +142,7 @@ protected function setUp(): void { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ); @@ -158,6 +161,7 @@ public function testEncryptAll() { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -186,6 +190,7 @@ public function testEncryptAllWithMasterKey() { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -215,6 +220,7 @@ public function testCreateKeyPairs() { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -264,6 +270,7 @@ public function testEncryptAllUsersFiles() { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -299,6 +306,7 @@ public function testEncryptUsersFiles() { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ]