Incorporate review changes

This commit is contained in:
Lukas Reschke 2015-02-19 18:55:27 +01:00
parent 283476a2f7
commit f92f3a1a6e
8 changed files with 63 additions and 116 deletions

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or * This file is licensed under the Affero General Public License version 3 or
* later. * later.
* See the COPYING-README file. * See the COPYING-README file.
@ -77,6 +77,34 @@ class Mailer implements IMailer {
return $failedRecipients; 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 * Returns whatever transport is configured within the config
* *

View File

@ -1,45 +0,0 @@
<?php
/**
* Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
* 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;
}
}

View File

@ -46,4 +46,12 @@ interface IMailer {
* has been supplied.) * has been supplied.)
*/ */
public function send(Message $message); 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);
} }

View File

@ -1,26 +0,0 @@
<?php
/**
* Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
* 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);
}
}

View File

@ -294,7 +294,8 @@ class Util {
$host_name = \OC_Config::getValue('mail_domain', $host_name); $host_name = \OC_Config::getValue('mail_domain', $host_name);
$defaultEmailAddress = $user_part.'@'.$host_name; $defaultEmailAddress = $user_part.'@'.$host_name;
if (\OCP\Mail\Util::validateMailAddress($defaultEmailAddress)) { $mailer = \OC::$server->getMailer();
if ($mailer->validateMailAddress($defaultEmailAddress)) {
return $defaultEmailAddress; return $defaultEmailAddress;
} }

View File

@ -263,8 +263,7 @@ class UsersController extends Controller {
* @return DataResponse * @return DataResponse
*/ */
public function create($username, $password, array $groups=array(), $email='') { public function create($username, $password, array $groups=array(), $email='') {
if($email !== '' && !$this->mailer->validateMailAddress($email)) {
if($email !== '' && !\OCP\Mail\Util::validateMailAddress($email)) {
return new DataResponse( return new DataResponse(
array( array(
'message' => (string)$this->l10n->t('Invalid mail address') '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( return new DataResponse(
array( array(
'status' => 'error', 'status' => 'error',

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or * This file is licensed under the Affero General Public License version 3 or
* later. * later.
* See the COPYING-README file. * See the COPYING-README file.
@ -115,4 +115,25 @@ class MailerTest extends TestCase {
$this->mailer->send($message); $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));
}
} }

View File

@ -1,39 +0,0 @@
<?php
/**
* Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
* 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));
}
}