Просмотр исходного кода

Incorporate review changes

tags/v8.1.0alpha1
Lukas Reschke 9 лет назад
Родитель
Сommit
f92f3a1a6e

+ 29
- 1
lib/private/mail/mailer.php Просмотреть файл

@@ -1,6 +1,6 @@
<?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
* 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
*

+ 0
- 45
lib/private/mail/util.php Просмотреть файл

@@ -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;
}

}

+ 8
- 0
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);
}

+ 0
- 26
lib/public/mail/util.php Просмотреть файл

@@ -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);
}
}

+ 2
- 1
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;
}


+ 2
- 3
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',

+ 22
- 1
tests/lib/mail/mailer.php Просмотреть файл

@@ -1,6 +1,6 @@
<?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
* 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));
}

}

+ 0
- 39
tests/lib/mail/util.php Просмотреть файл

@@ -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));
}
}

Загрузка…
Отмена
Сохранить