public async Task <IActionResult> DisableUsers([FromBody] Sync.UserSyncSet syncSet) { try { var syncJob = await _db.SyncJobs.FindAsync(syncSet.JobID); if (syncJob == null) { return(BadRequest(new[] { "Invalid synchronization job identifier." })); } if (syncJob.Status != Sync.SyncJobStatus.Running) { return(BadRequest(new[] { "Invalid synchronization job status: " + syncJob.Status.ToString() })); } var result = await syncJob.DisableUsersAsync(_userManager, syncSet.Users); await _db.SaveChangesAsync(); if (result != null && result.Any()) { return(BadRequest(result.ToArray())); } } catch (Exception ex) { _logger.LogError(ex, $"Error disabling users for sync job: { syncSet.JobID }"); return(BadRequest(new[] { "Error disabling users for sync job." })); } return(Ok()); }
public async Task <IActionResult> UpdateUsers([FromBody] Sync.UserSyncSet syncSet) { try { var syncJob = await _db.SyncJobs.FindAsync(syncSet.JobID); if (syncJob == null) { return(BadRequest(new[] { "Invalid synchronization job identifier." })); } if (syncJob.Status != Sync.SyncJobStatus.Running) { return(BadRequest(new[] { "Invalid synchronization job status: " + syncJob.Status.ToString() })); } var result = await syncJob.SyncUsersAsync(_userManager, syncSet.Users); if (_db.ChangeTracker.HasChanges()) { await _db.SaveChangesAsync(); } var users = syncSet.Users; var modelUsers = _modelDb.Users.Where(u => users.Any(d => d.ID == u.ID)).ToArray(); foreach (var updateUser in users.Where(u => modelUsers.Any(mu => mu.ID == u.ID))) { var m_user = modelUsers.First(m => m.ID == updateUser.ID); m_user.FirstName = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.FirstName_Key).Select(cl => cl.Value).FirstOrDefault(); m_user.LastName = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.LastName_Key).Select(cl => cl.Value).FirstOrDefault(); m_user.Organization = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.Organization_Key).Select(cl => cl.Value).FirstOrDefault(); m_user.PhoneNumber = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.Phone_Key).Select(cl => cl.Value).FirstOrDefault(); m_user.UserName = updateUser.UserName; m_user.Email = updateUser.Email; } if (_modelDb.ChangeTracker.HasChanges()) { await _modelDb.SaveChangesAsync(); } //add any missing model users using (var cmd = _modelDb.Database.GetDbConnection().CreateCommand()) { cmd.CommandText = @"SELECT u.Id, ISNULL(u.UserName, '') AS UserName, ISNULL(u.Email, '') AS Email, ISNULL(u.PhoneNumber, '') AS PhoneNumber, ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'), '') AS FirstName, ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'USER.ORGANIZATION'), '') AS Organization, ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname'), '') AS LastName FROM AspNetUsers u WHERE NOT EXISTS(SELECT NULL FROM Users mu WHERE mu.ID = u.Id)"; await _modelDb.Database.OpenConnectionAsync(); using (var reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { _modelDb.Users.Add(new ASPE.DQM.Model.User { ID = reader.GetGuid(0), UserName = reader.GetString(1), Email = reader.GetString(2), PhoneNumber = reader.GetString(3), FirstName = reader.GetString(4), Organization = reader.GetString(5), LastName = reader.GetString(6) }); } } } if (_modelDb.ChangeTracker.HasChanges()) { await _modelDb.SaveChangesAsync(); } if (result != null && result.Any()) { return(BadRequest(result.ToArray())); } } catch (Exception ex) { _logger.LogError(ex, $"Error updating users for sync job: { syncSet.JobID }"); return(BadRequest(new[] { "Error updating users for sync job." })); } return(Ok()); }