dismiss greeter, better view counting
This commit is contained in:
@@ -17,6 +17,44 @@ class Controller extends BaseController
|
||||
ValidatesRequests::validateWithBag as validateWithBag_orig;
|
||||
}
|
||||
|
||||
const BOT_USER_AGENTS = [
|
||||
// generic
|
||||
'crawler',
|
||||
// cli / scripting
|
||||
'httpie',
|
||||
'curl',
|
||||
'wget',
|
||||
'lwp-request',
|
||||
'python-requests',
|
||||
'python-urllib',
|
||||
'libwww',
|
||||
'go-http-client',
|
||||
// commercial
|
||||
'googlebot',
|
||||
'google (+',
|
||||
'bingbot',
|
||||
'slurp',
|
||||
'duckduckbot',
|
||||
'baiduspider',
|
||||
'yandexbot',
|
||||
'sogou',
|
||||
'exabot',
|
||||
'facebot',
|
||||
'ia_archiver',
|
||||
'linkdexbot',
|
||||
'gigabot',
|
||||
'adsbot',
|
||||
// misc
|
||||
'gigablast',
|
||||
'phpcrawl',
|
||||
'mj12bot',
|
||||
'simplepie',
|
||||
'sitelockspider',
|
||||
'scoutjet',
|
||||
'grub.org',
|
||||
'mastodon', // mastodon fetching previews
|
||||
];
|
||||
|
||||
// Hacks to allow recursive nesting of validations in string and array format
|
||||
|
||||
public function makeValidator($data, $rules, $messages = array(), $customAttributes = array())
|
||||
|
||||
@@ -6,11 +6,20 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Table;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use MightyPork\Utils\Utils;
|
||||
|
||||
class DashController extends Controller
|
||||
{
|
||||
public function view()
|
||||
public function view(Request $request)
|
||||
{
|
||||
$dismiss = false;
|
||||
if ($request->has('dismiss-greeter')) {
|
||||
$dismiss = Utils::parseBool01($request->get('dismiss-greeter'));
|
||||
\Cookie::queue('dismiss-greeter', $dismiss);
|
||||
return back();
|
||||
}
|
||||
|
||||
$users = User::orderBy('updated_at', 'desc')
|
||||
->paginate(15, ['id', 'title', 'name'], 'pageu');
|
||||
|
||||
@@ -19,6 +28,8 @@ class DashController extends Controller
|
||||
->orderBy('visits', 'desc')
|
||||
->paginate(10, ['*'], 'paget');
|
||||
|
||||
return view('welcome', compact('users', 'tables'));
|
||||
$showGreeter = !$dismiss && !$request->cookie('dismiss-greeter', false);
|
||||
|
||||
return view('welcome', compact('users', 'tables', 'showGreeter'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,13 +34,7 @@ class TableController extends Controller
|
||||
$revision = $tableModel->revision;
|
||||
}
|
||||
|
||||
$cookieName = "view!$user->name!$table";
|
||||
if (!$request->cookie($cookieName, false)) {
|
||||
|
||||
$tableModel->countVisit();
|
||||
|
||||
\Cookie::queue($cookieName, true, 86400);
|
||||
}
|
||||
$this->countTableVisit($request, $tableModel);
|
||||
|
||||
return view('table.view', [
|
||||
'table' => $tableModel,
|
||||
@@ -191,4 +185,23 @@ class TableController extends Controller
|
||||
|
||||
return redirect(route('table.view', ['user' => $u, 'table' => $input->name]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check unique visit, filter bots / scripts, and increment visits count.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Table $table
|
||||
*/
|
||||
private function countTableVisit(Request $request, Table $table)
|
||||
{
|
||||
$cookieName = "view_$table->id";
|
||||
if (!$request->cookie($cookieName, false)) {
|
||||
$ua = $request->userAgent();
|
||||
// Filter out suspicious user agents
|
||||
if (! str_contains(strtolower($ua), Controller::BOT_USER_AGENTS)) {
|
||||
$table->countVisit();
|
||||
\Cookie::queue($cookieName, true, 24*60); // in minutes
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -28,13 +28,14 @@ class Kernel extends HttpKernel
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
'throttle:60,15', // try to prevent people refresh-spamming the server to game table visit counts
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'bindings',
|
||||
],
|
||||
|
||||
'api' => [
|
||||
|
||||
Reference in New Issue
Block a user