fetchUserRoles function

Future<UserRolesResponse> fetchUserRoles({
  1. required String accessToken,
  2. HttpClient? httpClient,
})

Fetch and store user roles.

Implementation

Future<UserRolesResponse> fetchUserRoles({
  required String accessToken,
  HttpClient? httpClient,
}) async {
  final config = getOauthConfig();
  final client = httpClient ?? HttpClient();
  try {
    final request = await client.getUrl(Uri.parse(config.rolesUrl));
    request.headers.set('Authorization', 'Bearer $accessToken');
    final response = await request.close().timeout(const Duration(seconds: 15));

    if (response.statusCode != 200) {
      throw Exception('Failed to fetch user roles: ${response.statusCode}');
    }

    final responseBody = await response.transform(utf8.decoder).join();
    return UserRolesResponse.fromJson(
      jsonDecode(responseBody) as Map<String, dynamic>,
    );
  } finally {
    if (httpClient == null) client.close();
  }
}