Skip to content

Commit

Permalink
Spoof validation (#100)
Browse files Browse the repository at this point in the history
* Spoof validation
  • Loading branch information
egulias committed May 9, 2016
1 parent 68aae52 commit e4f04d5
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
11 changes: 11 additions & 0 deletions EmailValidator/Validation/Error/SpoofEmail.php
@@ -0,0 +1,11 @@
<?php

namespace Egulias\EmailValidator\Validation\Error;

use Egulias\EmailValidator\Exception\InvalidEmail;

class SpoofEmail extends InvalidEmail
{
const CODE = 998;
const REASON = "The email contains mixed UTF8 chars that makes it suspicious";
}
38 changes: 38 additions & 0 deletions EmailValidator/Validation/SpoofCheckValidation.php
@@ -0,0 +1,38 @@
<?php

namespace Egulias\EmailValidator\Validation;

use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Validation\Error\SpoofEmail;
use \Spoofchecker;

class SpoofCheckValidation implements EmailValidation
{
/**
* @var InvalidEmail
*/
private $error;

public function isValid($email, EmailLexer $emailLexer)
{
$checker = new Spoofchecker();
$checker->setChecks(Spoofchecker::SINGLE_SCRIPT);

if ($checker->isSuspicious($email)) {
$this->error = new SpoofEmail();
return false;
}

return true;
}

public function getError()
{
return $this->error;
}

public function getWarnings()
{
return [];
}
}
40 changes: 40 additions & 0 deletions Tests/EmailValidator/Validation/SpoofCheckValidationTest.php
@@ -0,0 +1,40 @@
<?php

namespace Egulias\Tests\EmailValidator\Validation;

use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Validation\SpoofCheckValidation;

class SpoofCheckValidationTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider validUTF8EmailsProvider
*/
public function testUTF8EmailAreValid($email)
{
$validation = new SpoofCheckValidation();

$this->assertTrue($validation->isValid($email, new EmailLexer()));
}

public function testEmailWithSpoofsIsInvalid()
{
$validation = new SpoofCheckValidation();

$this->assertFalse($validation->isValid("Кириллица"."latin漢字"."ひらがな"."カタカナ", new EmailLexer()));
}

public function validUTF8EmailsProvider()
{
return [
// Cyrillic
['Кириллица@Кириллица'],
// Latin + Han + Hiragana + Katakana
["latin漢字"."ひらがな"."カタカナ"."@example.com"],
// Latin + Han + Hangul
["latin"."漢字"."조선말"."@example.com"],
// Latin + Han + Bopomofo
["latin"."漢字"."ㄅㄆㄇㄈ"."@example.com"]
];
}
}

0 comments on commit e4f04d5

Please sign in to comment.