frindlymap/lib/modules/app/src/verify_service.dart

33 lines
1.1 KiB
Dart

import 'package:friendly_map/modules/core/core.dart';
import 'package:friendly_map/modules/storage/storage.dart';
import 'change_bus.dart';
/// 내 번호 문자 확인. 확인 방식(보관함 서버 등)은 [PhoneVerifier] 약속 뒤에 있어 여기서는 모른다.
class VerifyService {
VerifyService(this._storage, this._clock, this._bus, this._verifier);
static const _key = 'phone_verified';
final Storage _storage;
final Clock _clock;
final ChangeBus _bus;
final PhoneVerifier? _verifier;
/// 이 앱에 확인 수단이 붙어 있는지.
bool get available => _verifier != null;
Future<bool> isVerified() async => (await _storage.settings.getText(_key)) == 'true';
Future<VerifyStart> request() async => await _verifier?.requestCode() ?? VerifyStart.unavailable;
/// 확인 번호를 넣는다. 맞으면 "확인됨"으로 기록한다.
Future<bool> confirm(String code) async {
final ok = await _verifier?.confirm(code) ?? false;
if (ok) {
await _storage.settings.putText(_key, 'true', _clock.now());
_bus.notify();
}
return ok;
}
}