Fixes ACCOUNTS-5Y5. Also idna escape login part of the email.

This commit is contained in:
ErickSkrauch 2019-12-15 18:13:47 +03:00
parent 3d89e5f94d
commit 3b00e36816
2 changed files with 12 additions and 7 deletions

View File

@ -102,17 +102,22 @@ class EmailValidatorTest extends TestCase {
$this->assertNotSame(['error.email_is_tempmail'], $model->getErrors('field')); $this->assertNotSame(['error.email_is_tempmail'], $model->getErrors('field'));
} }
public function testValidateAttributeIdna() { /**
* @dataProvider getValidateAttributeIdnaTestCases
*/
public function testValidateAttributeIdna(string $input, string $expectedOutput) {
$this->getFunctionMock(YiiEmailValidator::class, 'checkdnsrr')->expects($this->any())->willReturn(true); $this->getFunctionMock(YiiEmailValidator::class, 'checkdnsrr')->expects($this->any())->willReturn(true);
$this->getFunctionMock(YiiEmailValidator::class, 'dns_get_record')->expects($this->any())->willReturn(['127.0.0.1']); $this->getFunctionMock(YiiEmailValidator::class, 'dns_get_record')->expects($this->any())->willReturn(['127.0.0.1']);
$model = $this->createModel('qdushyantasunassm@❕.gq'); $model = $this->createModel($input);
$this->validator->validateAttribute($model, 'field'); $this->validator->validateAttribute($model, 'field');
$this->assertSame('qdushyantasunassm@xn--bei.gq', $model->field); $this->assertSame($expectedOutput, $model->field);
}
$model = $this->createModel('valid-email@gmail.com'); public function getValidateAttributeIdnaTestCases() {
$this->validator->validateAttribute($model, 'field'); yield ['qdushyantasunassm@❕.gq', 'qdushyantasunassm@xn--bei.gq'];
$this->assertSame('valid-email@gmail.com', $model->field); yield ['Rafaelaabraão@gmail.com', 'xn--rafaelaabrao-dcb@gmail.com'];
yield ['valid-email@gmail.com', 'valid-email@gmail.com'];
} }
public function testValidateAttributeUnique() { public function testValidateAttributeUnique() {

View File

@ -40,7 +40,7 @@ class EmailValidator extends Validator {
$idnaDomain = new validators\FilterValidator(['filter' => function(string $value): string { $idnaDomain = new validators\FilterValidator(['filter' => function(string $value): string {
[$name, $domain] = explode('@', $value); [$name, $domain] = explode('@', $value);
return $name . '@' . idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46); return idn_to_ascii($name, 0, INTL_IDNA_VARIANT_UTS46) . '@' . idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
}]); }]);
$unique = new validators\UniqueValidator(); $unique = new validators\UniqueValidator();