mirror of
https://github.com/elyby/accounts.git
synced 2024-11-26 16:52:02 +05:30
Добавлено запоминание регистрационного IP адреса
This commit is contained in:
parent
433f560f48
commit
59f51451d0
@ -94,6 +94,7 @@ class RegistrationForm extends ApiForm {
|
||||
$account->lang = $this->lang;
|
||||
$account->status = Account::STATUS_REGISTERED;
|
||||
$account->rules_agreement_version = LATEST_RULES_VERSION;
|
||||
$account->setRegistrationIp(Yii::$app->request->getUserIP());
|
||||
if (!$account->save()) {
|
||||
throw new ErrorException('Account not created.');
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ use const common\LATEST_RULES_VERSION;
|
||||
* @property string $lang
|
||||
* @property integer $status
|
||||
* @property integer $rules_agreement_version
|
||||
* @property string $registration_ip
|
||||
* @property integer $created_at
|
||||
* @property integer $updated_at
|
||||
* @property integer $password_changed_at
|
||||
@ -198,4 +199,12 @@ class Account extends ActiveRecord {
|
||||
return $this->rules_agreement_version === LATEST_RULES_VERSION;
|
||||
}
|
||||
|
||||
public function setRegistrationIp($ip) {
|
||||
$this->registration_ip = $ip === null ? null : inet_pton($ip);
|
||||
}
|
||||
|
||||
public function getRegistrationIp() {
|
||||
return $this->registration_ip === null ? null : inet_ntop($this->registration_ip);
|
||||
}
|
||||
|
||||
}
|
||||
|
15
console/migrations/m160817_225019_registration_ip.php
Normal file
15
console/migrations/m160817_225019_registration_ip.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
use console\db\Migration;
|
||||
|
||||
class m160817_225019_registration_ip extends Migration {
|
||||
|
||||
public function safeUp() {
|
||||
$this->addColumn('{{%accounts}}', 'registration_ip', 'VARBINARY(16) AFTER rules_agreement_version');
|
||||
}
|
||||
|
||||
public function safeDown() {
|
||||
$this->dropColumn('{{%accounts}}', 'registration_ip');
|
||||
}
|
||||
|
||||
}
|
@ -9,6 +9,7 @@ use tests\codeception\api\unit\DbTestCase;
|
||||
use tests\codeception\common\fixtures\AccountFixture;
|
||||
use Yii;
|
||||
use const common\LATEST_RULES_VERSION;
|
||||
use yii\web\Request;
|
||||
|
||||
/**
|
||||
* @property array $accounts
|
||||
@ -23,6 +24,7 @@ class RegistrationFormTest extends DbTestCase {
|
||||
$mailer->fileTransportCallback = function () {
|
||||
return 'testing_message.eml';
|
||||
};
|
||||
$this->mockRequest();
|
||||
}
|
||||
|
||||
protected function tearDown() {
|
||||
@ -100,6 +102,7 @@ class RegistrationFormTest extends DbTestCase {
|
||||
expect('user should be valid', $account)->isInstanceOf(Account::class);
|
||||
expect('password should be correct', $account->validatePassword('some_password'))->true();
|
||||
expect('uuid is set', $account->uuid)->notEmpty();
|
||||
expect('registration_ip is set', $account->registration_ip)->notNull();
|
||||
expect('actual rules version is set', $account->rules_agreement_version)->equals(LATEST_RULES_VERSION);
|
||||
expect('user model exists in database', Account::find()->andWhere([
|
||||
'username' => 'some_username',
|
||||
@ -114,6 +117,21 @@ class RegistrationFormTest extends DbTestCase {
|
||||
|
||||
// TODO: там в самой форме есть метод sendMail(), который рано или поздно должен переехать. К нему нужны будут тоже тесты
|
||||
|
||||
private function mockRequest($ip = '88.225.20.236') {
|
||||
$request = $this->getMockBuilder(Request::class)
|
||||
->setMethods(['getUserIP'])
|
||||
->getMock();
|
||||
|
||||
$request
|
||||
->expects($this->any())
|
||||
->method('getUserIP')
|
||||
->will($this->returnValue($ip));
|
||||
|
||||
Yii::$app->set('request', $request);
|
||||
|
||||
return $request;
|
||||
}
|
||||
|
||||
private function getMessageFile() {
|
||||
/** @var \yii\swiftmailer\Mailer $mailer */
|
||||
$mailer = Yii::$app->mailer;
|
||||
|
@ -202,4 +202,24 @@ class AccountTest extends DbTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
public function testSetRegistrationIp() {
|
||||
$account = new Account();
|
||||
$account->setRegistrationIp('42.72.205.204');
|
||||
$this->assertEquals('42.72.205.204', inet_ntop($account->registration_ip));
|
||||
$account->setRegistrationIp('2001:1620:28:1:b6f:8bca:93:a116');
|
||||
$this->assertEquals('2001:1620:28:1:b6f:8bca:93:a116', inet_ntop($account->registration_ip));
|
||||
$account->setRegistrationIp(null);
|
||||
$this->assertNull($account->registration_ip);
|
||||
}
|
||||
|
||||
public function testGetRegistrationIp() {
|
||||
$account = new Account();
|
||||
$account->setRegistrationIp('42.72.205.204');
|
||||
$this->assertEquals('42.72.205.204', $account->getRegistrationIp());
|
||||
$account->setRegistrationIp('2001:1620:28:1:b6f:8bca:93:a116');
|
||||
$this->assertEquals('2001:1620:28:1:b6f:8bca:93:a116', $account->getRegistrationIp());
|
||||
$account->setRegistrationIp(null);
|
||||
$this->assertNull($account->getRegistrationIp());
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user