add filters for retrieving ip
This commit is contained in:
parent
c4ce144be2
commit
9d624fd299
|
|
@ -9,6 +9,7 @@ use App\Models\Player;
|
|||
use App\Models\User;
|
||||
use App\Rules;
|
||||
use Auth;
|
||||
use Blessing\Filter;
|
||||
use Cache;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
|
|
@ -18,14 +19,14 @@ use Mail;
|
|||
use Session;
|
||||
use URL;
|
||||
use Vectorface\Whip\Whip;
|
||||
use View;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function login()
|
||||
public function login(Filter $filter)
|
||||
{
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$ip = $filter->apply('client_ip', $ip);
|
||||
|
||||
return view('auth.login', [
|
||||
'extra' => [
|
||||
|
|
@ -39,7 +40,8 @@ class AuthController extends Controller
|
|||
public function handleLogin(
|
||||
Request $request,
|
||||
Rules\Captcha $captcha,
|
||||
Dispatcher $dispatcher
|
||||
Dispatcher $dispatcher,
|
||||
Filter $filter
|
||||
) {
|
||||
$this->validate($request, [
|
||||
'identification' => 'required',
|
||||
|
|
@ -64,6 +66,7 @@ class AuthController extends Controller
|
|||
// Require CAPTCHA if user fails to login more than 3 times
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$ip = $filter->apply('client_ip', $ip);
|
||||
$loginFailsCacheKey = sha1('login_fails_'.$ip);
|
||||
$loginFails = (int) Cache::get($loginFailsCacheKey, 0);
|
||||
|
||||
|
|
@ -130,7 +133,8 @@ class AuthController extends Controller
|
|||
public function handleRegister(
|
||||
Request $request,
|
||||
Rules\Captcha $captcha,
|
||||
Dispatcher $dispatcher
|
||||
Dispatcher $dispatcher,
|
||||
Filter $filter
|
||||
) {
|
||||
if (!option('user_can_register')) {
|
||||
return json(trans('auth.register.close'), 7);
|
||||
|
|
@ -163,6 +167,7 @@ class AuthController extends Controller
|
|||
// then reject the register.
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$ip = $filter->apply('client_ip', $ip);
|
||||
if (User::where('ip', $ip)->count() >= option('regs_per_ip')) {
|
||||
return json(trans('auth.register.max', ['regs' => option('regs_per_ip')]), 7);
|
||||
}
|
||||
|
|
@ -220,7 +225,8 @@ class AuthController extends Controller
|
|||
public function handleForgot(
|
||||
Request $request,
|
||||
Rules\Captcha $captcha,
|
||||
Dispatcher $dispatcher
|
||||
Dispatcher $dispatcher,
|
||||
Filter $filter
|
||||
) {
|
||||
$data = $this->validate($request, [
|
||||
'email' => 'required|email',
|
||||
|
|
@ -237,6 +243,7 @@ class AuthController extends Controller
|
|||
$rateLimit = 180;
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$ip = $filter->apply('client_ip', $ip);
|
||||
$lastMailCacheKey = sha1('last_mail_'.$ip);
|
||||
$remain = $rateLimit + Cache::get($lastMailCacheKey, 0) - time();
|
||||
if ($remain > 0) {
|
||||
|
|
@ -352,7 +359,7 @@ class AuthController extends Controller
|
|||
return Socialite::driver($driver)->redirect();
|
||||
}
|
||||
|
||||
public function oauthCallback(Dispatcher $dispatcher, $driver)
|
||||
public function oauthCallback(Dispatcher $dispatcher, Filter $filter, $driver)
|
||||
{
|
||||
$remoteUser = Socialite::driver($driver)->user();
|
||||
|
||||
|
|
@ -365,6 +372,7 @@ class AuthController extends Controller
|
|||
if (!$user) {
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$ip = $filter->apply('client_ip', $ip);
|
||||
|
||||
$user = new User();
|
||||
$user->email = $email;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use Illuminate\Support\Facades\URL;
|
|||
use Illuminate\Support\Str;
|
||||
use Laravel\Socialite\AbstractUser;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use Tests\Fakes\Filter;
|
||||
use Vectorface\Whip\Whip;
|
||||
|
||||
class AuthControllerTest extends TestCase
|
||||
|
|
@ -98,6 +99,7 @@ class AuthControllerTest extends TestCase
|
|||
$this->flushSession();
|
||||
|
||||
Event::fake();
|
||||
$filter = Filter::fake();
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
$loginFailsCacheKey = sha1('login_fails_'.$ip);
|
||||
|
|
@ -114,6 +116,11 @@ class AuthControllerTest extends TestCase
|
|||
'data' => ['login_fails' => 1],
|
||||
]
|
||||
);
|
||||
$filter->assertApplied('client_ip', function ($value) use ($ip) {
|
||||
$this->assertEquals($ip, $value);
|
||||
|
||||
return true;
|
||||
});
|
||||
$this->assertTrue(Cache::has($loginFailsCacheKey));
|
||||
Event::assertDispatched('auth.login.attempt', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals($user->email, $payload[0]);
|
||||
|
|
@ -227,6 +234,7 @@ class AuthControllerTest extends TestCase
|
|||
public function testHandleRegister()
|
||||
{
|
||||
Event::fake();
|
||||
$filter = Filter::fake();
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
|
||||
|
|
@ -408,6 +416,11 @@ class AuthControllerTest extends TestCase
|
|||
'code' => 0,
|
||||
'message' => trans('auth.register.success'),
|
||||
]);
|
||||
$filter->assertApplied('client_ip', function ($value) use ($ip) {
|
||||
$this->assertEquals($ip, $value);
|
||||
|
||||
return true;
|
||||
});
|
||||
$this->assertTrue($newUser->verifyPassword('12345678'));
|
||||
$this->assertDatabaseHas('users', [
|
||||
'email' => 'a@b.c',
|
||||
|
|
@ -479,6 +492,7 @@ class AuthControllerTest extends TestCase
|
|||
{
|
||||
Event::fake();
|
||||
Mail::fake();
|
||||
$filter = Filter::fake();
|
||||
|
||||
// Should be forbidden if "forgot password" is closed
|
||||
config(['mail.driver' => '']);
|
||||
|
|
@ -504,6 +518,11 @@ class AuthControllerTest extends TestCase
|
|||
'code' => 2,
|
||||
'message' => trans('auth.forgot.frequent-mail'),
|
||||
]);
|
||||
$filter->assertApplied('client_ip', function ($value) use ($ip) {
|
||||
$this->assertEquals($ip, $value);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('auth.forgot.attempt', function ($event, $payload) {
|
||||
$this->assertEquals('nope@nope.net', $payload[0]);
|
||||
|
||||
|
|
@ -747,6 +766,7 @@ class AuthControllerTest extends TestCase
|
|||
public function testOAuthCallback()
|
||||
{
|
||||
Event::fake();
|
||||
$filter = Filter::fake();
|
||||
$whip = new Whip();
|
||||
$ip = $whip->getValidIpAddress();
|
||||
|
||||
|
|
@ -788,6 +808,11 @@ class AuthControllerTest extends TestCase
|
|||
->assertSee('Unsupported');
|
||||
|
||||
$this->get('/auth/login/github/callback')->assertRedirect('/user');
|
||||
$filter->assertApplied('client_ip', function ($value) use ($ip) {
|
||||
$this->assertEquals($ip, $value);
|
||||
|
||||
return true;
|
||||
});
|
||||
$this->assertDatabaseHas('users', [
|
||||
'email' => 'a@b.c',
|
||||
'nickname' => 'abc',
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user