12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import 'dart:io';
- import 'package:dio/dio.dart';
- import 'package:ente_auth/core/configuration.dart';
- import 'package:ente_auth/core/constants.dart';
- import 'package:fk_user_agent/fk_user_agent.dart';
- import 'package:flutter/foundation.dart';
- import 'package:package_info_plus/package_info_plus.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import 'package:uuid/uuid.dart';
- int kConnectTimeout = 15000;
- class Network {
- // apiEndpoint points to the Ente server's API endpoint
- static const apiEndpoint = String.fromEnvironment(
- "endpoint",
- defaultValue: kDefaultProductionEndpoint,
- );
- late Dio _dio;
- late Dio _enteDio;
- Future<void> init() async {
- await FkUserAgent.init();
- final packageInfo = await PackageInfo.fromPlatform();
- final preferences = await SharedPreferences.getInstance();
- _dio = Dio(
- BaseOptions(
- connectTimeout: kConnectTimeout,
- headers: {
- HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
- 'X-Client-Version': packageInfo.version,
- 'X-Client-Package': packageInfo.packageName,
- },
- ),
- );
- _dio.interceptors.add(RequestIdInterceptor());
- _enteDio = Dio(
- BaseOptions(
- baseUrl: apiEndpoint,
- connectTimeout: kConnectTimeout,
- headers: {
- HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
- 'X-Client-Version': packageInfo.version,
- 'X-Client-Package': packageInfo.packageName,
- },
- ),
- );
- _enteDio.interceptors.add(EnteRequestInterceptor(preferences, apiEndpoint));
- }
- Network._privateConstructor();
- static Network instance = Network._privateConstructor();
- Dio getDio() => _dio;
- Dio get enteDio => _enteDio;
- }
- class RequestIdInterceptor extends Interceptor {
- @override
- void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
- // ignore: prefer_const_constructors
- options.headers.putIfAbsent("x-request-id", () => Uuid().v4().toString());
- return super.onRequest(options, handler);
- }
- }
- class EnteRequestInterceptor extends Interceptor {
- final SharedPreferences _preferences;
- final String enteEndpoint;
- EnteRequestInterceptor(this._preferences, this.enteEndpoint);
- @override
- void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
- if (kDebugMode) {
- assert(
- options.baseUrl == enteEndpoint,
- "interceptor should only be used for API endpoint",
- );
- }
- // ignore: prefer_const_constructors
- options.headers.putIfAbsent("x-request-id", () => Uuid().v4().toString());
- final String? tokenValue = _preferences.getString(Configuration.tokenKey);
- if (tokenValue != null) {
- options.headers.putIfAbsent("X-Auth-Token", () => tokenValue);
- }
- return super.onRequest(options, handler);
- }
- }
|