Revert "feat(auth): integrate SmartAuth for SMS code auto-fill and update localization strings"
This reverts commit 37e320a52b.
This commit is contained in:
@@ -2,7 +2,3 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m
|
|||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
kotlin.incremental=false
|
kotlin.incremental=false
|
||||||
dev.steenbakker.mobile_scanner.useUnbundled=true
|
dev.steenbakker.mobile_scanner.useUnbundled=true
|
||||||
systemProp.socksProxyHost=127.0.0.1
|
|
||||||
systemProp.socksProxyPort=10808
|
|
||||||
systemProp.https.proxyHost=127.0.0.1
|
|
||||||
systemProp.https.proxyPort=10808
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:komet/l10n/app_localizations.dart';
|
import 'package:komet/l10n/app_localizations.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:smart_auth/smart_auth.dart';
|
|
||||||
import '../chats/chat_list_screen.dart';
|
import '../chats/chat_list_screen.dart';
|
||||||
import 'password_2fa_screen.dart';
|
import 'password_2fa_screen.dart';
|
||||||
import '../../../main.dart';
|
import '../../../main.dart';
|
||||||
@@ -28,11 +26,9 @@ class _CodeConfirmationScreenState extends State<CodeConfirmationScreen>
|
|||||||
with TickerProviderStateMixin {
|
with TickerProviderStateMixin {
|
||||||
final TextEditingController _codeController = TextEditingController();
|
final TextEditingController _codeController = TextEditingController();
|
||||||
final FocusNode _focusNode = FocusNode();
|
final FocusNode _focusNode = FocusNode();
|
||||||
final SmartAuth _smartAuth = SmartAuth.instance;
|
|
||||||
int _timerSeconds = 30;
|
int _timerSeconds = 30;
|
||||||
Timer? _timer;
|
Timer? _timer;
|
||||||
Timer? _errorTimer;
|
Timer? _errorTimer;
|
||||||
bool _isListeningSmsConsent = false;
|
|
||||||
|
|
||||||
String? _errorMessage;
|
String? _errorMessage;
|
||||||
late AnimationController _shakeController;
|
late AnimationController _shakeController;
|
||||||
@@ -45,7 +41,6 @@ class _CodeConfirmationScreenState extends State<CodeConfirmationScreen>
|
|||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
_focusNode.requestFocus();
|
_focusNode.requestFocus();
|
||||||
});
|
});
|
||||||
_startSmsCodeListener();
|
|
||||||
|
|
||||||
_shakeController = AnimationController(
|
_shakeController = AnimationController(
|
||||||
vsync: this,
|
vsync: this,
|
||||||
@@ -61,63 +56,10 @@ class _CodeConfirmationScreenState extends State<CodeConfirmationScreen>
|
|||||||
]).animate(CurvedAnimation(parent: _shakeController, curve: Curves.linear));
|
]).animate(CurvedAnimation(parent: _shakeController, curve: Curves.linear));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _startSmsCodeListener() async {
|
|
||||||
if (defaultTargetPlatform != TargetPlatform.android) return;
|
|
||||||
if (_isListeningSmsConsent) return;
|
|
||||||
|
|
||||||
_isListeningSmsConsent = true;
|
|
||||||
final result = await _smartAuth.getSmsWithUserConsentApi(matcher: r'\d{6}');
|
|
||||||
_isListeningSmsConsent = false;
|
|
||||||
|
|
||||||
if (!mounted || !result.hasData) return;
|
|
||||||
|
|
||||||
final receivedCode = result.data?.code;
|
|
||||||
if (receivedCode == null || receivedCode.isEmpty) return;
|
|
||||||
|
|
||||||
_applyAutoFillCode(receivedCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _restartSmsCodeListener() async {
|
|
||||||
if (defaultTargetPlatform != TargetPlatform.android) return;
|
|
||||||
await _smartAuth.removeUserConsentApiListener();
|
|
||||||
_isListeningSmsConsent = false;
|
|
||||||
await _startSmsCodeListener();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleCodeChanged(String value) {
|
|
||||||
setState(() {
|
|
||||||
if (_errorMessage != null) {
|
|
||||||
_errorMessage = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (value.length == 6) {
|
|
||||||
_verifyCode();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _applyAutoFillCode(String rawCode) {
|
|
||||||
final digitsOnly = rawCode.replaceAll(RegExp(r'\D'), '');
|
|
||||||
if (digitsOnly.isEmpty) return;
|
|
||||||
|
|
||||||
final nextCode = digitsOnly.length <= 6
|
|
||||||
? digitsOnly
|
|
||||||
: digitsOnly.substring(0, 6);
|
|
||||||
|
|
||||||
if (_codeController.text == nextCode) return;
|
|
||||||
|
|
||||||
_codeController.value = TextEditingValue(
|
|
||||||
text: nextCode,
|
|
||||||
selection: TextSelection.collapsed(offset: nextCode.length),
|
|
||||||
);
|
|
||||||
|
|
||||||
_handleCodeChanged(nextCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_timer?.cancel();
|
_timer?.cancel();
|
||||||
_errorTimer?.cancel();
|
_errorTimer?.cancel();
|
||||||
unawaited(_smartAuth.removeUserConsentApiListener());
|
|
||||||
_shakeController.dispose();
|
_shakeController.dispose();
|
||||||
_codeController.dispose();
|
_codeController.dispose();
|
||||||
_focusNode.dispose();
|
_focusNode.dispose();
|
||||||
@@ -150,7 +92,6 @@ class _CodeConfirmationScreenState extends State<CodeConfirmationScreen>
|
|||||||
void _resendCode() {
|
void _resendCode() {
|
||||||
if (_timerSeconds == 0) {
|
if (_timerSeconds == 0) {
|
||||||
_startTimer();
|
_startTimer();
|
||||||
unawaited(_restartSmsCodeListener());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,7 +206,11 @@ class _CodeConfirmationScreenState extends State<CodeConfirmationScreen>
|
|||||||
FilteringTextInputFormatter.digitsOnly,
|
FilteringTextInputFormatter.digitsOnly,
|
||||||
LengthLimitingTextInputFormatter(6),
|
LengthLimitingTextInputFormatter(6),
|
||||||
],
|
],
|
||||||
onChanged: _handleCodeChanged,
|
onChanged: (value) {
|
||||||
|
if (hasError) setState(() => _errorMessage = null);
|
||||||
|
setState(() {});
|
||||||
|
if (value.length == 6) _verifyCode();
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -795,6 +795,15 @@ class _LoginScreenState extends State<LoginScreen> {
|
|||||||
height: 1.4,
|
height: 1.4,
|
||||||
),
|
),
|
||||||
children: [
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: l10n.loginTermsIntro,
|
||||||
|
style: GoogleFonts.inter(
|
||||||
|
color: cs.onSurface,
|
||||||
|
fontSize: 14,
|
||||||
|
height: 1.4,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
),
|
||||||
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: l10n.loginTermsLink,
|
text: l10n.loginTermsLink,
|
||||||
style: GoogleFonts.inter(
|
style: GoogleFonts.inter(
|
||||||
|
|||||||
+8
-7
@@ -1,22 +1,23 @@
|
|||||||
{
|
{
|
||||||
"@@locale": "en",
|
"@@locale": "en",
|
||||||
"loginTitle": "Log in to Komet",
|
"loginTitle": "Sign in to Komet",
|
||||||
"loginSubtitle": "Check your country code and enter your\nphone number.",
|
"loginSubtitle": "Check your country code and enter your\nphone number.",
|
||||||
"loginCountry": "Country",
|
"loginCountry": "Country",
|
||||||
"loginPhoneNumber": "Phone number",
|
"loginPhoneNumber": "Phone number",
|
||||||
"loginPhoneHint": "(000) 000-00-00",
|
"loginPhoneHint": "(000) 000-00-00",
|
||||||
"loginOtherSignInMethods": "Other sign-in methods",
|
"loginOtherSignInMethods": "Other sign-in methods",
|
||||||
"loginTermsLink": "Terms of Use «Komet»",
|
"loginTermsIntro": "By continuing, you agree to \n",
|
||||||
"loginTermsOfUse": "Terms of Use «Komet»",
|
"loginTermsLink": "the terms of use",
|
||||||
|
"loginTermsOfUse": "Terms of use",
|
||||||
"loginConfirmPhoneTitle": "Is this the correct number?",
|
"loginConfirmPhoneTitle": "Is this the correct number?",
|
||||||
"loginEdit": "Change",
|
"loginEdit": "Change",
|
||||||
"loginDone": "Done",
|
"loginDone": "Done",
|
||||||
"loginReadTermsNotification": "Please read the Terms of Use «Komet»",
|
"loginReadTermsNotification": "Please read the terms of use first",
|
||||||
"loginSpoofRedacted": "Spoof redaction",
|
"loginSpoofRedacted": "Spoof redaction",
|
||||||
"loginProxy": "Proxy",
|
"loginProxy": "Proxy",
|
||||||
"loginSignInWithQr": "Log in with QR code",
|
"loginSignInWithQr": "Sign in with QR code",
|
||||||
"loginSignInWithToken": "Log in with token",
|
"loginSignInWithToken": "Sign in with token",
|
||||||
"loginSignInWithSessionFile": "Log in with session file",
|
"loginSignInWithSessionFile": "Sign in with session file",
|
||||||
"loginLanguage": "Language",
|
"loginLanguage": "Language",
|
||||||
"languageNameRu": "Русский",
|
"languageNameRu": "Русский",
|
||||||
"languageNameEn": "English",
|
"languageNameEn": "English",
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ abstract class AppLocalizations {
|
|||||||
/// No description provided for @loginTitle.
|
/// No description provided for @loginTitle.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Log in to Komet'**
|
/// **'Sign in to Komet'**
|
||||||
String get loginTitle;
|
String get loginTitle;
|
||||||
|
|
||||||
/// No description provided for @loginSubtitle.
|
/// No description provided for @loginSubtitle.
|
||||||
@@ -134,16 +134,22 @@ abstract class AppLocalizations {
|
|||||||
/// **'Other sign-in methods'**
|
/// **'Other sign-in methods'**
|
||||||
String get loginOtherSignInMethods;
|
String get loginOtherSignInMethods;
|
||||||
|
|
||||||
|
/// No description provided for @loginTermsIntro.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'By continuing, you agree to \n'**
|
||||||
|
String get loginTermsIntro;
|
||||||
|
|
||||||
/// No description provided for @loginTermsLink.
|
/// No description provided for @loginTermsLink.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Terms of Use «Komet»'**
|
/// **'the terms of use'**
|
||||||
String get loginTermsLink;
|
String get loginTermsLink;
|
||||||
|
|
||||||
/// No description provided for @loginTermsOfUse.
|
/// No description provided for @loginTermsOfUse.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Terms of Use «Komet»'**
|
/// **'Terms of use'**
|
||||||
String get loginTermsOfUse;
|
String get loginTermsOfUse;
|
||||||
|
|
||||||
/// No description provided for @loginConfirmPhoneTitle.
|
/// No description provided for @loginConfirmPhoneTitle.
|
||||||
@@ -167,7 +173,7 @@ abstract class AppLocalizations {
|
|||||||
/// No description provided for @loginReadTermsNotification.
|
/// No description provided for @loginReadTermsNotification.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Please read the Terms of Use «Komet»'**
|
/// **'Please read the terms of use first'**
|
||||||
String get loginReadTermsNotification;
|
String get loginReadTermsNotification;
|
||||||
|
|
||||||
/// No description provided for @loginSpoofRedacted.
|
/// No description provided for @loginSpoofRedacted.
|
||||||
@@ -185,19 +191,19 @@ abstract class AppLocalizations {
|
|||||||
/// No description provided for @loginSignInWithQr.
|
/// No description provided for @loginSignInWithQr.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Log in with QR code'**
|
/// **'Sign in with QR code'**
|
||||||
String get loginSignInWithQr;
|
String get loginSignInWithQr;
|
||||||
|
|
||||||
/// No description provided for @loginSignInWithToken.
|
/// No description provided for @loginSignInWithToken.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Log in with token'**
|
/// **'Sign in with token'**
|
||||||
String get loginSignInWithToken;
|
String get loginSignInWithToken;
|
||||||
|
|
||||||
/// No description provided for @loginSignInWithSessionFile.
|
/// No description provided for @loginSignInWithSessionFile.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Log in with session file'**
|
/// **'Sign in with session file'**
|
||||||
String get loginSignInWithSessionFile;
|
String get loginSignInWithSessionFile;
|
||||||
|
|
||||||
/// No description provided for @loginLanguage.
|
/// No description provided for @loginLanguage.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginTitle => 'Log in to Komet';
|
String get loginTitle => 'Sign in to Komet';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSubtitle =>
|
String get loginSubtitle =>
|
||||||
@@ -28,10 +28,13 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
String get loginOtherSignInMethods => 'Other sign-in methods';
|
String get loginOtherSignInMethods => 'Other sign-in methods';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginTermsLink => 'Terms of Use «Komet»';
|
String get loginTermsIntro => 'By continuing, you agree to \n';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginTermsOfUse => 'Terms of Use «Komet»';
|
String get loginTermsLink => 'the terms of use';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loginTermsOfUse => 'Terms of use';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginConfirmPhoneTitle => 'Is this the correct number?';
|
String get loginConfirmPhoneTitle => 'Is this the correct number?';
|
||||||
@@ -43,8 +46,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
String get loginDone => 'Done';
|
String get loginDone => 'Done';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginReadTermsNotification =>
|
String get loginReadTermsNotification => 'Please read the terms of use first';
|
||||||
'Please read the Terms of Use «Komet»';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSpoofRedacted => 'Spoof redaction';
|
String get loginSpoofRedacted => 'Spoof redaction';
|
||||||
@@ -53,13 +55,13 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
String get loginProxy => 'Proxy';
|
String get loginProxy => 'Proxy';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSignInWithQr => 'Log in with QR code';
|
String get loginSignInWithQr => 'Sign in with QR code';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSignInWithToken => 'Log in with token';
|
String get loginSignInWithToken => 'Sign in with token';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSignInWithSessionFile => 'Log in with session file';
|
String get loginSignInWithSessionFile => 'Sign in with session file';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginLanguage => 'Language';
|
String get loginLanguage => 'Language';
|
||||||
|
|||||||
@@ -28,10 +28,13 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
String get loginOtherSignInMethods => 'Другие способы входа';
|
String get loginOtherSignInMethods => 'Другие способы входа';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginTermsLink => 'Условия использования «Komet»';
|
String get loginTermsIntro => 'Продолжая, вы соглашаетесь с \n';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginTermsOfUse => 'Условия использования «Komet»';
|
String get loginTermsLink => 'пользовательскими соглашениями';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get loginTermsOfUse => 'Условия использования';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginConfirmPhoneTitle => 'Это правильный номер?';
|
String get loginConfirmPhoneTitle => 'Это правильный номер?';
|
||||||
@@ -44,7 +47,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginReadTermsNotification =>
|
String get loginReadTermsNotification =>
|
||||||
'Сначала прочитайте условия использования «Komet»';
|
'Сначала прочитайте условия использования';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loginSpoofRedacted => 'Подделка спуфа';
|
String get loginSpoofRedacted => 'Подделка спуфа';
|
||||||
|
|||||||
+3
-3
@@ -7,12 +7,12 @@
|
|||||||
"loginPhoneHint": "(000) 000-00-00",
|
"loginPhoneHint": "(000) 000-00-00",
|
||||||
"loginOtherSignInMethods": "Другие способы входа",
|
"loginOtherSignInMethods": "Другие способы входа",
|
||||||
"loginTermsIntro": "Продолжая, вы соглашаетесь с \n",
|
"loginTermsIntro": "Продолжая, вы соглашаетесь с \n",
|
||||||
"loginTermsLink": "Условия использования «Komet»",
|
"loginTermsLink": "пользовательскими соглашениями",
|
||||||
"loginTermsOfUse": "Условия использования «Komet»",
|
"loginTermsOfUse": "Условия использования",
|
||||||
"loginConfirmPhoneTitle": "Это правильный номер?",
|
"loginConfirmPhoneTitle": "Это правильный номер?",
|
||||||
"loginEdit": "Изменить",
|
"loginEdit": "Изменить",
|
||||||
"loginDone": "Готово",
|
"loginDone": "Готово",
|
||||||
"loginReadTermsNotification": "Сначала прочитайте условия использования «Komet»",
|
"loginReadTermsNotification": "Сначала прочитайте условия использования",
|
||||||
"loginSpoofRedacted": "Подделка спуфа",
|
"loginSpoofRedacted": "Подделка спуфа",
|
||||||
"loginProxy": "Прокси",
|
"loginProxy": "Прокси",
|
||||||
"loginSignInWithQr": "По QR code",
|
"loginSignInWithQr": "По QR code",
|
||||||
|
|||||||
@@ -530,14 +530,6 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
smart_auth:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: smart_auth
|
|
||||||
sha256: a536423c50d71e9a311d16027346634d0deadd07dafc5b5606b46719cf6fb2b6
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.2.0"
|
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ dependencies:
|
|||||||
shared_preferences: ^2.5.4
|
shared_preferences: ^2.5.4
|
||||||
package_info_plus: ^9.0.1
|
package_info_plus: ^9.0.1
|
||||||
mobile_scanner: ^7.2.0
|
mobile_scanner: ^7.2.0
|
||||||
smart_auth: ^3.2.0
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user