From 8dd47171ef4137447a62379211a648acb8df7d46 Mon Sep 17 00:00:00 2001 From: Rivers <{ID}+{username}@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:20:45 -0400 Subject: [PATCH] store refresh and expires --- lib/services/backend_service.dart | 50 ++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart index 00d2b8b..d110c59 100644 --- a/lib/services/backend_service.dart +++ b/lib/services/backend_service.dart @@ -49,13 +49,27 @@ class BackendService { } } + Future deleteJob(String jobId) async { + final url = '$backendUrl/jobs/$jobId'; + final response = await http.delete( + Uri.parse(url), + headers: await _getAuthHeaders(), + ); + + if (response.statusCode != 204) { + throw Exception('Failed to delete job: ${response.statusCode}'); + } + } + Future> processJob(String jobId) async { final url = '$backendUrl/process_job/$jobId'; try { + final headers = await _getAuthHeaders(); final response = await http .post( Uri.parse(url), - headers: await _getAuthHeaders(), + headers: headers, + body: json.encode(await _getRequestBody()), ) .timeout(const Duration(minutes: 5)); @@ -87,30 +101,38 @@ class BackendService { } } - Future deleteJob(String jobId) async { - final url = '$backendUrl/jobs/$jobId'; - final response = await http.delete( - Uri.parse(url), - headers: await _getAuthHeaders(), - ); + Future> _getAuthHeaders() async { + final spotifyService = getIt(); - if (response.statusCode != 204) { - throw Exception('Failed to delete job: ${response.statusCode}'); + final credentials = await spotifyService.retrieveCredentials(); + + if (credentials == null) { + throw Exception("Failed to retrieve Spotify credentials"); } + + // Send only the authorization header here + return { + 'Authorization': 'Bearer ${credentials.accessToken}', + 'Content-Type': 'application/json', + }; } - Future> _getAuthHeaders() async { + Future> _getRequestBody() async { final spotifyService = getIt(); - final credentials = await spotifyService - .retrieveCredentials(); // This method already handles refreshing the token + final credentials = await spotifyService.retrieveCredentials(); + if (credentials == null) { throw Exception("Failed to retrieve Spotify credentials"); } + final expirationString = + (credentials.expiration?.millisecondsSinceEpoch ?? 0) ~/ 1000; + + // Send refresh token and expiration in the body return { - 'Authorization': 'Bearer ${credentials.accessToken}', - 'Content-Type': 'application/json', + 'refresh_token': credentials.refreshToken ?? '', + 'expires_at': expirationString, }; } }