Skip to content

Commit 8ebbfab

Browse files
authored
[Feature] Add Ookla Server List to API (alexjustesen#2213)
1 parent bb5ef88 commit 8ebbfab

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

app/Filament/Pages/ApiTokens.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,12 @@ public function table(Table $table): Table
7878
->options([
7979
'results:read' => 'Read results',
8080
'speedtests:run' => 'Run speedtest',
81+
'ookla:list-servers' => 'List servers',
8182
])
8283
->descriptions([
8384
'results:read' => 'Allow this token to read results.',
8485
'speedtests:run' => 'Allow this token to run speedtests.',
86+
'ookla:list-servers' => 'Allow this token to list server.',
8587
])
8688
->bulkToggleable(),
8789
DateTimePicker::make('token_expires_at')
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api\V1;
4+
5+
use App\Actions\GetOoklaSpeedtestServers;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Http\Response;
8+
use OpenApi\Attributes as OA;
9+
10+
class ListSpeedtestServers extends ApiController
11+
{
12+
#[OA\Get(
13+
path: '/api/v1/ookla/list-servers',
14+
description: 'Get a list of available Ookla speedtest servers.',
15+
responses: [
16+
new OA\Response(response: Response::HTTP_OK, description: 'OK'),
17+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: 'Forbidden'),
18+
]
19+
)]
20+
public function __invoke(Request $request)
21+
{
22+
if ($request->user()->tokenCant('ookla:list-servers')) {
23+
return self::sendResponse(
24+
data: null,
25+
message: 'You do not have permission to view speedtest servers.',
26+
code: Response::HTTP_FORBIDDEN,
27+
);
28+
}
29+
30+
$servers = GetOoklaSpeedtestServers::run();
31+
32+
return self::sendResponse(
33+
data: $servers,
34+
message: 'Speedtest servers fetched successfully.'
35+
);
36+
}
37+
}

routes/api/v1/routes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use App\Http\Controllers\Api\V1\LatestResult;
44
use App\Http\Controllers\Api\V1\ListResults;
5+
use App\Http\Controllers\Api\V1\ListSpeedtestServers;
56
use App\Http\Controllers\Api\V1\RunSpeedtest;
67
use App\Http\Controllers\Api\V1\ShowResult;
78
use App\Http\Controllers\Api\V1\Stats;
@@ -20,6 +21,9 @@
2021
Route::post('/speedtests/run', RunSpeedtest::class)
2122
->name('speedtests.run');
2223

24+
Route::get('/ookla/list-servers', ListSpeedtestServers::class)
25+
->name('ookla.list-servers');
26+
2327
Route::get('/stats', Stats::class)
2428
->name('stats');
2529
});

0 commit comments

Comments
 (0)