ente/lib/core/network.dart

83 lines
2.4 KiB
Dart
Raw Normal View History

2020-11-19 18:22:30 +00:00
import 'dart:io';
2020-11-19 18:22:30 +00:00
import 'package:dio/dio.dart';
import 'package:fk_user_agent/fk_user_agent.dart';
import 'package:flutter/foundation.dart';
2021-05-16 08:56:20 +00:00
import 'package:package_info_plus/package_info_plus.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/constants.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uuid/uuid.dart';
2020-11-19 18:22:30 +00:00
2021-09-28 07:11:44 +00:00
int kConnectTimeout = 15000;
2020-11-19 18:22:30 +00:00
class Network {
// apiEndpoint points to the Ente server's API endpoint
static const apiEndpoint = String.fromEnvironment(
"endpoint",
defaultValue: kDefaultProductionEndpoint,
);
2022-09-21 12:07:09 +00:00
late Dio _dio;
late Dio _enteDio;
2021-10-08 11:21:01 +00:00
2021-04-04 17:19:46 +00:00
Future<void> init() async {
await FkUserAgent.init();
final packageInfo = await PackageInfo.fromPlatform();
final preferences = await SharedPreferences.getInstance();
2022-06-11 08:23:52 +00:00
_dio = Dio(
BaseOptions(
connectTimeout: kConnectTimeout,
headers: {
HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
'X-Client-Version': packageInfo.version,
'X-Client-Package': packageInfo.packageName,
},
),
);
_enteDio = Dio(
BaseOptions(
baseUrl: apiEndpoint,
connectTimeout: kConnectTimeout,
headers: {
HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
'X-Client-Version': packageInfo.version,
'X-Client-Package': packageInfo.packageName,
},
),
);
2022-10-14 15:47:40 +00:00
_enteDio.interceptors.add(EnteRequestInterceptor(preferences));
2020-11-19 18:22:30 +00:00
}
2021-04-04 17:19:46 +00:00
Network._privateConstructor();
2021-07-12 11:15:58 +00:00
2020-11-19 18:22:30 +00:00
static Network instance = Network._privateConstructor();
Dio getDio() => _dio;
Dio get enteDio => _enteDio;
2020-11-19 18:22:30 +00:00
}
class EnteRequestInterceptor extends Interceptor {
2022-10-14 09:45:00 +00:00
final SharedPreferences _preferences;
2022-10-14 09:45:00 +00:00
EnteRequestInterceptor(this._preferences);
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
if (kDebugMode) {
2022-11-06 08:22:54 +00:00
assert(
options.baseUrl == Network.apiEndpoint,
"interceptor should only be used for API endpoint",
);
}
2022-07-04 06:02:17 +00:00
// ignore: prefer_const_constructors
options.headers.putIfAbsent("x-request-id", () => Uuid().v4().toString());
2022-10-14 09:45:00 +00:00
final String? tokenValue = _preferences.getString(Configuration.tokenKey);
if (tokenValue != null) {
options.headers.putIfAbsent("X-Auth-Token", () => tokenValue);
}
return super.onRequest(options, handler);
}
}