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