private void PerformLogin() { AuthorizationInfo info = new AuthorizationInfo(UserName, Password); Task <User> validateUserTask = Task.Factory.StartNew <User>(() => { PasswordHelper passwordHelper = new PasswordHelper(); string hashedPassword = passwordHelper.CreateBase64Hash(Password); return(dataService.ValidateCredentials(UserName, hashedPassword)); }, TaskScheduler.Default); Task finishTask = validateUserTask.ContinueWith((t) => { IsBusy = false; User user = t.Result; if (user != null) { dataService.UserLoggedIn(user); CurrentUser.Assign(user); eventAggregator.GetEvent <LoginSucceededEvent>().Publish(info); } else { eventAggregator.GetEvent <LoginFailedEvent>().Publish(info); Notify("Authorization failed. Invalid user name and(or) password.", NotificationType.Error); } }, TaskScheduler.FromCurrentSynchronizationContext()); }
public override void OnSuccessCommand(object parameter) { if (!ValidateBeforeSave(parameter)) { Notify("Please fill all required fields", NotificationType.Warning); return; } if (dataService.UserExists(UserName)) { Notify("Registration failed. User with given name already exists. Name=" + UserName, NotificationType.Error); return; } IsBusy = true; Task <bool> createUserTask = Task.Factory.StartNew <bool>(() => { PasswordHelper passwordHelper = new PasswordHelper(); string hashedPassword = passwordHelper.CreateBase64Hash(Password); User newUser = new User() { UserName = this.UserName, Password = hashedPassword, Settings = new UserSettings(null) }; return(dataService.SaveUser(newUser)); }, TaskScheduler.Default); Task <bool> createUserSettingsTask = createUserTask.ContinueWith <bool>((r) => { if (!r.Result) { return(false); } else { //TODO return(true); } }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.Default); Task finishTask = createUserSettingsTask.ContinueWith((t) => { IsBusy = false; bool success = t.Result; if (success) { Notify("New user has been successfully created.", NotificationType.Success); } else { Notify("Can't create new user (internal error). Please see log for details.", NotificationType.Error); } DialogResult = true; }, TaskScheduler.FromCurrentSynchronizationContext()); }