From 19b45ac14230682d89b853983c0d17a2d1d847e5 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Mon, 24 Oct 2022 13:47:47 +0400 Subject: [PATCH] fix(server-api): Adapt ApiResponse structure to GraphQL format --- .../graphql_maps/server_api/server.dart | 78 +++++++++++++++++-- lib/logic/cubit/devices/devices_cubit.dart | 10 +-- .../recovery_key/recovery_key_cubit.dart | 6 +- .../server_installation_repository.dart | 14 ++-- .../models/json/recovery_token_status.dart | 11 +++ 5 files changed, 96 insertions(+), 23 deletions(-) diff --git a/lib/logic/api_maps/graphql_maps/server_api/server.dart b/lib/logic/api_maps/graphql_maps/server_api/server.dart index 3f903168..686e3e29 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server.dart @@ -49,15 +49,13 @@ class GenericJobMutationReturn extends GenericMutationResult { class ApiResponse { ApiResponse({ - required this.statusCode, + required this.success, required this.data, - this.errorMessage, + this.message, }); - final int statusCode; - final String? errorMessage; + final bool success; + final String? message; final D data; - - bool get isSuccess => statusCode >= 200 && statusCode < 300; } class ServerApi extends ApiMap @@ -214,12 +212,76 @@ class ServerApi extends ApiMap return settings; } - Future> getRecoveryTokenStatus() async {} + Future> getRecoveryTokenStatus() async { + RecoveryKeyStatus? key; + QueryResult response; + String? error; + + try { + final GraphQLClient client = await getClient(); + response = await client.query$RecoveryKey(); + if (response.hasException) { + print(response.exception.toString()); + error = response.exception.toString(); + } + key = RecoveryKeyStatus.fromGraphQL(response.parsedData!.api.recoveryKey); + } catch (e) { + print(e); + } + + return ApiResponse( + success: error == null, + data: key, + message: error, + ); + } Future> generateRecoveryToken( final DateTime? expirationDate, final int? numberOfUses, - ) async {} + ) async { + ApiResponse key; + QueryResult response; + + try { + final GraphQLClient client = await getClient(); + + final input = Input$RecoveryKeyLimitsInput( + expirationDate: expirationDate, + uses: numberOfUses, + ); + final variables = Variables$Mutation$GetNewRecoveryApiKey( + limits: input, + ); + final mutation = Options$Mutation$GetNewRecoveryApiKey( + variables: variables, + ); + response = await client.mutate$GetNewRecoveryApiKey( + mutation, + ); + if (response.hasException) { + print(response.exception.toString()); + key = ApiResponse( + success: false, + data: '', + message: response.exception.toString(), + ); + } + key = ApiResponse( + success: true, + data: response.parsedData!.getNewRecoveryApiKey.key!, + ); + } catch (e) { + print(e); + key = ApiResponse( + success: false, + data: '', + message: e.toString(), + ); + } + + return key; + } Future getDkim() async {} diff --git a/lib/logic/cubit/devices/devices_cubit.dart b/lib/logic/cubit/devices/devices_cubit.dart index 1ab4ff11..3c552c23 100644 --- a/lib/logic/cubit/devices/devices_cubit.dart +++ b/lib/logic/cubit/devices/devices_cubit.dart @@ -36,7 +36,7 @@ class ApiDevicesCubit Future?> _getApiTokens() async { final ApiResponse> response = await api.getApiTokens(); - if (response.isSuccess) { + if (response.success) { return response.data; } else { return null; @@ -45,7 +45,7 @@ class ApiDevicesCubit Future deleteDevice(final ApiToken device) async { final ApiResponse response = await api.deleteApiToken(device.name); - if (response.isSuccess) { + if (response.success) { emit( ApiDevicesState( state.devices.where((final d) => d.name != device.name).toList(), @@ -54,17 +54,17 @@ class ApiDevicesCubit ); } else { getIt() - .showSnackBar(response.errorMessage ?? 'Error deleting device'); + .showSnackBar(response.message ?? 'Error deleting device'); } } Future getNewDeviceKey() async { final ApiResponse response = await api.createDeviceToken(); - if (response.isSuccess) { + if (response.success) { return response.data; } else { getIt().showSnackBar( - response.errorMessage ?? 'Error getting new device key', + response.message ?? 'Error getting new device key', ); return null; } diff --git a/lib/logic/cubit/recovery_key/recovery_key_cubit.dart b/lib/logic/cubit/recovery_key/recovery_key_cubit.dart index d20bb3c5..90f5330d 100644 --- a/lib/logic/cubit/recovery_key/recovery_key_cubit.dart +++ b/lib/logic/cubit/recovery_key/recovery_key_cubit.dart @@ -34,7 +34,7 @@ class RecoveryKeyCubit Future _getRecoveryKeyStatus() async { final ApiResponse response = await api.getRecoveryTokenStatus(); - if (response.isSuccess) { + if (response.success) { return response.data; } else { return null; @@ -59,11 +59,11 @@ class RecoveryKeyCubit }) async { final ApiResponse response = await api.generateRecoveryToken(expirationDate, numberOfUses); - if (response.isSuccess) { + if (response.success) { refresh(); return response.data; } else { - throw GenerationError(response.errorMessage ?? 'Unknown error'); + throw GenerationError(response.message ?? 'Unknown error'); } } diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 93763ffd..2c08dda1 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -498,7 +498,7 @@ class ServerInstallationRepository { DeviceToken(device: await getDeviceName(), token: newDeviceKey), ); - if (apiResponse.isSuccess) { + if (apiResponse.success) { return ServerHostingDetails( apiToken: apiResponse.data, volume: ServerVolume( @@ -517,7 +517,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.errorMessage ?? apiResponse.data, + apiResponse.message ?? apiResponse.data, ); } @@ -535,7 +535,7 @@ class ServerInstallationRepository { DeviceToken(device: await getDeviceName(), token: recoveryKey), ); - if (apiResponse.isSuccess) { + if (apiResponse.success) { return ServerHostingDetails( apiToken: apiResponse.data, volume: ServerVolume( @@ -554,7 +554,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.errorMessage ?? apiResponse.data, + apiResponse.message ?? apiResponse.data, ); } @@ -600,7 +600,7 @@ class ServerInstallationRepository { DeviceToken(device: await getDeviceName(), token: deviceAuthKey.data), ); - if (apiResponse.isSuccess) { + if (apiResponse.success) { return ServerHostingDetails( apiToken: apiResponse.data, volume: ServerVolume( @@ -619,7 +619,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.errorMessage ?? apiResponse.data, + apiResponse.message ?? apiResponse.data, ); } @@ -636,7 +636,7 @@ class ServerInstallationRepository { final String? serverApiVersion = await serverApi.getApiVersion(); final ApiResponse> users = await serverApi.getUsersList(withMainUser: true); - if (serverApiVersion == null || !users.isSuccess) { + if (serverApiVersion == null || !users.success) { return fallbackUser; } try { diff --git a/lib/logic/models/json/recovery_token_status.dart b/lib/logic/models/json/recovery_token_status.dart index 6e59b57d..b56ae4e6 100644 --- a/lib/logic/models/json/recovery_token_status.dart +++ b/lib/logic/models/json/recovery_token_status.dart @@ -1,5 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:json_annotation/json_annotation.dart'; +import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/server_api.graphql.dart'; part 'recovery_token_status.g.dart'; @@ -15,6 +16,16 @@ class RecoveryKeyStatus extends Equatable { this.usesLeft, }); + RecoveryKeyStatus.fromGraphQL( + final Query$RecoveryKey$api$recoveryKey recoveryKey, + ) : this( + exists: recoveryKey.exists, + date: recoveryKey.creationDate, + expiration: recoveryKey.expirationDate, + usesLeft: recoveryKey.usesLeft, + valid: recoveryKey.valid, + ); + final bool exists; final DateTime? date; final DateTime? expiration;