55 lines
1.3 KiB
Dart
55 lines
1.3 KiB
Dart
|
|
import 'package:halkyon_base_server/base.dart';
|
||
|
|
import 'package:serverpod/serverpod.dart';
|
||
|
|
|
||
|
|
/// Keeps every code and notice mailed, in place of a mail service.
|
||
|
|
final class Mailbox implements CodeMailer {
|
||
|
|
final codes = <({String to, String code, String language})>[];
|
||
|
|
final notices =
|
||
|
|
<
|
||
|
|
({
|
||
|
|
String to,
|
||
|
|
AccountResetKind kind,
|
||
|
|
DateTime takesEffectAt,
|
||
|
|
String language,
|
||
|
|
})
|
||
|
|
>[];
|
||
|
|
|
||
|
|
/// Whether it takes no mail, as a mail service down.
|
||
|
|
bool refusing = false;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<void> send(
|
||
|
|
Session session, {
|
||
|
|
required String to,
|
||
|
|
required String code,
|
||
|
|
required String language,
|
||
|
|
}) async {
|
||
|
|
if (refusing) {
|
||
|
|
throw Exception('Connection refused');
|
||
|
|
}
|
||
|
|
codes.add((to: to, code: code, language: language));
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<void> sendResetNotice(
|
||
|
|
Session session, {
|
||
|
|
required String to,
|
||
|
|
required AccountResetKind kind,
|
||
|
|
required DateTime takesEffectAt,
|
||
|
|
required String language,
|
||
|
|
}) async {
|
||
|
|
if (refusing) {
|
||
|
|
throw Exception('Connection refused');
|
||
|
|
}
|
||
|
|
notices.add((
|
||
|
|
to: to,
|
||
|
|
kind: kind,
|
||
|
|
takesEffectAt: takesEffectAt,
|
||
|
|
language: language,
|
||
|
|
));
|
||
|
|
}
|
||
|
|
|
||
|
|
/// The last code mailed to [address].
|
||
|
|
String codeFor(String address) =>
|
||
|
|
codes.lastWhere((mail) => mail.to == address).code;
|
||
|
|
}
|