64 lines
1.9 KiB
Dart
64 lines
1.9 KiB
Dart
import 'package:pshared/api/responses/login_pending.dart';
|
|
import 'package:pshared/api/responses/token.dart';
|
|
import 'package:pshared/data/mapper/account/account.dart';
|
|
import 'package:pshared/models/account/account.dart';
|
|
import 'package:pshared/models/session_identifier.dart';
|
|
|
|
|
|
class PendingLogin {
|
|
final Account account;
|
|
final TokenData pendingToken;
|
|
final String destination;
|
|
final int ttlSeconds;
|
|
final SessionIdentifier session;
|
|
final int? cooldownSeconds;
|
|
final DateTime? cooldownUntil;
|
|
|
|
const PendingLogin({
|
|
required this.account,
|
|
required this.pendingToken,
|
|
required this.destination,
|
|
required this.ttlSeconds,
|
|
required this.session,
|
|
this.cooldownSeconds,
|
|
this.cooldownUntil,
|
|
});
|
|
|
|
factory PendingLogin.fromResponse(
|
|
PendingLoginResponse response, {
|
|
required SessionIdentifier session,
|
|
}) => PendingLogin(
|
|
account: response.account.account.toDomain(),
|
|
pendingToken: response.pendingToken,
|
|
destination: response.destination,
|
|
ttlSeconds: response.ttlSeconds,
|
|
session: session,
|
|
);
|
|
|
|
PendingLogin copyWith({
|
|
Account? account,
|
|
TokenData? pendingToken,
|
|
String? destination,
|
|
int? ttlSeconds,
|
|
SessionIdentifier? session,
|
|
int? cooldownSeconds,
|
|
DateTime? cooldownUntil,
|
|
bool clearCooldown = false,
|
|
}) {
|
|
return PendingLogin(
|
|
account: account ?? this.account,
|
|
pendingToken: pendingToken ?? this.pendingToken,
|
|
destination: destination ?? this.destination,
|
|
ttlSeconds: ttlSeconds ?? this.ttlSeconds,
|
|
session: session ?? this.session,
|
|
cooldownSeconds: clearCooldown ? null : cooldownSeconds ?? this.cooldownSeconds,
|
|
cooldownUntil: clearCooldown ? null : cooldownUntil ?? this.cooldownUntil,
|
|
);
|
|
}
|
|
|
|
int get cooldownRemainingSeconds {
|
|
final remaining = cooldownUntil?.difference(DateTime.now()).inSeconds ?? 0;
|
|
return remaining < 0 ? 0 : remaining;
|
|
}
|
|
}
|