From f92f3a1a6ecbce06fbe24204ef12b2eeeb0f0d15 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Thu, 19 Feb 2015 18:55:27 +0100 Subject: [PATCH] Incorporate review changes --- lib/private/mail/mailer.php | 30 ++++++++++++++++- lib/private/mail/util.php | 45 ------------------------- lib/public/mail/imailer.php | 8 +++++ lib/public/mail/util.php | 26 -------------- lib/public/util.php | 3 +- settings/controller/userscontroller.php | 5 ++- tests/lib/mail/mailer.php | 23 ++++++++++++- tests/lib/mail/util.php | 39 --------------------- 8 files changed, 63 insertions(+), 116 deletions(-) delete mode 100644 lib/private/mail/util.php delete mode 100644 lib/public/mail/util.php delete mode 100644 tests/lib/mail/util.php diff --git a/lib/private/mail/mailer.php b/lib/private/mail/mailer.php index ff4b0a0ef62..92e6b91ce1c 100644 --- a/lib/private/mail/mailer.php +++ b/lib/private/mail/mailer.php @@ -1,6 +1,6 @@ + * Copyright (c) 2014-2015 Lukas Reschke * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. @@ -77,6 +77,34 @@ class Mailer implements IMailer { return $failedRecipients; } + /** + * Checks if an e-mail address is valid + * + * @param string $email Email address to be validated + * @return bool True if the mail address is valid, false otherwise + */ + public function validateMailAddress($email) { + return \Swift_Validate::email($this->convertEmail($email)); + } + + /** + * SwiftMailer does currently not work with IDN domains, this function therefore converts the domains + * + * FIXME: Remove this once SwiftMailer supports IDN + * + * @param string $email + * @return string Converted mail address if `idn_to_ascii` exists + */ + protected function convertEmail($email) { + if (!function_exists('idn_to_ascii') || strpos($email, '@') === false) { + return $email; + } + + list($name, $domain) = explode('@', $email, 2); + $domain = idn_to_ascii($domain); + return $name.'@'.$domain; + } + /** * Returns whatever transport is configured within the config * diff --git a/lib/private/mail/util.php b/lib/private/mail/util.php deleted file mode 100644 index b301e79d492..00000000000 --- a/lib/private/mail/util.php +++ /dev/null @@ -1,45 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OC\Mail; - -/** - * Class Util - * - * @package OC\Mail - */ -class Util { - /** - * Checks if an e-mail address is valid - * - * @param string $email Email address to be validated - * @return bool True if the mail address is valid, false otherwise - */ - public static function validateMailAddress($email) { - return \Swift_Validate::email(self::convertEmail($email)); - } - - /** - * SwiftMailer does currently not work with IDN domains, this function therefore converts the domains - * - * FIXME: Remove this once SwiftMailer supports IDN - * - * @param string $email - * @return string Converted mail address if `idn_to_ascii` exists - */ - protected static function convertEmail($email) { - if (!function_exists('idn_to_ascii') || strpos($email, '@') === false) { - return $email; - } - - list($name, $domain) = explode('@', $email, 2); - $domain = idn_to_ascii($domain); - return $name.'@'.$domain; - } - -} diff --git a/lib/public/mail/imailer.php b/lib/public/mail/imailer.php index 2a20ead612b..dc6fe5ba869 100644 --- a/lib/public/mail/imailer.php +++ b/lib/public/mail/imailer.php @@ -46,4 +46,12 @@ interface IMailer { * has been supplied.) */ public function send(Message $message); + + /** + * Checks if an e-mail address is valid + * + * @param string $email Email address to be validated + * @return bool True if the mail address is valid, false otherwise + */ + public function validateMailAddress($email); } diff --git a/lib/public/mail/util.php b/lib/public/mail/util.php deleted file mode 100644 index ea59649e620..00000000000 --- a/lib/public/mail/util.php +++ /dev/null @@ -1,26 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OCP\Mail; - -/** - * Class Util provides some helpers for mail addresses - * - * @package OCP\Mail - */ -class Util { - /** - * Checks if an e-mail address is valid - * - * @param string $email Email address to be validated - * @return bool True if the mail address is valid, false otherwise - */ - public static function validateMailAddress($email) { - return \OC\Mail\Util::validateMailAddress($email); - } -} diff --git a/lib/public/util.php b/lib/public/util.php index 71ab8cabce5..338c216f255 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -294,7 +294,8 @@ class Util { $host_name = \OC_Config::getValue('mail_domain', $host_name); $defaultEmailAddress = $user_part.'@'.$host_name; - if (\OCP\Mail\Util::validateMailAddress($defaultEmailAddress)) { + $mailer = \OC::$server->getMailer(); + if ($mailer->validateMailAddress($defaultEmailAddress)) { return $defaultEmailAddress; } diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php index 507e57ef940..11afe514016 100644 --- a/settings/controller/userscontroller.php +++ b/settings/controller/userscontroller.php @@ -263,8 +263,7 @@ class UsersController extends Controller { * @return DataResponse */ public function create($username, $password, array $groups=array(), $email='') { - - if($email !== '' && !\OCP\Mail\Util::validateMailAddress($email)) { + if($email !== '' && !$this->mailer->validateMailAddress($email)) { return new DataResponse( array( 'message' => (string)$this->l10n->t('Invalid mail address') @@ -443,7 +442,7 @@ class UsersController extends Controller { ); } - if($mailAddress !== '' && ! \OCP\Mail\Util::validateMailAddress($mailAddress)) { + if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) { return new DataResponse( array( 'status' => 'error', diff --git a/tests/lib/mail/mailer.php b/tests/lib/mail/mailer.php index bd410dd3383..2cb4c5cfde3 100644 --- a/tests/lib/mail/mailer.php +++ b/tests/lib/mail/mailer.php @@ -1,6 +1,6 @@ + * Copyright (c) 2014-2015 Lukas Reschke * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. @@ -115,4 +115,25 @@ class MailerTest extends TestCase { $this->mailer->send($message); } + /** + * @return array + */ + public function mailAddressProvider() { + return [ + ['lukas@owncloud.com', true], + ['lukas@localhost', true], + ['lukas@192.168.1.1', true], + ['lukas@éxämplè.com', true], + ['asdf', false], + ['lukas@owncloud.org@owncloud.com', false], + ]; + } + + /** + * @dataProvider mailAddressProvider + */ + public function testValidateMailAddress($email, $expected) { + $this->assertSame($expected, $this->mailer->validateMailAddress($email)); + } + } diff --git a/tests/lib/mail/util.php b/tests/lib/mail/util.php deleted file mode 100644 index 04d9d5df256..00000000000 --- a/tests/lib/mail/util.php +++ /dev/null @@ -1,39 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Test; -use OCP\Mail\Util; - -/** - * Class Util - * - * @package OC\Mail - */ -class UtilTest extends TestCase { - - /** - * @return array - */ - public function mailAddressProvider() { - return array( - array('lukas@owncloud.com', true), - array('lukas@localhost', true), - array('lukas@192.168.1.1', true), - array('lukas@éxämplè.com', true), - array('asdf', false), - array('lukas@owncloud.org@owncloud.com', false) - ); - } - - /** - * @dataProvider mailAddressProvider - */ - public function testValidateMailAddress($email, $expected) { - $this->assertSame($expected, Util::validateMailAddress($email)); - } -} -- 2.39.5