Change to /disconnect_oauth

This commit is contained in:
Hillel Coren 2023-04-16 19:50:56 +03:00
parent 51d0914405
commit b423f9f96c
6 changed files with 102 additions and 6 deletions

View File

@ -87,6 +87,29 @@ class SettingsRepository {
return userResponse.data;
}
Future<UserEntity> disconnectOAuthUser(
Credentials credentials,
UserEntity user,
String password,
String idToken,
) async {
dynamic response;
final url = credentials.url +
'/users/${user.id}/disconnect_oauth?include=company_user';
response = await webClient.post(
url,
credentials.token,
password: password,
idToken: idToken,
);
final UserItemResponse userResponse =
serializers.deserializeWith(UserItemResponse.serializer, response);
return userResponse.data;
}
Future<UserEntity> disconnectOAuthMailer(
Credentials credentials,
String password,

View File

@ -163,6 +163,33 @@ class ConnecOAuthUserFailure implements StopSaving {
final Object error;
}
class DisconnecOAuthUserRequest implements StartSaving {
DisconnecOAuthUserRequest({
@required this.user,
@required this.idToken,
@required this.completer,
@required this.password,
});
final UserEntity user;
final Completer completer;
final String password;
final String idToken;
}
class DisconnectOAuthUserSuccess
implements StopSaving, PersistData, PersistUI, UserVerifiedPassword {
DisconnectOAuthUserSuccess(this.user);
final UserEntity user;
}
class DisconnecOAuthUserFailure implements StopSaving {
DisconnecOAuthUserFailure(this.error);
final Object error;
}
class DisconnectOAuthMailerRequest implements StartSaving {
DisconnectOAuthMailerRequest({
@required this.completer,

View File

@ -29,6 +29,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
final saveCompany = _saveCompany(repository);
final saveAuthUser = _saveAuthUser(repository);
final connectOAuthUser = _connectOAuthUser(repository);
final disconnectOAuthUser = _disconnectOAuthUser(repository);
final disconnectOAuthMailer = _disconnectOAuthMailer(repository);
final connectGmailUser = _connectGmailUser(repository);
final saveSettings = _saveSettings(repository);
@ -41,6 +42,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
TypedMiddleware<AppState, SaveCompanyRequest>(saveCompany),
TypedMiddleware<AppState, SaveAuthUserRequest>(saveAuthUser),
TypedMiddleware<AppState, ConnecOAuthUserRequest>(connectOAuthUser),
TypedMiddleware<AppState, DisconnecOAuthUserRequest>(disconnectOAuthUser),
TypedMiddleware<AppState, DisconnectOAuthMailerRequest>(
disconnectOAuthMailer),
TypedMiddleware<AppState, ConnecGmailUserRequest>(connectGmailUser),
@ -168,6 +170,38 @@ Middleware<AppState> _connectOAuthUser(SettingsRepository settingsRepository) {
};
}
Middleware<AppState> _disconnectOAuthUser(
SettingsRepository settingsRepository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as DisconnecOAuthUserRequest;
settingsRepository
.disconnectOAuthUser(
store.state.credentials,
action.user,
action.password,
action.idToken,
)
.then((user) {
store.dispatch(DisconnectOAuthUserSuccess(user));
if (action.completer != null) {
action.completer.complete();
}
}).catchError((Object error) {
print(error);
store.dispatch(DisconnecOAuthUserFailure(error));
if ('$error'.contains('412')) {
store.dispatch(UserUnverifiedPassword());
}
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _disconnectOAuthMailer(
SettingsRepository settingsRepository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {

View File

@ -104,6 +104,12 @@ Reducer<SettingsUIState> settingsUIReducer = combineReducers([
..origUser.replace(action.user)
..isChanged = false);
}),
TypedReducer<SettingsUIState, DisconnectOAuthUserSuccess>((state, action) {
return state.rebuild((b) => b
..user.replace(action.user)
..origUser.replace(action.user)
..isChanged = false);
}),
TypedReducer<SettingsUIState, DisconnectOAuthMailerSuccess>((state, action) {
return state.rebuild((b) => b
..user.replace(action.user)

View File

@ -196,6 +196,7 @@ final usersReducer = combineReducers<UserState>([
TypedReducer<UserState, SaveUserSuccess>(_updateUser),
TypedReducer<UserState, SaveAuthUserSuccess>(_updateAuthUser),
TypedReducer<UserState, ConnectOAuthUserSuccess>(_connectOAuthUser),
TypedReducer<UserState, DisconnectOAuthUserSuccess>(_disconnectOAuthUser),
TypedReducer<UserState, ConnecGmailUserSuccess>(_connectGmailUser),
TypedReducer<UserState, DisconnectOAuthMailerSuccess>(_disconnectOAuthMailer),
TypedReducer<UserState, AddUserSuccess>(_addUser),
@ -257,6 +258,11 @@ UserState _connectOAuthUser(
return userState.rebuild((b) => b..map[action.user.id] = action.user);
}
UserState _disconnectOAuthUser(
UserState userState, DisconnectOAuthUserSuccess action) {
return userState.rebuild((b) => b..map[action.user.id] = action.user);
}
UserState _disconnectOAuthMailer(
UserState userState, DisconnectOAuthMailerSuccess action) {
return userState.rebuild((b) => b..map[action.user.id] = action.user);

View File

@ -180,8 +180,8 @@ class UserDetailsVM {
GoogleOAuth.disconnect();
});
store.dispatch(
SaveAuthUserRequest(
user: state.user.rebuild((b) => b..oauthProvider = ''),
DisconnecOAuthUserRequest(
user: state.user,
password: password,
idToken: idToken,
completer: completer,
@ -244,8 +244,8 @@ class UserDetailsVM {
final completer = snackBarCompleter<Null>(context,
AppLocalization.of(context).disconnectedMicrosoft);
store.dispatch(
SaveAuthUserRequest(
user: state.user.rebuild((b) => b..oauthProvider = ''),
DisconnecOAuthUserRequest(
user: state.user,
password: password,
idToken: idToken,
completer: completer,
@ -271,8 +271,8 @@ class UserDetailsVM {
final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context).disconnectedApple);
store.dispatch(
SaveAuthUserRequest(
user: state.user.rebuild((b) => b..oauthProvider = ''),
DisconnecOAuthUserRequest(
user: state.user,
password: password,
idToken: idToken,
completer: completer,