Fixed user name generation

in the past user name generation was no trimming
white spaces, so was adding %20 on openid url.
Also added migration to fix the former user names.

Change-Id: Ic784102433def9b47b9151800623eea2f32920b2
This commit is contained in:
Sebastian Marcet 2017-02-01 17:05:36 -03:00
parent 3979961668
commit dff98a009a
5 changed files with 136 additions and 4 deletions

View File

@ -76,6 +76,23 @@ class User extends BaseModelEloquent implements AuthenticatableContract, IOpenId
$this->member = $member;
}
public function getMember(){
return $this->getAssociatedMember();
}
/**
* @return bool
*/
public function hasMember(){
try{
return $this->getMember() != null;
}
catch (EntityNotFoundException $ex){
return false;
}
return false;
}
private function getAssociatedMember()
{
if (is_null($this->member)) {
@ -414,4 +431,14 @@ class User extends BaseModelEloquent implements AuthenticatableContract, IOpenId
return $this->member->isEmailVerified();
}
public function delete()
{
$this->access_tokens()->delete();
$this->actions()->delete();
$this->clients()->delete();
$this->consents()->delete();
$this->trusted_sites()->delete();
return parent::delete();
}
}

View File

@ -88,9 +88,9 @@ final class UserNameGeneratorService implements IUserNameGeneratorService
*/
public function generate(Member $member)
{
$fname = self::normalizeChars($member->FirstName);
$lname = self::normalizeChars($member->Surname);
$user_name = strtolower
$fname = self::normalizeChars(trim($member->FirstName));
$lname = self::normalizeChars(trim($member->Surname));
$user_name = strtolower
(
preg_replace('/[^\d\w_-]+/i', IUserNameGeneratorService::USER_NAME_INVALID_CHAR_REPLACEMENT, $fname)
. IUserNameGeneratorService::USER_NAME_CHAR_CONNECTOR .

View File

@ -0,0 +1,70 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Auth\User;
use Auth\UserNameGeneratorService;
use Illuminate\Support\Facades\DB;
use Utils\Exceptions\EntityNotFoundException;
/**
* Class FixUserNameWhitespace
*/
class FixUserNameWhitespace extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::transaction(function(){
$users = User::where('identifier','like','% %')->get();
$generator = new UserNameGeneratorService();
foreach($users as $user_2_fix){
try {
$member = $user_2_fix->getMember();
$fragment_nbr = 1;
$identifier = $original_identifier = $generator->generate($member);
do {
$old_user = User::where('identifier', '=', $identifier)->where('id', '<>', $user_2_fix->id)->first();
if (!is_null($old_user) && !$old_user->hasMember()){
sprintf("deleting user id %s", $old_user->id).PHP_EOL;
$old_user->delete();
$old_user = null;
}
if (!is_null($old_user)) {
echo sprintf("identifier %s collision with user id %s - member_id %s", $identifier, $old_user->id, $old_user->external_identifier).PHP_EOL;
$identifier = $original_identifier . \Auth\IUserNameGeneratorService::USER_NAME_CHAR_CONNECTOR . $fragment_nbr;
$fragment_nbr++;
continue;
}
$user_2_fix->identifier = $identifier;
break;
} while (1);
$user_2_fix->save();
}
catch (EntityNotFoundException $ex){
echo sprintf("member not found for user id %s - identifier %s ... deleting it", $user_2_fix->id, $user_2_fix->identifier).PHP_EOL;
$user_2_fix->delete();
}
}
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -412,6 +412,28 @@ SQL;
)
);
Member::create(
array(
'ID' => 8,
'FirstName' => ' Sebastian German ',
'Surname' => 'Marcet Gomez ',
'Email' => 'smarcet@gmail.com',
'Password' => '1qaz2wsx',
'PasswordEncryption' => 'none',
'Salt' => 'none',
'Gender' => 'male',
'Address' => 'Av. Siempre Viva 111',
'Suburb' => 'Lanus Este',
'State' => 'Buenos Aires',
'City' => 'Lanus',
'Postcode' => '1824',
'Country' => 'AR',
'Locale' => 'ESP',
'Active' => 1,
'EmailVerified' => 1,
)
);
DB::table('banned_ips')->delete();
DB::table('user_exceptions_trail')->delete();
DB::table('server_configuration')->delete();

View File

@ -4,7 +4,7 @@ use Auth\User;
use Models\Member;
use OpenId\Services\OpenIdServiceCatalog;
use Illuminate\Support\Facades\App;
use Auth\UserNameGeneratorService;
/**
* Class UserTest
*/
@ -26,4 +26,17 @@ class UserTest extends TestCase
$service = App::make(OpenIdServiceCatalog::UserService);
$service->lockUser($user->id);
}
public function testUserNameGeneration(){
$generator = new UserNameGeneratorService();
$member6 = Member::findOrFail(6);
$member7 = Member::findOrFail(7);
$member8 = Member::findOrFail(8);
$id6 = $generator->generate($member6);
$this->assertTrue( $id6 == 'bharath.kumar.m.r');
$id7 = $generator->generate($member7);
$this->assertTrue( $id7 == 'yuanying');
$id8 = $generator->generate($member8);
$this->assertTrue( $id8 == 'sebastian.german.marcet.gomez');
}
}