Skip to content

Commit da19b64

Browse files
authored
Feature/api create license 2 (#190)
* feat: implement an api endpoint to create a new license * fix: format code * feat: simplify api key
1 parent b53460b commit da19b64

File tree

11 files changed

+56
-223
lines changed

11 files changed

+56
-223
lines changed

.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,5 @@ ANYSTACK_FOREVER_POLICY_ID=
8585
ANYSTACK_TRIAL_POLICY_ID=
8686

8787
FILAMENT_USERS=
88+
89+
BIFROST_API_KEY=your-secure-api-key-here

app/Filament/Resources/PersonalAccessTokenResource.php

Lines changed: 0 additions & 111 deletions
This file was deleted.

app/Filament/Resources/PersonalAccessTokenResource/Pages/CreatePersonalAccessToken.php

Lines changed: 0 additions & 61 deletions
This file was deleted.

app/Filament/Resources/PersonalAccessTokenResource/Pages/EditPersonalAccessToken.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

app/Filament/Resources/PersonalAccessTokenResource/Pages/ListPersonalAccessTokens.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

app/Http/Kernel.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class Kernel extends HttpKernel
5454
*/
5555
protected $middlewareAliases = [
5656
'auth' => \App\Http\Middleware\Authenticate::class,
57+
'auth.api_key' => \App\Http\Middleware\AuthenticateApiKey::class,
5758
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
5859
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
5960
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use Symfony\Component\HttpFoundation\Response;
8+
9+
class AuthenticateApiKey
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
15+
*/
16+
public function handle(Request $request, Closure $next): Response
17+
{
18+
$apiKey = config('services.bifrost.api_key');
19+
20+
if (! $apiKey) {
21+
return response()->json(['message' => 'API key not configured'], 500);
22+
}
23+
24+
$authHeader = $request->header('Authorization');
25+
26+
if (! $authHeader || ! str_starts_with($authHeader, 'Bearer ')) {
27+
return response()->json(['message' => 'Unauthorized'], 401);
28+
}
29+
30+
$providedKey = substr($authHeader, 7); // Remove 'Bearer ' prefix
31+
32+
if (! hash_equals($apiKey, $providedKey)) {
33+
return response()->json(['message' => 'Unauthorized'], 401);
34+
}
35+
36+
return $next($request);
37+
}
38+
}

config/services.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@
3434
'anystack' => [
3535
'key' => env('ANYSTACK_API_KEY'),
3636
],
37+
38+
'bifrost' => [
39+
'api_key' => env('BIFROST_API_KEY'),
40+
],
3741
];

phpunit.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,6 @@
4444
<env name="ANYSTACK_MINI_POLICY_ID" value="pol_mini"/>
4545
<env name="ANYSTACK_PRO_POLICY_ID" value="pol_pro"/>
4646
<env name="ANYSTACK_MAX_POLICY_ID" value="pol_max"/>
47+
<env name="BIFROST_API_KEY" value="fake_key"/>
4748
</php>
4849
</phpunit>

routes/api.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
|
1616
*/
1717

18+
Route::middleware('auth.api_key')->group(function () {
19+
Route::post('/licenses', [LicenseController::class, 'store']);
20+
});
21+
1822
Route::middleware('auth:sanctum')->group(function () {
1923
Route::get('/user', fn (Request $request) => $request->user());
20-
Route::post('/licenses', [LicenseController::class, 'store']);
2124
});

0 commit comments

Comments
 (0)