mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-01-08 11:59:23 +00:00
Add ionia sign in.
This commit is contained in:
parent
2bc5b7055b
commit
0c8caf8847
8 changed files with 75 additions and 20 deletions
|
@ -705,9 +705,9 @@ Future setup(
|
|||
|
||||
getIt.registerFactoryParam<IoniaVerifyIoniaOtp, List, void>((List args, _) {
|
||||
final email = args.first as String;
|
||||
final ioniaAuthViewModel = args[1] as IoniaAuthViewModel;
|
||||
final isSignIn = args[1] as bool;
|
||||
|
||||
return IoniaVerifyIoniaOtp(ioniaAuthViewModel, email);
|
||||
return IoniaVerifyIoniaOtp(getIt.get<IoniaAuthViewModel>(), email, isSignIn);
|
||||
});
|
||||
|
||||
getIt.registerFactory(() => IoniaWelcomePage(getIt.get<IoniaGiftCardsListViewModel>()));
|
||||
|
|
|
@ -13,6 +13,7 @@ class IoniaApi {
|
|||
static const pathPrefix = 'cake';
|
||||
static final createUserUri = Uri.https(baseUri, '/$pathPrefix/CreateUser');
|
||||
static final verifyEmailUri = Uri.https(baseUri, '/$pathPrefix/VerifyEmail');
|
||||
static final signInUri = Uri.https(baseUri, '/$pathPrefix/SignIn');
|
||||
static final createCardUri = Uri.https(baseUri, '/$pathPrefix/CreateCard');
|
||||
static final getCardsUri = Uri.https(baseUri, '/$pathPrefix/GetCards');
|
||||
static final getMerchantsUrl = Uri.https(baseUri, '/$pathPrefix/GetMerchants');
|
||||
|
@ -51,11 +52,13 @@ class IoniaApi {
|
|||
|
||||
Future<IoniaUserCredentials> verifyEmail({
|
||||
@required String username,
|
||||
@required String email,
|
||||
@required String code,
|
||||
@required String clientId}) async {
|
||||
final headers = <String, String>{
|
||||
'clientId': clientId,
|
||||
'username': username};
|
||||
'username': username,
|
||||
'EmailAddress': email};
|
||||
final query = <String, String>{'verificationCode': code};
|
||||
final uri = verifyEmailUri.replace(queryParameters: query);
|
||||
final response = await put(uri, headers: headers);
|
||||
|
@ -70,13 +73,38 @@ class IoniaApi {
|
|||
final isSuccessful = bodyJson['Successful'] as bool;
|
||||
|
||||
if (!isSuccessful) {
|
||||
throw Exception(data['ErrorMessage'] as String);
|
||||
throw Exception(bodyJson['ErrorMessage'] as String);
|
||||
}
|
||||
|
||||
final password = data['password'] as String;
|
||||
username = data['username'] as String;
|
||||
return IoniaUserCredentials(username, password);
|
||||
}
|
||||
|
||||
// Sign In
|
||||
|
||||
Future<String> signIn(String email, {@required String clientId}) async {
|
||||
final headers = <String, String>{'clientId': clientId};
|
||||
final query = <String, String>{'emailAddress': email};
|
||||
final uri = signInUri.replace(queryParameters: query);
|
||||
final response = await put(uri, headers: headers);
|
||||
|
||||
if (response.statusCode != 200) {
|
||||
// throw exception
|
||||
return null;
|
||||
}
|
||||
|
||||
final bodyJson = json.decode(response.body) as Map<String, Object>;
|
||||
final data = bodyJson['Data'] as Map<String, Object>;
|
||||
final isSuccessful = bodyJson['Successful'] as bool;
|
||||
|
||||
if (!isSuccessful) {
|
||||
throw Exception(data['ErrorMessage'] as String);
|
||||
}
|
||||
|
||||
return data['username'] as String;
|
||||
}
|
||||
|
||||
// Get virtual card
|
||||
|
||||
Future<IoniaVirtualCard> getCards({
|
||||
|
|
|
@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
|
|||
|
||||
abstract class IoniaCreateAccountState {}
|
||||
|
||||
class IoniaInitialCreateState extends IoniaCreateAccountState {}
|
||||
|
||||
class IoniaCreateStateSuccess extends IoniaCreateAccountState {}
|
||||
|
||||
class IoniaCreateStateLoading extends IoniaCreateAccountState {}
|
||||
|
|
|
@ -32,8 +32,18 @@ class IoniaService {
|
|||
|
||||
Future<void> verifyEmail(String code) async {
|
||||
final username = await secureStorage.read(key: ioniaUsernameStorageKey);
|
||||
final credentials = await ioniaApi.verifyEmail(username: username, code: code, clientId: clientId);
|
||||
final email = await secureStorage.read(key: ioniaEmailStorageKey);
|
||||
final credentials = await ioniaApi.verifyEmail(email: email, username: username, code: code, clientId: clientId);
|
||||
await secureStorage.write(key: ioniaPasswordStorageKey, value: credentials.password);
|
||||
await secureStorage.write(key: ioniaUsernameStorageKey, value: credentials.username);
|
||||
}
|
||||
|
||||
// Sign In
|
||||
|
||||
Future<void> signIn(String email) async {
|
||||
final username = await ioniaApi.signIn(email, clientId: clientId);
|
||||
await secureStorage.write(key: ioniaEmailStorageKey, value: email);
|
||||
await secureStorage.write(key: ioniaUsernameStorageKey, value: username);
|
||||
}
|
||||
|
||||
Future<String> getUserEmail() async {
|
||||
|
|
|
@ -149,6 +149,6 @@ class IoniaCreateAccountPage extends BasePage {
|
|||
void _onCreateSuccessful(BuildContext context, IoniaAuthViewModel authViewModel) => Navigator.pushNamed(
|
||||
context,
|
||||
Routes.ioniaVerifyIoniaOtpPage,
|
||||
arguments: [authViewModel.email, authViewModel],
|
||||
arguments: [authViewModel.email, false],
|
||||
);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ class IoniaLoginPage extends BasePage {
|
|||
|
||||
@override
|
||||
Widget body(BuildContext context) {
|
||||
reaction((_) => _authViewModel.createUserState, (IoniaCreateAccountState state) {
|
||||
reaction((_) => _authViewModel.signInState, (IoniaCreateAccountState state) {
|
||||
if (state is IoniaCreateStateFailure) {
|
||||
_onLoginUserFailure(context, state.error);
|
||||
}
|
||||
|
@ -75,9 +75,9 @@ class IoniaLoginPage extends BasePage {
|
|||
if (!_formKey.currentState.validate()) {
|
||||
return;
|
||||
}
|
||||
await _authViewModel.createUser(_emailController.text);
|
||||
await _authViewModel.signIn(_emailController.text);
|
||||
},
|
||||
isLoading: _authViewModel.createUserState is IoniaCreateStateLoading,
|
||||
isLoading: _authViewModel.signInState is IoniaCreateStateLoading,
|
||||
color: Theme.of(context).accentTextTheme.body2.color,
|
||||
textColor: Colors.white,
|
||||
),
|
||||
|
@ -107,6 +107,6 @@ class IoniaLoginPage extends BasePage {
|
|||
void _onLoginSuccessful(BuildContext context, IoniaAuthViewModel authViewModel) => Navigator.pushNamed(
|
||||
context,
|
||||
Routes.ioniaVerifyIoniaOtpPage,
|
||||
arguments: [authViewModel.email, authViewModel],
|
||||
arguments: [authViewModel.email, true],
|
||||
);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ import 'package:keyboard_actions/keyboard_actions.dart';
|
|||
import 'package:mobx/mobx.dart';
|
||||
|
||||
class IoniaVerifyIoniaOtp extends BasePage {
|
||||
IoniaVerifyIoniaOtp(this._authViewModel, this._email)
|
||||
IoniaVerifyIoniaOtp(this._authViewModel, this._email, this.isSignIn)
|
||||
: _codeController = TextEditingController(),
|
||||
_codeFocus = FocusNode() {
|
||||
_codeController.addListener(() {
|
||||
|
@ -32,6 +32,7 @@ class IoniaVerifyIoniaOtp extends BasePage {
|
|||
}
|
||||
|
||||
final IoniaAuthViewModel _authViewModel;
|
||||
final bool isSignIn;
|
||||
|
||||
final String _email;
|
||||
|
||||
|
@ -94,7 +95,9 @@ class IoniaVerifyIoniaOtp extends BasePage {
|
|||
Text(S.of(context).dont_get_code),
|
||||
SizedBox(width: 20),
|
||||
InkWell(
|
||||
onTap: () => _authViewModel.createUser(_email),
|
||||
onTap: () => isSignIn
|
||||
? _authViewModel.signIn(_email)
|
||||
: _authViewModel.createUser(_email),
|
||||
child: Text(
|
||||
S.of(context).resend_code,
|
||||
style: textSmallSemiBold(color: Palette.blueCraiola),
|
||||
|
|
|
@ -9,17 +9,18 @@ class IoniaAuthViewModel = IoniaAuthViewModelBase with _$IoniaAuthViewModel;
|
|||
abstract class IoniaAuthViewModelBase with Store {
|
||||
|
||||
IoniaAuthViewModelBase({this.ioniaService}):
|
||||
createUserState = IoniaCreateStateSuccess(),
|
||||
otpState = IoniaOtpSendDisabled(){
|
||||
|
||||
|
||||
}
|
||||
createUserState = IoniaInitialCreateState(),
|
||||
signInState = IoniaInitialCreateState(),
|
||||
otpState = IoniaOtpSendDisabled();
|
||||
|
||||
final IoniaService ioniaService;
|
||||
|
||||
@observable
|
||||
IoniaCreateAccountState createUserState;
|
||||
|
||||
@observable
|
||||
IoniaCreateAccountState signInState;
|
||||
|
||||
@observable
|
||||
IoniaOtpState otpState;
|
||||
|
||||
|
@ -42,14 +43,25 @@ abstract class IoniaAuthViewModelBase with Store {
|
|||
|
||||
@action
|
||||
Future<void> createUser(String email) async {
|
||||
createUserState = IoniaCreateStateLoading();
|
||||
try {
|
||||
createUserState = IoniaCreateStateLoading();
|
||||
await ioniaService.createUser(email);
|
||||
|
||||
createUserState = IoniaCreateStateSuccess();
|
||||
} on Exception catch (e) {
|
||||
} catch (e) {
|
||||
createUserState = IoniaCreateStateFailure(error: e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@action
|
||||
Future<void> signIn(String email) async {
|
||||
try {
|
||||
signInState = IoniaCreateStateLoading();
|
||||
await ioniaService.signIn(email);
|
||||
signInState = IoniaCreateStateSuccess();
|
||||
} catch (e) {
|
||||
signInState = IoniaCreateStateFailure(error: e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue