refreshToken method

Future refreshToken({
  1. dynamic inputConf,
  2. dynamic inputTokens,
})

Gets the refresh token

Implementation

Future refreshToken({inputConf, inputTokens}) async {
  final conf = inputConf ?? getConfiguration();

  if (conf == null) {
    throw 'Could not read configuration from storage';
  }

  final resource = conf['resource'];
  final realm = conf['realm'];
  final credentials = conf['credentials'];
  final authServerUrl = conf['auth-server-url'];

  final savedTokens = inputTokens ?? getTokens();

  if (savedTokens == null) {
    throw 'Error during kc-refresh-token, savedTokens is $savedTokens';
  }

  final refreshTokenUrl = '${getRealmURL(realm, authServerUrl)}/protocol/openid-connect/token';

  final dio = Dio();
  dio.options.headers[HttpHeaders.acceptHeader] = 'application/json';
  dio.options.headers[HttpHeaders.contentTypeHeader] = 'application/x-www-form-urlencoded';

  final response = await dio.post(
    refreshTokenUrl,
    data: {
      'grant_type': 'refresh_token',
      'refresh_token': savedTokens['refresh_token'],
      'client_id': Uri.encodeComponent(resource),
      'client_secret': credentials != null ? credentials['secret'] : null,
    },
  );
  final jsonResponse = await response.data;

  if (response.statusCode == 200) {
    saveTokens(jsonResponse);
    return jsonResponse;
  }

  throw 'Error during kc-refresh-token, '
      '${response.statusCode}: '
      '${response.data}';
}