mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-09 22:57:21 +00:00
86 lines
2.9 KiB
Dart
86 lines
2.9 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:dio/dio.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
import 'package:syncrow_web/pages/auth/model/token.dart';
|
|
import 'package:syncrow_web/services/api/network_exception.dart';
|
|
import 'dart:async';
|
|
import 'package:syncrow_web/utils/constants/api_const.dart';
|
|
import 'package:syncrow_web/utils/snack_bar.dart';
|
|
|
|
class HTTPInterceptor extends InterceptorsWrapper {
|
|
List<String> headerExclusionList = [];
|
|
|
|
List<String> headerExclusionListOfAddedParameters = [
|
|
ApiEndpoints.login,
|
|
ApiEndpoints.getRegion,
|
|
ApiEndpoints.sendOtp
|
|
];
|
|
|
|
@override
|
|
void onResponse(Response response, ResponseInterceptorHandler handler) async {
|
|
if (await validateResponse(response)) {
|
|
super.onResponse(response, handler);
|
|
} else {
|
|
handler.reject(DioException(
|
|
requestOptions: response.requestOptions, response: response));
|
|
}
|
|
}
|
|
|
|
@override
|
|
void onRequest(
|
|
RequestOptions options, RequestInterceptorHandler handler) async {
|
|
var storage = const FlutterSecureStorage();
|
|
var token = await storage.read(key: Token.loginAccessTokenKey);
|
|
if (checkHeaderExclusionListOfAddedParameters(options.path)) {
|
|
options.headers
|
|
.putIfAbsent(HttpHeaders.authorizationHeader, () => "Bearer $token");
|
|
}
|
|
// options.headers['Authorization'] = 'Bearer ${'${token!}123'}';
|
|
super.onRequest(options, handler);
|
|
}
|
|
|
|
@override
|
|
void onError(DioException err, ErrorInterceptorHandler handler) async {
|
|
ServerFailure failure = ServerFailure.fromDioError(err);
|
|
if (failure.toString().isNotEmpty) {
|
|
CustomSnackBar.displaySnackBar(failure.toString());
|
|
}
|
|
var storage = const FlutterSecureStorage();
|
|
var token = await storage.read(key: Token.loginAccessTokenKey);
|
|
if (err.response?.statusCode == 401 && token != null) {
|
|
// await AuthCubit.get(NavigationService.navigatorKey.currentContext!).logout();
|
|
}
|
|
super.onError(err, handler);
|
|
}
|
|
|
|
/// Validates the response and returns true if it is successful (status code 2xx).
|
|
Future<bool> validateResponse(Response response) async {
|
|
if (response.statusCode != null) {
|
|
if (response.statusCode! >= 200 && response.statusCode! < 300) {
|
|
// If the response status code is within the successful range (2xx),
|
|
// return true indicating a successful response.
|
|
return true;
|
|
} else {
|
|
// If the response status code is not within the successful range (2xx),
|
|
// return false indicating an unsuccessful response.
|
|
return false;
|
|
}
|
|
} else {
|
|
// If the response status code is null, return false indicating an unsuccessful response.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
checkHeaderExclusionListOfAddedParameters(String path) {
|
|
bool shouldAddHeader = true;
|
|
|
|
for (var urlConstant in headerExclusionListOfAddedParameters) {
|
|
if (path.contains(urlConstant)) {
|
|
shouldAddHeader = false;
|
|
}
|
|
}
|
|
return shouldAddHeader;
|
|
}
|
|
}
|