Complete Telegram bot login from callback URL
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m18s
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m18s
This commit is contained in:
@@ -297,7 +297,6 @@ class _TelegramLoginScreen extends StatefulWidget {
|
||||
|
||||
class _TelegramLoginScreenState extends State<_TelegramLoginScreen> {
|
||||
final _api = MapflowApi();
|
||||
Timer? _pollTimer;
|
||||
Timer? _countdownTimer;
|
||||
DateTime? _loginExpiresAt;
|
||||
var _loading = false;
|
||||
@@ -307,22 +306,13 @@ class _TelegramLoginScreenState extends State<_TelegramLoginScreen> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
final urlToken = telegram_session.telegramLoginTokenFromUrl();
|
||||
final pendingToken = urlToken.isNotEmpty
|
||||
? urlToken
|
||||
: telegram_session.pendingTelegramLoginToken();
|
||||
if (pendingToken.isNotEmpty) {
|
||||
telegram_session.savePendingTelegramLoginToken(pendingToken);
|
||||
_pollLogin(pendingToken);
|
||||
_pollTimer = Timer.periodic(
|
||||
const Duration(seconds: 2),
|
||||
(_) => _pollLogin(pendingToken),
|
||||
);
|
||||
if (urlToken.isNotEmpty) {
|
||||
_completeLogin(urlToken);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_pollTimer?.cancel();
|
||||
_countdownTimer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -333,14 +323,8 @@ class _TelegramLoginScreenState extends State<_TelegramLoginScreen> {
|
||||
_message = '';
|
||||
});
|
||||
final login = await _api.startTelegramBotLogin();
|
||||
telegram_session.savePendingTelegramLoginToken(login.token);
|
||||
telegram_session.openExternalUrl(login.botUrl);
|
||||
_pollTimer?.cancel();
|
||||
_countdownTimer?.cancel();
|
||||
_pollTimer = Timer.periodic(
|
||||
const Duration(seconds: 2),
|
||||
(_) => _pollLogin(login.token),
|
||||
);
|
||||
_countdownTimer = Timer.periodic(const Duration(seconds: 1), (_) {
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
@@ -353,28 +337,14 @@ class _TelegramLoginScreenState extends State<_TelegramLoginScreen> {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _pollLogin(String token) async {
|
||||
final status = await _api.fetchTelegramBotLoginStatus(token);
|
||||
if (status.isExpired) {
|
||||
_pollTimer?.cancel();
|
||||
_countdownTimer?.cancel();
|
||||
telegram_session.clearPendingTelegramLoginToken();
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
_loginExpiresAt = null;
|
||||
setState(() => _message = 'Ссылка устарела. Запусти вход заново.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!status.isConfirmed) {
|
||||
return;
|
||||
}
|
||||
|
||||
_pollTimer?.cancel();
|
||||
Future<void> _completeLogin(String token) async {
|
||||
setState(() {
|
||||
_loading = true;
|
||||
_message = '';
|
||||
});
|
||||
final session = await _api.completeTelegramBotLogin(token);
|
||||
_countdownTimer?.cancel();
|
||||
telegram_session.saveMapflowSessionToken(status.sessionToken!);
|
||||
telegram_session.clearPendingTelegramLoginToken();
|
||||
telegram_session.saveMapflowSessionToken(session.sessionToken);
|
||||
widget.onAuthenticated();
|
||||
telegram_session.reloadApp();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user