OAuth
This commit is contained in:
parent
6237bc33c3
commit
28e68cf3dc
|
|
@ -81,6 +81,35 @@ class SettingsRepository {
|
|||
return userResponse.data;
|
||||
}
|
||||
|
||||
Future<UserEntity> connectGmailUser(
|
||||
Credentials credentials,
|
||||
String password,
|
||||
String idToken,
|
||||
String serverAuthCode,
|
||||
) async {
|
||||
dynamic response;
|
||||
|
||||
final url =
|
||||
credentials.url + '/connected_account/gmail?include=company_user';
|
||||
response = await webClient.post(
|
||||
url,
|
||||
credentials.token,
|
||||
data: json.encode(
|
||||
{
|
||||
'id_token': idToken,
|
||||
'server_auth_code': serverAuthCode,
|
||||
},
|
||||
),
|
||||
password: password,
|
||||
idToken: idToken,
|
||||
);
|
||||
|
||||
final UserItemResponse userResponse =
|
||||
serializers.deserializeWith(UserItemResponse.serializer, response);
|
||||
|
||||
return userResponse.data;
|
||||
}
|
||||
|
||||
Future<UserCompanyEntity> saveUserSettings(
|
||||
Credentials credentials, UserEntity user) async {
|
||||
final data = serializers.serializeWith(UserEntity.serializer, user);
|
||||
|
|
|
|||
|
|
@ -143,6 +143,33 @@ class ConnecOAuthUserFailure implements StopSaving {
|
|||
final Object error;
|
||||
}
|
||||
|
||||
class ConnecGmailUserRequest implements StartSaving {
|
||||
ConnecGmailUserRequest({
|
||||
@required this.serverAuthCode,
|
||||
@required this.idToken,
|
||||
this.completer,
|
||||
this.password,
|
||||
});
|
||||
|
||||
final Completer completer;
|
||||
final String idToken;
|
||||
final String password;
|
||||
final String serverAuthCode;
|
||||
}
|
||||
|
||||
class ConnecGmailUserSuccess
|
||||
implements StopSaving, PersistData, PersistUI, UserVerifiedPassword {
|
||||
ConnecGmailUserSuccess(this.user);
|
||||
|
||||
final UserEntity user;
|
||||
}
|
||||
|
||||
class ConnecGmailUserFailure implements StopSaving {
|
||||
ConnecGmailUserFailure(this.error);
|
||||
|
||||
final Object error;
|
||||
}
|
||||
|
||||
class FilterSettings implements PersistUI {
|
||||
FilterSettings(this.filter);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
|
|||
final saveCompany = _saveCompany(repository);
|
||||
final saveAuthUser = _saveAuthUser(repository);
|
||||
final connectOAuthUser = _connectOAuthUser(repository);
|
||||
final connectGmailUser = _connectGmailUser(repository);
|
||||
final saveSettings = _saveSettings(repository);
|
||||
final uploadLogo = _uploadLogo(repository);
|
||||
final saveDocument = _saveDocument(repository);
|
||||
|
|
@ -33,6 +34,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
|
|||
TypedMiddleware<AppState, SaveCompanyRequest>(saveCompany),
|
||||
TypedMiddleware<AppState, SaveAuthUserRequest>(saveAuthUser),
|
||||
TypedMiddleware<AppState, ConnecOAuthUserRequest>(connectOAuthUser),
|
||||
TypedMiddleware<AppState, ConnecGmailUserRequest>(connectGmailUser),
|
||||
TypedMiddleware<AppState, SaveUserSettingsRequest>(saveSettings),
|
||||
TypedMiddleware<AppState, UploadLogoRequest>(uploadLogo),
|
||||
TypedMiddleware<AppState, SaveCompanyDocumentRequest>(saveDocument),
|
||||
|
|
@ -130,8 +132,8 @@ Middleware<AppState> _connectOAuthUser(SettingsRepository settingsRepository) {
|
|||
final action = dynamicAction as ConnecOAuthUserRequest;
|
||||
|
||||
settingsRepository
|
||||
.connectOAuthUser(store.state.credentials, action.password,
|
||||
action.idToken)
|
||||
.connectOAuthUser(
|
||||
store.state.credentials, action.password, action.idToken)
|
||||
.then((user) {
|
||||
store.dispatch(ConnecOAuthUserSuccess(user));
|
||||
if (action.completer != null) {
|
||||
|
|
@ -152,6 +154,33 @@ Middleware<AppState> _connectOAuthUser(SettingsRepository settingsRepository) {
|
|||
};
|
||||
}
|
||||
|
||||
Middleware<AppState> _connectGmailUser(SettingsRepository settingsRepository) {
|
||||
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
|
||||
final action = dynamicAction as ConnecGmailUserRequest;
|
||||
|
||||
settingsRepository
|
||||
.connectGmailUser(store.state.credentials, action.password,
|
||||
action.idToken, action.serverAuthCode)
|
||||
.then((user) {
|
||||
store.dispatch(ConnecGmailUserSuccess(user));
|
||||
if (action.completer != null) {
|
||||
action.completer.complete();
|
||||
}
|
||||
}).catchError((Object error) {
|
||||
print(error);
|
||||
store.dispatch(ConnecGmailUserFailure(error));
|
||||
if ('$error'.contains('412')) {
|
||||
store.dispatch(UserUnverifiedPassword());
|
||||
}
|
||||
if (action.completer != null) {
|
||||
action.completer.completeError(error);
|
||||
}
|
||||
});
|
||||
|
||||
next(action);
|
||||
};
|
||||
}
|
||||
|
||||
Middleware<AppState> _saveSettings(SettingsRepository settingsRepository) {
|
||||
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
|
||||
final action = dynamicAction as SaveUserSettingsRequest;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ class UserDetailsVM {
|
|||
user: state.uiState.settingsUIState.user,
|
||||
onChanged: (user) => store.dispatch(UpdateUserSettings(user: user)),
|
||||
onConnectGmailPressed: (context) {
|
||||
final completer = snackBarCompleter<Null>(
|
||||
context, AppLocalization.of(context).connectedGmail);
|
||||
|
||||
passwordCallback(
|
||||
context: context,
|
||||
callback: (password, idToken) async {
|
||||
|
|
@ -67,17 +70,12 @@ class UserDetailsVM {
|
|||
message: AppLocalization.of(context)
|
||||
.anErrorOccurredTryAgain);
|
||||
} else {
|
||||
print('## TODO...');
|
||||
/*
|
||||
store.dispatch(
|
||||
ConnecOAuthUserRequest(
|
||||
provider: UserEntity.OAUTH_PROVIDER_GOOGLE,
|
||||
password: password,
|
||||
idToken: idToken,
|
||||
completer: completer,
|
||||
),
|
||||
);
|
||||
*/
|
||||
store.dispatch(ConnecGmailUserRequest(
|
||||
serverAuthCode: serverAuthCode,
|
||||
idToken: idToken,
|
||||
completer: completer,
|
||||
password: password,
|
||||
));
|
||||
}
|
||||
});
|
||||
if (!signedIn) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue