Make tries public

This commit is contained in:
Dennis Eichhorn 2020-12-20 19:56:21 +01:00
parent e48d9c2d5d
commit 7e634a99a0
5 changed files with 25 additions and 42 deletions

View File

@ -780,11 +780,6 @@ final class ApiController extends Controller
new \Modules\Profile\Models\Profile($account), new \Modules\Profile\Models\Profile($account),
$request $request
); );
$this->updateModel($request->header->account, $old, $account, function () use ($account) : void {
$account->setLoginTries((int) $this->app->appSettings->get(null, SettingsEnum::LOGIN_TRIES)['content']);
AccountMapper::update($account);
}, 'account', $request->getOrigin());
} }
/** /**

View File

@ -30,31 +30,5 @@ class Account extends \phpOMS\Account\Account
* @var int * @var int
* @since 1.0.0 * @since 1.0.0
*/ */
protected int $tries = 0; public int $tries = 0;
/**
* Get remaining login tries
*
* @return int
*
* @since 1.0.0
*/
public function getLoginTries() : int
{
return $this->tries;
}
/**
* Set remaining login tries
*
* @param int $tries Remaining login tries
*
* @return void
*
* @since 1.0.0
*/
public function setLoginTries(int $tries = 0) : void
{
$this->tries = $tries;
}
} }

View File

@ -45,6 +45,7 @@ final class AccountMapper extends DataMapperAbstract
'account_name2' => ['name' => 'account_name2', 'type' => 'string', 'internal' => 'name2', 'autocomplete' => true, 'annotations' => ['gdpr' => true]], 'account_name2' => ['name' => 'account_name2', 'type' => 'string', 'internal' => 'name2', 'autocomplete' => true, 'annotations' => ['gdpr' => true]],
'account_name3' => ['name' => 'account_name3', 'type' => 'string', 'internal' => 'name3', 'autocomplete' => true, 'annotations' => ['gdpr' => true]], 'account_name3' => ['name' => 'account_name3', 'type' => 'string', 'internal' => 'name3', 'autocomplete' => true, 'annotations' => ['gdpr' => true]],
'account_password' => ['name' => 'account_password', 'type' => 'string', 'internal' => 'password', 'writeonly' => true], 'account_password' => ['name' => 'account_password', 'type' => 'string', 'internal' => 'password', 'writeonly' => true],
'account_password_temp' => ['name' => 'account_password_temp', 'type' => 'string', 'internal' => 'tempPassword', 'writeonly' => true],
'account_email' => ['name' => 'account_email', 'type' => 'string', 'internal' => 'email', 'autocomplete' => true, 'annotations' => ['gdpr' => true]], 'account_email' => ['name' => 'account_email', 'type' => 'string', 'internal' => 'email', 'autocomplete' => true, 'annotations' => ['gdpr' => true]],
'account_tries' => ['name' => 'account_tries', 'type' => 'int', 'internal' => 'tries'], 'account_tries' => ['name' => 'account_tries', 'type' => 'int', 'internal' => 'tries'],
'account_lactive' => ['name' => 'account_lactive', 'type' => 'DateTime', 'internal' => 'lastActive'], 'account_lactive' => ['name' => 'account_lactive', 'type' => 'DateTime', 'internal' => 'lastActive'],
@ -157,12 +158,13 @@ final class AccountMapper extends DataMapperAbstract
* *
* @param string $login Username * @param string $login Username
* @param string $password Password * @param string $password Password
* @param int $tries Allowed login tries
* *
* @return int Login code * @return int Login code
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public static function login(string $login, string $password) : int public static function login(string $login, string $password, int $tries = 3) : int
{ {
if (empty($password)) { if (empty($password)) {
return LoginReturnType::WRONG_PASSWORD; return LoginReturnType::WRONG_PASSWORD;
@ -184,7 +186,7 @@ final class AccountMapper extends DataMapperAbstract
$result = $result[0]; $result = $result[0];
if ($result['account_tries'] <= 0) { if ($result['account_tries'] >= $tries) {
return LoginReturnType::WRONG_INPUT_EXCEEDED; return LoginReturnType::WRONG_INPUT_EXCEEDED;
} }
@ -198,7 +200,10 @@ final class AccountMapper extends DataMapperAbstract
if (\password_verify($password, $result['account_password'] ?? '')) { if (\password_verify($password, $result['account_password'] ?? '')) {
$query->update('account') $query->update('account')
->set(['account_lactive' => new \DateTime('now')]) ->set([
'account_lactive' => new \DateTime('now'),
'account_tries' => 0,
])
->where('account_login', '=', $login) ->where('account_login', '=', $login)
->execute(); ->execute();
@ -212,6 +217,7 @@ final class AccountMapper extends DataMapperAbstract
->set([ ->set([
'account_password_temp' => '', 'account_password_temp' => '',
'account_lactive' => new \DateTime('now'), 'account_lactive' => new \DateTime('now'),
'account_tries' => 0,
]) ])
->where('account_login', '=', $login) ->where('account_login', '=', $login)
->execute(); ->execute();
@ -219,6 +225,14 @@ final class AccountMapper extends DataMapperAbstract
return $result['account_id']; return $result['account_id'];
} }
$query->update('account')
->set([
'account_lactive' => new \DateTime('now'),
'account_tries' => $result['account_tries'] + 1,
])
->where('account_login', '=', $login)
->execute();
return LoginReturnType::WRONG_PASSWORD; return LoginReturnType::WRONG_PASSWORD;
} catch (\Exception $e) { } catch (\Exception $e) {
return LoginReturnType::FAILURE; // @codeCoverageIgnore return LoginReturnType::FAILURE; // @codeCoverageIgnore

View File

@ -41,7 +41,7 @@ class AccountMapperTest extends \PHPUnit\Framework\TestCase
$account->name1 = 'Donald'; $account->name1 = 'Donald';
$account->name2 = 'Fauntleroy'; $account->name2 = 'Fauntleroy';
$account->name3 = 'Duck'; $account->name3 = 'Duck';
$account->setLoginTries(3); $account->tries = 0;
$account->setEmail('d.duck@duckburg.com'); $account->setEmail('d.duck@duckburg.com');
$account->setStatus(AccountStatus::ACTIVE); $account->setStatus(AccountStatus::ACTIVE);
$account->setType(AccountType::USER); $account->setType(AccountType::USER);
@ -59,7 +59,7 @@ class AccountMapperTest extends \PHPUnit\Framework\TestCase
self::assertEquals($account->getStatus(), $accountR->getStatus()); self::assertEquals($account->getStatus(), $accountR->getStatus());
self::assertEquals($account->getType(), $accountR->getType()); self::assertEquals($account->getType(), $accountR->getType());
self::assertEquals($account->getEmail(), $accountR->getEmail()); self::assertEquals($account->getEmail(), $accountR->getEmail());
self::assertEquals($account->getLoginTries(), $accountR->getLoginTries()); self::assertEquals($account->tries, $accountR->tries);
} }
/** /**
@ -109,12 +109,12 @@ class AccountMapperTest extends \PHPUnit\Framework\TestCase
public function testInvalidLoginTries() : void public function testInvalidLoginTries() : void
{ {
$accountR = AccountMapper::get(1); $accountR = AccountMapper::get(1);
$accountR->setLoginTries(0); $accountR->tries = 0;
AccountMapper::update($accountR); AccountMapper::update($accountR);
self::assertEquals(LoginReturnType::WRONG_INPUT_EXCEEDED, AccountMapper::login($accountR->login, 'orange')); self::assertEquals(LoginReturnType::WRONG_INPUT_EXCEEDED, AccountMapper::login($accountR->login, 'orange'));
$accountR->setLoginTries(3); $accountR->tries = 3;
AccountMapper::update($accountR); AccountMapper::update($accountR);
} }

View File

@ -31,7 +31,7 @@ class AccountTest extends \PHPUnit\Framework\TestCase
public function testDefault() : void public function testDefault() : void
{ {
$account = new Account(); $account = new Account();
self::assertEquals(0, $account->getLoginTries()); self::assertEquals(0, $account->tries);
} }
/** /**
@ -43,7 +43,7 @@ class AccountTest extends \PHPUnit\Framework\TestCase
{ {
$account = new Account(); $account = new Account();
$account->setLoginTries(3); $account->tries = 3;
self::assertEquals(3, $account->getLoginTries()); self::assertEquals(3, $account->tries);
} }
} }