mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-01-10 01:49:41 +00:00
NaiJi
0234278c2c
Because the class is called ServerApi, not just Server, it's totally not consistent with all other apis
80 lines
2.3 KiB
Dart
80 lines
2.3 KiB
Dart
import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart';
|
|
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
|
|
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
|
import 'package:selfprivacy/logic/models/json/recovery_token_status.dart';
|
|
|
|
part 'recovery_key_state.dart';
|
|
|
|
class RecoveryKeyCubit
|
|
extends ServerInstallationDependendCubit<RecoveryKeyState> {
|
|
RecoveryKeyCubit(final ServerInstallationCubit serverInstallationCubit)
|
|
: super(serverInstallationCubit, const RecoveryKeyState.initial());
|
|
|
|
final ServerApi api = ServerApi();
|
|
|
|
@override
|
|
void load() async {
|
|
if (serverInstallationCubit.state is ServerInstallationFinished) {
|
|
final RecoveryKeyStatus? status = await _getRecoveryKeyStatus();
|
|
if (status == null) {
|
|
emit(state.copyWith(loadingStatus: LoadingStatus.error));
|
|
} else {
|
|
emit(
|
|
state.copyWith(
|
|
status: status,
|
|
loadingStatus: LoadingStatus.success,
|
|
),
|
|
);
|
|
}
|
|
} else {
|
|
emit(state.copyWith(loadingStatus: LoadingStatus.uninitialized));
|
|
}
|
|
}
|
|
|
|
Future<RecoveryKeyStatus?> _getRecoveryKeyStatus() async {
|
|
final GenericResult<RecoveryKeyStatus?> response =
|
|
await api.getRecoveryTokenStatus();
|
|
if (response.success) {
|
|
return response.data;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Future<void> refresh() async {
|
|
emit(state.copyWith(loadingStatus: LoadingStatus.refreshing));
|
|
final RecoveryKeyStatus? status = await _getRecoveryKeyStatus();
|
|
if (status == null) {
|
|
emit(state.copyWith(loadingStatus: LoadingStatus.error));
|
|
} else {
|
|
emit(
|
|
state.copyWith(status: status, loadingStatus: LoadingStatus.success),
|
|
);
|
|
}
|
|
}
|
|
|
|
Future<String> generateRecoveryKey({
|
|
final DateTime? expirationDate,
|
|
final int? numberOfUses,
|
|
}) async {
|
|
final GenericResult<String> response =
|
|
await api.generateRecoveryToken(expirationDate, numberOfUses);
|
|
if (response.success) {
|
|
refresh();
|
|
return response.data;
|
|
} else {
|
|
throw GenerationError(response.message ?? 'Unknown error');
|
|
}
|
|
}
|
|
|
|
@override
|
|
void clear() {
|
|
emit(state.copyWith(loadingStatus: LoadingStatus.uninitialized));
|
|
}
|
|
}
|
|
|
|
class GenerationError extends Error {
|
|
GenerationError(this.message);
|
|
final String message;
|
|
}
|