Skip to content

Commit

Permalink
Added support for multiple domains
Browse files Browse the repository at this point in the history
  • Loading branch information
fguillot committed May 3, 2016
1 parent 15bd185 commit 2600158
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function getPluginAuthor()

public function getPluginVersion()
{
return '1.0.0';
return '1.0.1';
}

public function getPluginHomepage()
Expand Down
4 changes: 2 additions & 2 deletions Template/config/application.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<?= $this->form->label(t('Email domain restriction for sign up'), 'registration_email_domain') ?>
<?= $this->form->text('registration_email_domain', $values, $errors, array('placeholder="mycompany.tld"')) ?>
<p class="form-help"><?= t('Only people with this email address will be allowed to sign up.') ?></p>
<?= $this->form->text('registration_email_domain', $values, $errors, array('placeholder="domain1.tld, domain2.tld, domain3.tld"')) ?>
<p class="form-help"><?= t('Only people with this email address will be allowed to sign up.') ?></p>
85 changes: 85 additions & 0 deletions Test/Validator/RegistrationValidatorTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php

use Kanboard\Plugin\Registration\Validator\RegistrationValidator;

class RegistrationValidatorTest extends Base
{
public function testWithoutDomainRestriction()
{
$validator = new RegistrationValidator($this->container);
list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => 'test@localhost',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertTrue($result);
}

public function testWithDomainRestriction()
{
$this->container['config']->save(array('registration_email_domain' => 'mydomain.tld'));
$validator = new RegistrationValidator($this->container);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => 'test@localhost',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertFalse($result);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => '[email protected]',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertTrue($result);
}

public function testWithMultipleDomainRestriction()
{
$this->container['config']->save(array('registration_email_domain' => 'domain1.tld, domain2.tld ,domain3.tld'));
$validator = new RegistrationValidator($this->container);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => 'test@localhost',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertFalse($result);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => '[email protected]',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertTrue($result);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => '[email protected]',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertTrue($result);

list($result,) = $validator->validateCreation(array(
'username' => 'test',
'email' => '[email protected]',
'password' => 'test123',
'confirmation' => 'test123',
));

$this->assertTrue($result);
}
}
21 changes: 14 additions & 7 deletions Validator/RegistrationValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class RegistrationValidator extends UserValidator
*/
public function validateCreation(array $values)
{
$domains = $this->config->get('registration_email_domain', '');

$rules = array(
new Validators\Required('username', t('The username is required')),
new Validators\Required('email', t('The email is required')),
Expand All @@ -32,7 +34,7 @@ public function validateCreation(array $values)
$result = $v->execute();
$errors = $v->getErrors();

if ($result && !$this->validateDomainRestriction($values)) {
if ($result && $domains !== '' && !$this->validateDomainRestriction($values, $domains)) {
$result = false;
$errors = array('email' => array(t('You are not allowed to register')));
}
Expand All @@ -45,17 +47,22 @@ public function validateCreation(array $values)

/**
* Validate domain restriction
* @param array $values
*
* @access private
* @param array $values
* @param string $domains
* @return bool
*/
private function validateDomainRestriction(array $values)
private function validateDomainRestriction(array $values, $domains)
{
$domain = $this->config->get('registration_email_domain', '');
foreach (explode(',', $domains) as $domain) {
$domain = trim($domain);

if ($domain !== '') {
return strpos($values['email'], $domain) > 0;
if (strpos($values['email'], $domain) > 0) {
return true;
}
}

return true;
return false;
}
}

0 comments on commit 2600158

Please sign in to comment.