feat: deauthorize strava
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,20 @@ class StravaClient
|
||||
return $connection->refresh();
|
||||
}
|
||||
|
||||
public function deauthorize(StravaConnection $connection): void
|
||||
{
|
||||
$accessToken = $this->accessToken($connection);
|
||||
|
||||
Http::baseUrl('https://www.strava.com')
|
||||
->timeout(10)
|
||||
->connectTimeout(3)
|
||||
->retry([100, 500, 1000])
|
||||
->post('/oauth/deauthorize?'.http_build_query([
|
||||
'access_token' => $accessToken,
|
||||
], '', '&', PHP_QUERY_RFC3986))
|
||||
->throw();
|
||||
}
|
||||
|
||||
public function activities(StravaConnection $connection, int $page, int $perPage): array
|
||||
{
|
||||
return Http::baseUrl('https://www.strava.com/api/v3')
|
||||
|
||||
Reference in New Issue
Block a user