Log all network requests

This commit is contained in:
Vishnu Mohandas 2020-11-19 23:52:30 +05:30
parent d840bec091
commit 34ffc9e5a1
12 changed files with 86 additions and 38 deletions

30
lib/core/network.dart Normal file
View file

@ -0,0 +1,30 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
import 'package:super_logging/super_logging.dart';
class Network {
final _dio = Dio();
Network._privateConstructor() {
_dio.interceptors.add(PrettyDioLogger(
requestHeader: false,
responseHeader: false,
responseBody: true,
logPrint: (object) {
log(object);
SuperLogging.logFile.writeAsStringSync(
object.toString() + "\n",
encoding: Utf8Codec(allowMalformed: true),
flush: true,
mode: FileMode.append,
);
}));
}
static Network instance = Network._privateConstructor();
Dio getDio() => _dio;
}

View file

@ -17,11 +17,9 @@ final _logger = Logger("main");
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SuperLogging.main(LogConfig(
body: _main,
logDirPath: (await getTemporaryDirectory()).path + "/logs",
enableInDebugMode: true,
));
SuperLogging.logDirPath = (await getTemporaryDirectory()).path + "/logs";
SuperLogging.enableInDebugMode = true;
await SuperLogging.main(_main);
}
void _main() async {

View file

@ -8,6 +8,7 @@ import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/collections_db.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/events/collection_updated_event.dart';
@ -24,6 +25,7 @@ class CollectionsService {
CollectionsDB _db;
FilesDB _filesDB;
Configuration _config;
final _dio = Network.instance.getDio();
final _localCollections = Map<String, Collection>();
final _collectionIDToCollections = Map<int, Collection>();
final _cachedKeys = Map<int, Uint8List>();
@ -79,7 +81,7 @@ class CollectionsService {
}
Future<List<User>> getSharees(int collectionID) {
return Dio()
return _dio
.get(
Configuration.instance.getHttpEndpoint() + "/collections/sharees",
queryParameters: {
@ -101,7 +103,7 @@ class CollectionsService {
Future<void> share(int collectionID, String email, String publicKey) {
final encryptedKey = CryptoUtil.sealSync(
getCollectionKey(collectionID), Sodium.base642bin(publicKey));
return Dio()
return _dio
.post(
Configuration.instance.getHttpEndpoint() + "/collections/share",
data: {
@ -116,7 +118,7 @@ class CollectionsService {
}
Future<void> unshare(int collectionID, String email) {
return Dio().post(
return _dio.post(
Configuration.instance.getHttpEndpoint() + "/collections/unshare",
data: {
"collectionID": collectionID,
@ -145,7 +147,7 @@ class CollectionsService {
}
Future<List<Collection>> _fetchCollections(int sinceTime) {
return Dio()
return _dio
.get(
Configuration.instance.getHttpEndpoint() + "/collections",
queryParameters: {
@ -228,7 +230,7 @@ class CollectionsService {
file.uploadedFileID, file.encryptedKey, file.keyDecryptionNonce)
.toMap());
}
return Dio()
return _dio
.post(
Configuration.instance.getHttpEndpoint() + "/collections/add-files",
data: params,
@ -251,7 +253,7 @@ class CollectionsService {
}
params["fileIDs"].add(file.uploadedFileID);
}
await Dio().post(
await _dio.post(
Configuration.instance.getHttpEndpoint() + "/collections/remove-files",
data: params,
options:
@ -263,7 +265,7 @@ class CollectionsService {
}
Future<Collection> createAndCacheCollection(Collection collection) async {
return Dio()
return _dio
.post(
Configuration.instance.getHttpEndpoint() + "/collections",
data: collection.toMap(),

View file

@ -3,6 +3,7 @@ import 'package:connectivity/connectivity.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/events/collection_updated_event.dart';
import 'package:photos/events/sync_status_update_event.dart';
@ -24,7 +25,7 @@ import 'package:photos/core/configuration.dart';
class SyncService {
final _logger = Logger("SyncService");
final _dio = Dio();
final _dio = Network.instance.getDio();
final _db = FilesDB.instance;
final _uploader = FileUploader.instance;
final _collectionsService = CollectionsService.instance;

View file

@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/public_keys_db.dart';
import 'package:photos/events/user_authenticated_event.dart';
@ -16,7 +17,7 @@ import 'package:photos/utils/dialog_util.dart';
import 'package:photos/utils/toast_util.dart';
class UserService {
final _dio = Dio();
final _dio = Network.instance.getDio();
final _logger = Logger("UserAuthenticator");
final _config = Configuration.instance;

View file

@ -1,10 +1,9 @@
import 'dart:developer';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/network.dart';
import 'package:photos/models/location.dart';
import 'package:photos/ui/loading_widget.dart';
import 'package:photos/ui/location_search_results_page.dart';
@ -41,15 +40,16 @@ class _LocationSearchWidgetState extends State<LocationSearchWidget> {
return null;
}
_searchString = pattern;
return Dio()
return Network.instance
.getDio()
.get(
Configuration.instance.getHttpEndpoint() + "/search/location",
queryParameters: {
"query": pattern,
},
options: Options(
headers: {"X-Auth-Token": Configuration.instance.getToken()}),
)
Configuration.instance.getHttpEndpoint() + "/search/location",
queryParameters: {
"query": pattern,
},
options: Options(
headers: {"X-Auth-Token": Configuration.instance.getToken()}),
)
.then((response) {
if (_searchString == pattern) {
// Query has not changed

View file

@ -2,7 +2,6 @@ import 'dart:io';
import 'package:archive/archive_io.dart';
import 'package:crisp/crisp.dart';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
@ -11,6 +10,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/ui/loading_widget.dart';
import 'package:photos/utils/dialog_util.dart';
@ -56,6 +56,7 @@ class UsageWidget extends StatefulWidget {
class UsageWidgetState extends State<UsageWidget> {
double _usageInGBs;
@override
void initState() {
_getUsage();
@ -135,7 +136,7 @@ class UsageWidgetState extends State<UsageWidget> {
}
void _getUsage() {
Dio().get(
Network.instance.getDio().get(
Configuration.instance.getHttpEndpoint() + "/billing/usage",
queryParameters: {
"startTime": 0,

View file

@ -5,6 +5,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/events/collection_updated_event.dart';
import 'package:photos/events/remote_sync_event.dart';
@ -14,7 +15,7 @@ import 'package:photos/utils/file_util.dart';
class DiffFetcher {
final _logger = Logger("FileDownloader");
final _dio = Dio();
final _dio = Network.instance.getDio();
Future<List<File>> getEncryptedFilesDiff(
int collectionID, int sinceTime, int limit) async {

View file

@ -8,6 +8,7 @@ import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/constants.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/models/file.dart';
import 'package:photos/models/location.dart';
@ -17,7 +18,7 @@ import 'package:photos/utils/crypto_util.dart';
class FileUploader {
final _logger = Logger("FileUploader");
final _dio = Dio();
final _dio = Network.instance.getDio();
final _queue = LinkedHashMap<int, FileUploadItem>();
final _maximumConcurrentUploads = 4;
int _currentlyUploading = 0;
@ -258,7 +259,7 @@ class FileUploader {
Future<void> _fetchUploadURLs() {
if (_uploadURLFetchInProgress == null) {
_uploadURLFetchInProgress = Dio()
_uploadURLFetchInProgress = _dio
.get(
Configuration.instance.getHttpEndpoint() + "/files/upload-urls",
queryParameters: {
@ -282,7 +283,7 @@ class FileUploader {
final fileSize = file.lengthSync().toString();
final startTime = DateTime.now().millisecondsSinceEpoch;
_logger.info("Putting file of size " + fileSize + " to " + uploadURL.url);
await Dio().put(uploadURL.url,
await _dio.put(uploadURL.url,
data: file.openRead(),
options: Options(headers: {
Headers.contentLengthHeader: await file.length(),

View file

@ -15,6 +15,7 @@ import 'package:photos/core/cache/video_cache_manager.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/constants.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/core/network.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/events/collection_updated_event.dart';
import 'package:photos/models/file.dart';
@ -188,12 +189,13 @@ Future<io.File> _downloadAndDecrypt(File file, BaseCacheManager cacheManager,
final encryptedFile = io.File(encryptedFilePath);
final decryptedFile = io.File(decryptedFilePath);
final startTime = DateTime.now().millisecondsSinceEpoch;
return Dio()
return Network.instance
.getDio()
.download(
file.getDownloadUrl(),
encryptedFilePath,
onReceiveProgress: progressCallback,
)
file.getDownloadUrl(),
encryptedFilePath,
onReceiveProgress: progressCallback,
)
.then((response) async {
if (response.statusCode != 200) {
logger.warning("Could not download file: ", response.toString());
@ -232,7 +234,10 @@ Future<io.File> _downloadAndDecryptThumbnail(File file) async {
final temporaryPath = Configuration.instance.getTempDirectory() +
file.generatedID.toString() +
"_thumbnail.decrypted";
return Dio().download(file.getThumbnailUrl(), temporaryPath).then((_) async {
return Network.instance
.getDio()
.download(file.getThumbnailUrl(), temporaryPath)
.then((_) async {
final encryptedFile = io.File(temporaryPath);
final thumbnailDecryptionKey = decryptFileKey(file);
final data = CryptoUtil.decryptChaCha(

View file

@ -499,6 +499,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
pretty_dio_logger:
dependency: "direct main"
description:
name: pretty_dio_logger
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
process:
dependency: transitive
description:
@ -650,7 +657,7 @@ packages:
name: super_logging
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.4"
version: "2.0.1"
synchronized:
dependency: transitive
description:

View file

@ -37,7 +37,7 @@ dependencies:
visibility_detector: ^0.1.5
event_bus: ^1.1.1
sentry: ">=3.0.0 <4.0.0"
super_logging: ^1.0.0
super_logging: ^2.0.1
archive: ^2.0.11
flutter_email_sender: ^3.0.1
like_button: ^0.2.0
@ -61,6 +61,7 @@ dependencies:
convex_bottom_bar: ^2.6.0
scrollable_positioned_list: ^0.1.8
connectivity: ^2.0.1
pretty_dio_logger: ^1.1.1
dev_dependencies:
flutter_test: