-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi_interceptor.dart
More file actions
98 lines (91 loc) · 3.3 KB
/
api_interceptor.dart
File metadata and controls
98 lines (91 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:piwigo_ng/app.dart';
import 'package:piwigo_ng/ui/core/ui/snackbars.dart';
import 'package:piwigo_ng/data/services/local/preferences_service.dart';
import 'package:piwigo_ng/utils/localizations.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ApiInterceptor extends Interceptor {
@override
void onRequest(
RequestOptions options,
RequestInterceptorHandler handler,
) async {
debugPrint("[${options.method}] ${options.queryParameters['method']}");
SharedPreferences prefs = await SharedPreferences.getInstance();
options.baseUrl = (prefs.getString(Preferences.serverUrlKey))!;
if (prefs.getBool(Preferences.enableBasicAuthKey) ?? false) {
String? username = prefs.getString(Preferences.basicUsernameKey) ?? '';
String? password = prefs.getString(Preferences.basicPasswordKey) ?? '';
String basicAuth = "Basic ${base64.encode(utf8.encode('$username:$password'))}";
options.headers['authorization'] = basicAuth;
}
return super.onRequest(options, handler);
}
@override
void onResponse(
Response response,
ResponseInterceptorHandler handler,
) async {
debugPrint("[${response.statusCode}] ${response.requestOptions.queryParameters['method']}");
return super.onResponse(response, handler);
}
@override
void onError(
DioException err,
ErrorInterceptorHandler handler,
) async {
debugPrint("[${err.response?.statusCode}] ${err.requestOptions.queryParameters['method']}");
debugPrint('${err.error}\n${err.response?.data}\n${err.stackTrace}');
switch (err.response?.statusCode) {
case 403:
App.scaffoldMessengerKey.currentState?.showSnackBar(
errorSnackBar(
message: appStrings.sessionStatusError_title,
icon: Icons.block,
),
);
break;
case null:
// Handle invalid SSL
if (err.error is HandshakeException) {
HandshakeException handshakeError = err.error as HandshakeException;
String? message = handshakeError.osError?.message;
if (message != null && message.contains('CERTIFICATE_VERIFY_FAILED')) {
App.scaffoldMessengerKey.currentState?.showSnackBar(
errorSnackBar(
message: appStrings.loginCertFailed_title,
icon: Icons.bookmark_outlined,
),
);
break;
}
}
// Handle invalid URL
if (err.error is SocketException) {
SocketException socketError = err.error as SocketException;
int? code = socketError.osError?.errorCode;
if (code == 7) {
App.scaffoldMessengerKey.currentState?.showSnackBar(
errorSnackBar(
message: appStrings.serverURLerror_title,
icon: Icons.public_off,
),
);
break;
}
}
// Unknown server error
App.scaffoldMessengerKey.currentState?.showSnackBar(
errorSnackBar(
message: appStrings.internetErrorGeneral_title,
icon: Icons.signal_wifi_connected_no_internet_4,
),
);
break;
}
return super.onError(err, handler);
}
}