Signed-off-by: Morris Jobke <hey@morrisjobke.de>tags/v12.0.0beta1
@@ -284,15 +284,29 @@ class LostController extends Controller { | |||
$link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user->getUID(), 'token' => $token)); | |||
$tmpl = new \OC_Template('core', 'lostpassword/email'); | |||
$tmpl->assign('link', $link); | |||
$msg = $tmpl->fetchPage(); | |||
$emailTemplate = $this->mailer->createEMailTemplate(); | |||
$emailTemplate->addHeader(); | |||
$emailTemplate->addHeading($this->l10n->t('Password reset')); | |||
$emailTemplate->addBodyText( | |||
$this->l10n->t('Click the following button to reset your password. If you have not requested the password reset, then ignore this email.'), | |||
$this->l10n->t('Click the following link to reset your password. If you have not requested the password reset, then ignore this email.') | |||
); | |||
$emailTemplate->addBodyButton( | |||
$this->l10n->t('Reset your password'), | |||
$link, | |||
false | |||
); | |||
$emailTemplate->addFooter(); | |||
try { | |||
$message = $this->mailer->createMessage(); | |||
$message->setTo([$email => $user->getUID()]); | |||
$message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()])); | |||
$message->setPlainBody($msg); | |||
$message->setPlainBody($emailTemplate->renderText()); | |||
$message->setHtmlBody($emailTemplate->renderHTML()); | |||
$message->setFrom([$this->from => $this->defaults->getName()]); | |||
$this->mailer->send($message); | |||
} catch (\Exception $e) { |
@@ -1,21 +0,0 @@ | |||
<?php | |||
/** | |||
* @author Christopher Schäpers <kondou@ts.unde.re> | |||
* | |||
* @copyright Copyright (c) 2016, ownCloud, Inc. | |||
* @license AGPL-3.0 | |||
* | |||
* This code is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License, version 3, | |||
* as published by the Free Software Foundation. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License, version 3, | |||
* along with this program. If not, see <http://www.gnu.org/licenses/> | |||
* | |||
*/ | |||
echo str_replace('{link}', $_['link'], $l->t('Use the following link to reset your password: {link}')); |
@@ -423,10 +423,12 @@ EOF; | |||
* | |||
* @param string $text Text of button | |||
* @param string $url URL of button | |||
* @param string $plainText Text of button in plain text version | |||
* if empty the $text is used, if false none will be used | |||
* | |||
* @since 12.0.0 | |||
*/ | |||
public function addBodyButton($text, $url) { | |||
public function addBodyButton($text, $url, $plainText = '') { | |||
if ($this->footerAdded) { | |||
return; | |||
} | |||
@@ -436,9 +438,18 @@ EOF; | |||
$this->bodyOpened = true; | |||
} | |||
if ($plainText === '') { | |||
$plainText = $text; | |||
} | |||
$color = $this->themingDefaults->getColorPrimary(); | |||
$this->htmlBody .= vsprintf($this->button, [$color, $color, $url, $color, htmlspecialchars($text)]); | |||
$this->plainBody .= $text . ': ' . $url . PHP_EOL; | |||
if ($plainText !== false) { | |||
$this->plainBody .= $plainText . ': '; | |||
} | |||
$this->plainBody .= $url . PHP_EOL; | |||
} | |||
@@ -99,10 +99,12 @@ interface IEMailTemplate { | |||
* | |||
* @param string $text Text of button | |||
* @param string $url URL of button | |||
* @param string $plainText Text of button in plain text version | |||
* if empty the $text is used, if false none will be used | |||
* | |||
* @since 12.0.0 | |||
*/ | |||
public function addBodyButton($text, $url); | |||
public function addBodyButton($text, $url, $plainText = ''); | |||
/** | |||
* Adds a logo and a text to the footer. <br> in the text will be replaced by new lines in the plain text email |
@@ -33,6 +33,7 @@ use OCP\IRequest; | |||
use OCP\IURLGenerator; | |||
use OCP\IUser; | |||
use OCP\IUserManager; | |||
use OCP\Mail\IEMailTemplate; | |||
use OCP\Mail\IMailer; | |||
use OCP\Security\ICrypto; | |||
use OCP\Security\ISecureRandom; | |||
@@ -314,17 +315,32 @@ class LostControllerTest extends \Test\TestCase { | |||
$message | |||
->expects($this->at(2)) | |||
->method('setPlainBody') | |||
->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/'); | |||
->with('text body'); | |||
$message | |||
->expects($this->at(3)) | |||
->method('setHtmlBody') | |||
->with('HTML body'); | |||
$message | |||
->expects($this->at(4)) | |||
->method('setFrom') | |||
->with(['lostpassword-noreply@localhost' => null]); | |||
$emailTemplate = $this->createMock(IEMailTemplate::class); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderHTML') | |||
->willReturn('HTML body'); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderText') | |||
->willReturn('text body'); | |||
$this->mailer | |||
->expects($this->at(0)) | |||
->method('createEMailTemplate') | |||
->willReturn($emailTemplate); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->method('createMessage') | |||
->will($this->returnValue($message)); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->expects($this->at(2)) | |||
->method('send') | |||
->with($message); | |||
@@ -385,17 +401,32 @@ class LostControllerTest extends \Test\TestCase { | |||
$message | |||
->expects($this->at(2)) | |||
->method('setPlainBody') | |||
->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/'); | |||
->with('text body'); | |||
$message | |||
->expects($this->at(3)) | |||
->method('setHtmlBody') | |||
->with('HTML body'); | |||
$message | |||
->expects($this->at(4)) | |||
->method('setFrom') | |||
->with(['lostpassword-noreply@localhost' => null]); | |||
$emailTemplate = $this->createMock(IEMailTemplate::class); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderHTML') | |||
->willReturn('HTML body'); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderText') | |||
->willReturn('text body'); | |||
$this->mailer | |||
->expects($this->at(0)) | |||
->method('createEMailTemplate') | |||
->willReturn($emailTemplate); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->method('createMessage') | |||
->will($this->returnValue($message)); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->expects($this->at(2)) | |||
->method('send') | |||
->with($message); | |||
@@ -450,17 +481,32 @@ class LostControllerTest extends \Test\TestCase { | |||
$message | |||
->expects($this->at(2)) | |||
->method('setPlainBody') | |||
->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/'); | |||
->with('text body'); | |||
$message | |||
->expects($this->at(3)) | |||
->method('setHtmlBody') | |||
->with('HTML body'); | |||
$message | |||
->expects($this->at(4)) | |||
->method('setFrom') | |||
->with(['lostpassword-noreply@localhost' => null]); | |||
$emailTemplate = $this->createMock(IEMailTemplate::class); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderHTML') | |||
->willReturn('HTML body'); | |||
$emailTemplate->expects($this->any()) | |||
->method('renderText') | |||
->willReturn('text body'); | |||
$this->mailer | |||
->expects($this->at(0)) | |||
->method('createEMailTemplate') | |||
->willReturn($emailTemplate); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->method('createMessage') | |||
->will($this->returnValue($message)); | |||
$this->mailer | |||
->expects($this->at(1)) | |||
->expects($this->at(2)) | |||
->method('send') | |||
->with($message) | |||
->will($this->throwException(new \Exception())); |
@@ -4,7 +4,7 @@ You have now an Nextcloud account, you can add, protect, and share your data. | |||
Your username is: abc | |||
Set your password: https://example.org/resetPassword/123 | |||
https://example.org/resetPassword/123 | |||
-- | |||
TestCloud - A safe home for your data |
@@ -157,7 +157,8 @@ class EMailTemplateTest extends TestCase { | |||
$this->emailTemplate->addBodyText('You have now an Nextcloud account, you can add, protect, and share your data.'); | |||
$this->emailTemplate->addBodyText('Your username is: abc'); | |||
$this->emailTemplate->addBodyButton( | |||
'Set your password', 'https://example.org/resetPassword/123' | |||
'Set your password', 'https://example.org/resetPassword/123', | |||
false | |||
); | |||
$this->emailTemplate->addFooter(); | |||