Initial commit: OAuth IAM Laravel application

Laravel-based OAuth/IAM service with Passport, Vue 3 frontend, and
Docker Compose setup for local and production deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 01:02:41 +02:00
commit c2b5291a74
174 changed files with 29318 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers\OAuth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Laravel\Passport\Passport;
use Laravel\Passport\Token;
class PersonalAccessTokenController extends Controller
{
public function index(Request $request)
{
return response()->json(
$request->user()->tokens()
->where('revoked', false)
->whereHas('client', fn ($q) => $q->whereJsonContains('grant_types', 'personal_access'))
->orderByDesc('created_at')
->get(['id', 'name', 'scopes', 'created_at', 'expires_at'])
);
}
public function store(Request $request)
{
$data = $request->validate([
'name' => ['required', 'string', 'max:255'],
'scopes' => ['array'],
'scopes.*' => [Rule::in(Passport::scopeIds())],
]);
$result = $request->user()->createToken($data['name'], $data['scopes'] ?? []);
return response()->json([
'access_token' => $result->accessToken,
'token' => $result->token,
], 201);
}
public function destroy(Request $request, string $tokenId)
{
/** @var Token|null $token */
$token = $request->user()->tokens()->where('id', $tokenId)->first();
abort_unless($token, 404);
$token->revoke();
return response()->noContent();
}
}