diff --git a/lib/logic/api_maps/rest_maps/backblaze.dart b/lib/logic/api_maps/rest_maps/backblaze.dart index 5140311d..95ced573 100644 --- a/lib/logic/api_maps/rest_maps/backblaze.dart +++ b/lib/logic/api_maps/rest_maps/backblaze.dart @@ -2,9 +2,12 @@ import 'dart:io'; import 'package:dio/dio.dart'; import 'package:selfprivacy/config/get_it_config.dart'; +import 'package:selfprivacy/logic/api_maps/api_generic_result.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/api_map.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart'; +export 'package:selfprivacy/logic/api_maps/api_generic_result.dart'; + class BackblazeApiAuth { BackblazeApiAuth({required this.authorizationToken, required this.apiUrl}); @@ -71,28 +74,46 @@ class BackblazeApi extends ApiMap { ); } - Future isValid(final String encodedApiKey) async { + Future> isApiTokenValid( + final String encodedApiKey, + ) async { final Dio client = await getClient(); + bool isTokenValid = false; try { final Response response = await client.get( 'b2_authorize_account', - options: Options(headers: {'Authorization': 'Basic $encodedApiKey'}), + options: Options( + followRedirects: false, + validateStatus: (final status) => + status != null && (status >= 200 || status == 401), + headers: {'Authorization': 'Basic $encodedApiKey'}, + ), ); if (response.statusCode == HttpStatus.ok) { if (response.data['allowed']['capabilities'].contains('listBuckets')) { - return true; + isTokenValid = true; } - return false; + isTokenValid = false; } else if (response.statusCode == HttpStatus.unauthorized) { - return false; + isTokenValid = false; } else { throw Exception('code: ${response.statusCode}'); } - } on DioError { - return false; + } on DioError catch (e) { + print(e); + return APIGenericResult( + data: false, + success: false, + message: e.toString(), + ); } finally { close(client); } + + return APIGenericResult( + data: isTokenValid, + success: true, + ); } // Create bucket diff --git a/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart b/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart index 2a9f4662..7390eee1 100644 --- a/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart @@ -1,13 +1,14 @@ import 'dart:async'; import 'package:cubit_form/cubit_form.dart'; +import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/backblaze.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; +import 'package:selfprivacy/logic/get_it/navigation.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart'; import 'package:easy_localization/easy_localization.dart'; class BackblazeFormCubit extends FormCubit { BackblazeFormCubit(this.serverInstallationCubit) { - //var regExp = RegExp(r"\s+|[-!$%^&*()@+|~=`{}\[\]:<>?,.\/]"); keyId = FieldCubit( initalValue: '', validations: [ @@ -40,7 +41,7 @@ class BackblazeFormCubit extends FormCubit { @override FutureOr asyncValidation() async { - late bool isKeyValid; + late APIGenericResult backblazeResponse; final BackblazeApi apiClient = BackblazeApi(isWithToken: false); try { @@ -48,18 +49,30 @@ class BackblazeFormCubit extends FormCubit { keyId.state.value, applicationKey.state.value, ); - isKeyValid = await apiClient.isValid(encodedApiKey); + backblazeResponse = await apiClient.isApiTokenValid(encodedApiKey); } catch (e) { addError(e); - isKeyValid = false; + backblazeResponse = APIGenericResult( + success: false, + data: false, + message: e.toString(), + ); } - if (!isKeyValid) { - keyId.setError('initializing.backblaze_bad_key_error'.tr()); - applicationKey.setError('initializing.backblaze_bad_key_error'.tr()); + if (!backblazeResponse.success) { + getIt().showSnackBar( + 'initializing.could_not_connect'.tr(), + ); + keyId.setError(''); + applicationKey.setError(''); return false; } - return true; + if (!backblazeResponse.data) { + keyId.setError('initializing.backblaze_bad_key_error'.tr()); + applicationKey.setError('initializing.backblaze_bad_key_error'.tr()); + } + + return backblazeResponse.data; } }