feat: deauthorize strava

This commit is contained in:
2026-05-21 20:47:10 +02:00
parent 2f33919f8b
commit eda0ffd199
5 changed files with 131 additions and 3 deletions
+32 -3
View File
@@ -8,6 +8,8 @@ use App\Http\Requests\StravaSyncRequest;
use App\Models\StravaConnection;
use App\Models\WorkoutSessions;
use App\Services\StravaClient;
use Illuminate\Http\Client\ConnectionException;
use Illuminate\Http\Client\RequestException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -86,20 +88,47 @@ class StravaController extends Controller
public function status(Request $request): JsonResponse
{
$connection = $request->user()->stravaConnection;
$scopes = $connection?->scopes ?? [];
return response()->json([
'data' => [
'connected' => $connection !== null,
'athleteId' => $connection?->athlete_id,
'scopes' => $connection?->scopes ?? [],
'canReadActivities' => $connection !== null && $this->canReadActivities($scopes),
'requestedScopes' => $this->normalizeScopes(config('services.strava.scope', 'read,activity:read')),
'scopes' => $scopes,
'expiresAt' => $connection?->expires_at,
],
]);
}
public function disconnect(Request $request): Response
public function disconnect(Request $request, StravaClient $strava): Response|JsonResponse
{
$request->user()->stravaConnection()->delete();
$connection = $request->user()->stravaConnection;
if (! $connection) {
return response()->noContent();
}
try {
$strava->deauthorize($connection);
} catch (RequestException $exception) {
if ($exception->response->status() !== 401) {
report($exception);
return response()->json([
'message' => __('api.strava.disconnect_failed'),
], 502);
}
} catch (ConnectionException $exception) {
report($exception);
return response()->json([
'message' => __('api.strava.disconnect_failed'),
], 502);
}
$connection->delete();
return response()->noContent();
}