[Feature] Add Ookla Server List to API (#2213)

This commit is contained in:
Sven van Ginkel
2025-05-20 21:57:50 +02:00
committed by GitHub
parent bb5ef88df8
commit 8ebbfab599
3 changed files with 43 additions and 0 deletions
+2
View File
@@ -78,10 +78,12 @@ class ApiTokens extends Page implements HasForms, HasInfolists, HasTable
->options([
'results:read' => 'Read results',
'speedtests:run' => 'Run speedtest',
'ookla:list-servers' => 'List servers',
])
->descriptions([
'results:read' => 'Allow this token to read results.',
'speedtests:run' => 'Allow this token to run speedtests.',
'ookla:list-servers' => 'Allow this token to list server.',
])
->bulkToggleable(),
DateTimePicker::make('token_expires_at')
@@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Api\V1;
use App\Actions\GetOoklaSpeedtestServers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use OpenApi\Attributes as OA;
class ListSpeedtestServers extends ApiController
{
#[OA\Get(
path: '/api/v1/ookla/list-servers',
description: 'Get a list of available Ookla speedtest servers.',
responses: [
new OA\Response(response: Response::HTTP_OK, description: 'OK'),
new OA\Response(response: Response::HTTP_FORBIDDEN, description: 'Forbidden'),
]
)]
public function __invoke(Request $request)
{
if ($request->user()->tokenCant('ookla:list-servers')) {
return self::sendResponse(
data: null,
message: 'You do not have permission to view speedtest servers.',
code: Response::HTTP_FORBIDDEN,
);
}
$servers = GetOoklaSpeedtestServers::run();
return self::sendResponse(
data: $servers,
message: 'Speedtest servers fetched successfully.'
);
}
}
+4
View File
@@ -2,6 +2,7 @@
use App\Http\Controllers\Api\V1\LatestResult;
use App\Http\Controllers\Api\V1\ListResults;
use App\Http\Controllers\Api\V1\ListSpeedtestServers;
use App\Http\Controllers\Api\V1\RunSpeedtest;
use App\Http\Controllers\Api\V1\ShowResult;
use App\Http\Controllers\Api\V1\Stats;
@@ -20,6 +21,9 @@ Route::prefix('v1')->name('api.v1.')->group(function () {
Route::post('/speedtests/run', RunSpeedtest::class)
->name('speedtests.run');
Route::get('/ookla/list-servers', ListSpeedtestServers::class)
->name('ookla.list-servers');
Route::get('/stats', Stats::class)
->name('stats');
});