Skip to content

Commit e02bbc2

Browse files
committed
Add ValidateWebAppData middleware
1 parent 2f8eee4 commit e02bbc2

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace Nutgram\Laravel\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use SergiX44\Nutgram\Exception\InvalidDataException;
8+
use SergiX44\Nutgram\Nutgram;
9+
10+
class ValidateWebAppData
11+
{
12+
public function handle(Request $request, Closure $next)
13+
{
14+
try {
15+
$initData = $request->input('initData', '');
16+
$data = app(Nutgram::class)->validateWebAppData($initData);
17+
18+
$request->attributes->add(['webapp' => $data]);
19+
return $next($request);
20+
} catch (InvalidDataException) {
21+
abort(403);
22+
}
23+
}
24+
}

tests/Feature/MiddlewareTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
use Illuminate\Http\Request;
4+
use Nutgram\Laravel\Middleware\ValidateWebAppData;
5+
use SergiX44\Nutgram\Nutgram;
6+
use SergiX44\Nutgram\Telegram\Web\WebAppData;
7+
use SergiX44\Nutgram\Testing\FakeNutgram;
8+
use Symfony\Component\HttpKernel\Exception\HttpException;
9+
10+
beforeEach(function () {
11+
$this->request = new Request();
12+
});
13+
14+
it('validates web app data', function () {
15+
/** @var FakeNutgram $bot */
16+
$bot = app(Nutgram::class);
17+
18+
$this->request->merge([
19+
'initData' => $bot->generateWebAppData([
20+
'foo' => 'bar',
21+
'auth_date' => time(),
22+
])
23+
]);
24+
25+
$middleware = new ValidateWebAppData();
26+
$middleware->handle($this->request, function ($request) {
27+
expect($request->get('webapp'))->toBeInstanceOf(WebAppData::class);
28+
});
29+
});
30+
31+
it('fails to validate web app data', function () {
32+
$middleware = new ValidateWebAppData();
33+
$middleware->handle($this->request, function ($request) {
34+
});
35+
})->throws(HttpException::class);

0 commit comments

Comments
 (0)