-
-
Notifications
You must be signed in to change notification settings - Fork 68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
interceptRequest method #138
Comments
Yes it is possible. You can use the example to guide your interceptor for that. The basic idea is that you take the body, and add whatever you want to it and then return it within the request |
I'll show you an example. What I want to do is create a request interceptor which is responsible for encrypting the body of my application's requests and then decrypting it when the data is received in the response.
class EncryptDataInterceptor extends InterceptorContract {
EncryptDataInterceptor(this.local, this.user);
final Logger log = Logger();
final PublicKeyLocalDataSource local;
final AuthLocalDataSource user;
final isEncrypt = bool.tryParse('${GlobalParams.IS_ENCRYPT_VALUE}');
@override
Future<BaseRequest> interceptRequest({required BaseRequest request}) async {
final headers = Map<String, String>.from(request.headers);
headers[HttpHeaders.contentTypeHeader] = 'application/json';
// When I want to encrypt my data
if (isEncrypt != null && isEncrypt! == true) {
final currentUser = await user.read();
final publicKeyValue = await local.read();
headers['isEncrypte'] = 'true';
//////
// 1 - I want to encrypt the body of my request using AES
// 2 - I'm having a problem because I can't access the body
// 3 - I get this error when I try to access the body ``The getter 'body' : sn't defined for the type 'BaseRequest```''
// 4 - Where else can I get the body of my request in the interceptor?
log.i(
"Ex : ${request.body} The getter 'body' : sn't defined for the type 'BaseRequest'.",
);
//////
if (currentUser?.sessionUser != null) {
headers['sessionUser'] = currentUser!.sessionUser!;
}
final aes = EncryptData.encryptAES(request.body as String);
}
return request.copyWith(
headers: headers,
body: aes,
);
}
@override
Future<BaseResponse> interceptResponse({
required BaseResponse response,
}) async {
if (response is Response) {
if (isEncrypt != null && isEncrypt! == true) {
//////
// 1 - I decrypt the answer using AES
//////
final body = json.encode(utf8.decode(response.bodyBytes));
if ((body as Map).containsKey('item')) {
response.copyWith(body: json.encode(EncryptData.decryptAES(body)));
}
}
}
return response;
}
} |
@Tary-nan You have to cast the Example: @override
Future<BaseRequest> interceptRequest({required BaseRequest request}) async {
if(request is StreamedRequest){
request.body
}
// ... other cases
}
|
Is it possible to retrieve the request body in the interceptRequest method with version 2.0.0-beta.7 ?
The text was updated successfully, but these errors were encountered: