Create account

This commit is contained in:
Hillel Coren 2019-08-26 12:18:26 +03:00
parent c3b060451a
commit 6e8d419e7f
4 changed files with 69 additions and 2 deletions

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:core';
import 'package:invoiceninja_flutter/.env.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/serializers.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/web_client.dart';
@ -14,6 +15,22 @@ class AuthRepository {
final WebClient webClient;
Future<LoginResponseData> signUp(
{String email,
String password,
String platform,}) async {
final credentials = {
'token_name': 'invoice-ninja-$platform-app',
'api_secret': Config.API_SECRET,
'email': email,
'password': password,
};
final url = formatApiUrl(kAppUrl) + '/register';
return sendRequest(url: url, data: credentials);
}
Future<LoginResponseData> login(
{String email,
String password,

View File

@ -75,4 +75,18 @@ class UserLoginFailure implements StopLoading {
class UserLogout implements PersistData, PersistUI {}
class UserSignUpRequest implements StartLoading {
UserSignUpRequest({
this.completer,
this.email,
this.password,
this.platform,
});
final Completer completer;
final String email;
final String password;
final String platform;
}
class ClearAuthError {}

View File

@ -15,18 +15,21 @@ List<Middleware<AppState>> createStoreAuthMiddleware([
]) {
final loginInit = _createLoginInit();
final loginRequest = _createLoginRequest(repository);
final signUpRequest = _createSignUpRequest(repository);
final oauthRequest = _createOAuthRequest(repository);
final refreshRequest = _createRefreshRequest(repository);
return [
TypedMiddleware<AppState, LoadUserLogin>(loginInit),
TypedMiddleware<AppState, UserLoginRequest>(loginRequest),
TypedMiddleware<AppState, UserSignUpRequest>(signUpRequest),
TypedMiddleware<AppState, OAuthLoginRequest>(oauthRequest),
TypedMiddleware<AppState, RefreshData>(refreshRequest),
];
}
void _saveAuthLocal({String email, String url, String secret}) async {
void _saveAuthLocal(
{String email = '', String url = '', String secret = ''}) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(kSharedPrefEmail, email ?? '');
@ -109,6 +112,32 @@ Middleware<AppState> _createLoginRequest(AuthRepository repository) {
};
}
Middleware<AppState> _createSignUpRequest(AuthRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as UserSignUpRequest;
repository
.signUp(
email: action.email,
password: action.password,
platform: action.platform,
)
.then((data) {
_saveAuthLocal(
email: action.email,
);
store.dispatch(
LoadAccountSuccess(completer: action.completer, loginResponse: data));
}).catchError((Object error) {
print(error);
store.dispatch(UserLoginFailure(error));
});
next(action);
};
}
Middleware<AppState> _createOAuthRequest(AuthRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as OAuthLoginRequest;

View File

@ -46,6 +46,7 @@ class LoginVM {
bool isLoading;
AuthState authState;
final Function() onCancel2FAPressed;
final Function(BuildContext,
{@required String email,
@required String password,
@ -53,6 +54,7 @@ class LoginVM {
@required String secret,
@required String oneTimePassword,
@required bool createAccount}) onLoginPressed;
final Function(BuildContext, String, String) onGoogleLoginPressed;
static LoginVM fromStore(Store<AppState> store) {
@ -118,7 +120,12 @@ class LoginVM {
final Completer<Null> completer = Completer<Null>();
if (createAccount) {
// TODO
store.dispatch(UserSignUpRequest(
completer: completer,
email: email.trim(),
password: password.trim(),
platform: getPlatform(context),
));
} else {
store.dispatch(UserLoginRequest(
completer: completer,