invitationService->invite( $organisation, $request->validated('email'), $request->validated('role'), $request->user(), ); return $this->created( new InvitationResource($invitation->load(['organisation', 'invitedBy'])), 'Uitnodiging verstuurd', ); } public function show(string $token): JsonResponse { $hashedToken = hash('sha256', $token); $invitation = UserInvitation::where('token', $hashedToken) ->with(['organisation', 'invitedBy']) ->first(); if (! $invitation) { return $this->notFound('Uitnodiging niet gevonden'); } return $this->success(new InvitationResource($invitation)); } public function accept(AcceptInvitationRequest $request, string $token): JsonResponse { $hashedToken = hash('sha256', $token); $invitation = UserInvitation::where('token', $hashedToken)->firstOrFail(); $user = $this->invitationService->accept( $invitation, $request->validated('password'), ); $sanctumToken = $user->createToken('auth-token')->plainTextToken; $cookieName = $this->resolveCookieName($request); return $this->success([ 'user' => [ 'id' => $user->id, 'first_name' => $user->first_name, 'last_name' => $user->last_name, 'full_name' => $user->full_name, 'email' => $user->email, ], ], 'Uitnodiging geaccepteerd') ->withCookie($this->makeAuthCookie($cookieName, $sanctumToken)); } public function revoke(Organisation $organisation, UserInvitation $invitation): JsonResponse { // Verify invitation belongs to this organisation if ($invitation->organisation_id !== $organisation->id) { return $this->notFound('Uitnodiging niet gevonden'); } Gate::authorize('invite', $organisation); if (! $invitation->isPending()) { return $this->error('Alleen openstaande uitnodigingen kunnen worden ingetrokken.', 422); } $invitation->markAsExpired(); return response()->json(null, 204); } }