private async Task <SINnerSearchGroup> GetSinSearchGroupResultById(Guid?groupid) { if ((groupid == null) || (groupid == Guid.Empty)) { throw new ArgumentNullException(nameof(groupid)); } SINnerSearchGroup ssg = null; var groupbyidseq = await(from a in _context.SINnerGroups .Include(a => a.MySettings) .Include(a => a.MyGroups) .ThenInclude(b => b.MyGroups) .ThenInclude(b => b.MyGroups) .ThenInclude(b => b.MyGroups) where a.Id == groupid select a).Take(1).ToListAsync(); foreach (var group in groupbyidseq) { if (group.MyGroups == null) { group.MyGroups = new List <SINnerGroup>(); } ssg = new SINnerSearchGroup(group); var members = await ssg.GetGroupMembers(_context); foreach (var member in members) { member.JsonSummary = null; member.MyGroup = null; SINnerSearchGroupMember ssgm = new SINnerSearchGroupMember { MySINner = member }; ssg.MyMembers.Add(ssgm); } foreach (var child in group.MyGroups) { var childresult = await GetSinSearchGroupResultById(child.Id); ssg.MySINSearchGroup = childresult; } } ssg.MyGroups = RemovePWHashRecursive(ssg.MyGroups); return(ssg); }
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member 'AccountController.GetSinnerAsAdmin()' public async Task <ActionResult <ResultGroupGetSearchGroups> > GetSinnerAsAdmin() #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member 'AccountController.GetSinnerAsAdmin()' { SINSearchGroupResult ret = new SINSearchGroupResult(); ResultAccountGetSinnersByAuthorization res = new ResultAccountGetSinnersByAuthorization(ret); SINnerGroup sg = new SINnerGroup(); var user = await _signInManager.UserManager.GetUserAsync(User); if (user == null) { var e = new AuthenticationException("User is not authenticated."); res = new ResultAccountGetSinnersByAuthorization(e) { ErrorText = "Unauthorized" }; return(BadRequest(res)); } user.FavoriteGroups = user.FavoriteGroups.GroupBy(a => a.FavoriteGuid).Select(b => b.First()).ToList(); SINnerSearchGroup ssg = new SINnerSearchGroup(sg, user) { MyMembers = new List <SINnerSearchGroupMember>() }; try { var roles = await _userManager.GetRolesAsync(user); ret.Roles = roles.ToList(); ssg.Groupname = user.Email; ssg.Id = Guid.Empty; //get all from visibility List <SINner> mySinners = await _context.SINners.Include(a => a.MyGroup) .Include(a => a.SINnerMetaData.Visibility.UserRights) .OrderByDescending(a => a.UploadDateTime) .Take(200) .ToListAsync(); foreach (var sin in mySinners) { SINnerSearchGroupMember ssgm = new SINnerSearchGroupMember(user, sin); ssg.MyMembers.Add(ssgm); if (sin.MyGroup != null) { SINnerSearchGroup ssgFromSIN = ssg.MySINSearchGroups.FirstOrDefault(a => a.Id == sin.MyGroup.Id); if (ssgFromSIN == null) { ssgFromSIN = new SINnerSearchGroup(sin.MyGroup, user); ssg.MySINSearchGroups.Add(ssgFromSIN); } //add all members of his group var members = await sin.MyGroup.GetGroupMembers(_context, false); foreach (var member in members) { member.MyGroup = sin.MyGroup; member.MyGroup.MyGroups = new List <SINnerGroup>(); SINnerSearchGroupMember sinssgGroupMember = new SINnerSearchGroupMember(user, member); ssgFromSIN.MyMembers.Add(sinssgGroupMember); } sin.MyGroup.PasswordHash = string.Empty; sin.MyGroup.MyGroups = new List <SINnerGroup>(); } } ret.SINGroups.Add(ssg); res = new ResultAccountGetSinnersByAuthorization(ret); return(Ok(res)); } catch (Exception e) { try { await _signInManager.UserManager.GetUserAsync(User); //var tc = new Microsoft.ApplicationInsights.TelemetryClient(); ExceptionTelemetry et = new ExceptionTelemetry(e); et.Properties.Add("user", User.Identity.Name); tc.TrackException(et); } catch (Exception ex) { _logger?.LogError(ex.ToString()); } res = new ResultAccountGetSinnersByAuthorization(e); return(BadRequest(res)); } }
private async Task <List <SINnerSearchGroup> > RecursiveBuildGroupMembers(IEnumerable <SINnerGroup> groupworklist, ApplicationUser user) { List <SINnerSearchGroup> addlist = new List <SINnerSearchGroup>(); foreach (var singroup in groupworklist) { if (singroup == null) { continue; } SINnerSearchGroup ssgFromSIN = addlist.FirstOrDefault(a => a.Id != null && a.Id == singroup.Id); if (ssgFromSIN == null) { if (singroup.Id == null) { _context.SINnerGroups.Remove(singroup); continue; } ssgFromSIN = new SINnerSearchGroup(singroup, user); addlist.Add(ssgFromSIN); //for all groups in this group ssgFromSIN.MySINSearchGroups = await RecursiveBuildGroupMembers(singroup.MyGroups, user); } //add all members of his group var members = await singroup.GetGroupMembers(_context, false); foreach (var member in members) { if (singroup.IsPublic != true) { if (member.SINnerMetaData?.Visibility?.IsGroupVisible == false) { if (member.SINnerMetaData?.Visibility.UserRights.Any(a => string.IsNullOrEmpty(a.EMail) == false) == true) { if (member.SINnerMetaData?.Visibility.UserRights.Any(a => a.EMail?.ToUpperInvariant() == user.NormalizedEmail) == false) { //dont show this guy! continue; } } } } member.LastDownload = DateTime.Now; member.MyGroup = singroup; member.MyGroup.MyGroups = new List <SINnerGroup>(); SINnerSearchGroupMember sinssgGroupMember = new SINnerSearchGroupMember(user, member) { MySINner = member }; //check if it is already added: if (ssgFromSIN.MyMembers.Any(a => a.MySINner == member)) { continue; } ssgFromSIN.MyMembers.Add(sinssgGroupMember); } singroup.PasswordHash = string.Empty; singroup.MyGroups = new List <SINnerGroup>(); } return(addlist); }
private async Task <ActionResult <ResultAccountGetSinnersByAuthorization> > GetSINnersByAuthorizationInternal() { Stopwatch sw = new Stopwatch(); sw.Start(); //var tc = new Microsoft.ApplicationInsights.TelemetryClient(); ResultAccountGetSinnersByAuthorization res = null; SINSearchGroupResult ret = new SINSearchGroupResult(); res = new ResultAccountGetSinnersByAuthorization(ret); SINnerGroup sg = new SINnerGroup(); var user = await _signInManager.UserManager.GetUserAsync(User); if (user == null) { var e = new AuthenticationException("User is not authenticated."); res = new ResultAccountGetSinnersByAuthorization(e) { ErrorText = "Unauthorized" }; return(BadRequest(res)); } user.FavoriteGroups = user.FavoriteGroups.GroupBy(a => a.FavoriteGuid).Select(b => b.First()).ToList(); SINnerSearchGroup ssg = new SINnerSearchGroup(sg, user) { MyMembers = new List <SINnerSearchGroupMember>() }; using (var t = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }, TransactionScopeAsyncFlowOption.Enabled)) { try { var roles = await _userManager.GetRolesAsync(user); ret.Roles = roles.ToList(); ssg.Groupname = user.UserName; ssg.Id = Guid.Empty; var worklist = user.FavoriteGroups.Select(a => a.FavoriteGuid).ToList(); var groupworklist = _context.SINnerGroups .Include(a => a.MyGroups) .ThenInclude(b => b.MyGroups) .ThenInclude(c => c.MyGroups) .ThenInclude(d => d.MyGroups) .Where(a => a.Id != null && worklist.Contains(a.Id.Value)); ssg.MySINSearchGroups = await RecursiveBuildGroupMembers(groupworklist, user); var memberworklist = _context.SINners .Include(a => a.MyGroup) .Include(a => a.SINnerMetaData.Visibility) .Where(a => a.Id != null && worklist.Contains(a.Id.Value)); foreach (var member in memberworklist) { if (member.SINnerMetaData?.Visibility?.IsGroupVisible == false) { if (member.SINnerMetaData?.Visibility.UserRights.Any(a => !string.IsNullOrEmpty(a.EMail)) == true) { if (member.SINnerMetaData?.Visibility.UserRights.Any(a => user.NormalizedEmail.Equals(a.EMail, StringComparison.OrdinalIgnoreCase)) == false) { //dont show this guy! continue; } } } member.LastDownload = DateTime.Now; if (member.MyGroup == null) { member.MyGroup = new SINnerGroup(); } if (member.MyGroup.MyGroups == null) { member.MyGroup.MyGroups = new List <SINnerGroup>(); } SINnerSearchGroupMember sinssgGroupMember = new SINnerSearchGroupMember(user, member) { MySINner = member }; ssg.MyMembers.Add(sinssgGroupMember); } await _context.SaveChangesAsync(); ret.SINGroups.Add(ssg); res = new ResultAccountGetSinnersByAuthorization(ret); return(Ok(res)); } catch (Exception e) { try { await _signInManager.UserManager.GetUserAsync(User); ExceptionTelemetry et = new ExceptionTelemetry(e); et.Properties.Add("user", User.Identity.Name); tc.TrackException(et); } catch (Exception ex) { _logger?.LogError(ex.ToString()); } res = new ResultAccountGetSinnersByAuthorization(e); return(BadRequest(res)); } finally { AvailabilityTelemetry telemetry = new AvailabilityTelemetry("GetSINnersByAuthorization", DateTimeOffset.Now, sw.Elapsed, "Azure", res.CallSuccess, res.ErrorText); tc?.TrackAvailability(telemetry); } } }
private async Task <ActionResult <ResultAccountGetSinnersByAuthorization> > GetSINnersByAuthorizationInternal() { Stopwatch sw = new Stopwatch(); sw.Start(); //var tc = new Microsoft.ApplicationInsights.TelemetryClient(); ResultAccountGetSinnersByAuthorization res = null; SINSearchGroupResult ret = new SINSearchGroupResult(); res = new ResultAccountGetSinnersByAuthorization(ret); SINnerGroup sg = new SINnerGroup(); SINnerSearchGroup ssg = new SINnerSearchGroup(sg) { MyMembers = new List <SINnerSearchGroupMember>() }; using (var t = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }, TransactionScopeAsyncFlowOption.Enabled)) { try { var user = await _signInManager.UserManager.GetUserAsync(User); if (user == null) { var e = new AuthenticationException("User is not authenticated."); res = new ResultAccountGetSinnersByAuthorization(e) { ErrorText = "Unauthorized" }; return(BadRequest(res)); } var roles = await _userManager.GetRolesAsync(user); ret.Roles = roles.ToList(); ssg.Groupname = user.UserName; ssg.Id = Guid.Empty; //get all from visibility List <SINner> mySinners = await SINner.GetSINnersFromUser(user, _context, true); MetricTelemetry mt = new MetricTelemetry("GetSINersByAuthorization", "SINners found", mySinners.Count, 0, 0, 0, 0); tc.TrackMetric(mt); foreach (var sin in mySinners) { //check if that char is already added: var foundseq = (from a in ssg.MyMembers where a.MySINner.Id == sin.Id select a); if (foundseq.Any()) { continue; } sin.LastDownload = DateTime.Now; SINnerSearchGroupMember ssgm = new SINnerSearchGroupMember { MySINner = sin, Username = user.UserName }; if (sin.MyGroup?.Id != null) { if (!user.FavoriteGroups.Any(a => a.FavoriteGuid == sin.MyGroup.Id.Value)) { user.FavoriteGroups.Add(new ApplicationUserFavoriteGroup() { FavoriteGuid = sin.MyGroup.Id.Value }); } } else { ssg.MyMembers.Add(ssgm); } } user.FavoriteGroups = user.FavoriteGroups.GroupBy(a => a.FavoriteGuid).Select(b => b.First()).ToList(); foreach (var singroupId in user.FavoriteGroups) { SINnerSearchGroup ssgFromSIN; var singroup = await _context.SINnerGroups.FirstOrDefaultAsync(a => a.Id == singroupId.FavoriteGuid); if (ssg.MySINSearchGroups.Any(a => a.Id == singroupId.FavoriteGuid)) { ssgFromSIN = ssg.MySINSearchGroups.FirstOrDefault(a => a.Id == singroupId.FavoriteGuid); } else { ssgFromSIN = new SINnerSearchGroup(singroup); ssg.MySINSearchGroups.Add(ssgFromSIN); } //add all members of his group var members = await singroup.GetGroupMembers(_context, false); foreach (var member in members) { member.LastDownload = DateTime.Now; member.MyGroup = singroup; member.MyGroup.MyGroups = new List <SINnerGroup>(); SINnerSearchGroupMember sinssgGroupMember = new SINnerSearchGroupMember { MySINner = member }; //check if it is already added: var groupseq = from a in ssgFromSIN.MyMembers where a.MySINner == member select a; if (groupseq.Any()) { continue; } ssgFromSIN.MyMembers.Add(sinssgGroupMember); //} } singroup.PasswordHash = ""; singroup.MyGroups = new List <SINnerGroup>(); } await _context.SaveChangesAsync(); ret.SINGroups.Add(ssg); res = new ResultAccountGetSinnersByAuthorization(ret); return(Ok(res)); } catch (Exception e) { try { var user = await _signInManager.UserManager.GetUserAsync(User); ExceptionTelemetry et = new ExceptionTelemetry(e); et.Properties.Add("user", User.Identity.Name); tc.TrackException(et); } catch (Exception ex) { _logger?.LogError(ex.ToString()); } res = new ResultAccountGetSinnersByAuthorization(e); return(BadRequest(res)); } finally { Microsoft.ApplicationInsights.DataContracts.AvailabilityTelemetry telemetry = new Microsoft.ApplicationInsights.DataContracts.AvailabilityTelemetry("GetSINnersByAuthorization", DateTimeOffset.Now, sw.Elapsed, "Azure", res?.CallSuccess ?? false, res?.ErrorText); tc.TrackAvailability(telemetry); } #pragma warning disable CS0162 // Unreachable code detected t.Complete(); #pragma warning restore CS0162 // Unreachable code detected } }
private async void TvGroupSearchResult_DragDrop(object sender, DragEventArgs e) { // Retrieve the client coordinates of the drop location. Point targetPoint = tvGroupSearchResult.PointToClient(new Point(e.X, e.Y)); // Retrieve the node at the drop location. TreeNode targetNode = tvGroupSearchResult.GetNodeAt(targetPoint); // Retrieve the node that was dragged. TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); // Sanity check if (draggedNode == null) { return; } SINnerSearchGroup draggedGroup = draggedNode.Tag as SINnerSearchGroup; SINnerSearchGroupMember draggedSINner = draggedNode.Tag as SINnerSearchGroupMember; SINnerSearchGroup targetGroup = null; TreeNode parentNode = targetNode; // Did the user drop on a valid target node? if (targetNode != null) { targetGroup = parentNode.Tag as SINnerSearchGroup; while (targetGroup == null && parentNode.Parent != null) { parentNode = parentNode.Parent; targetGroup = parentNode.Tag as SINnerSearchGroup; } } // Confirm that the node at the drop location is not // the dragged node and that target node isn't null // (for example if you drag outside the control) if (!draggedNode.Equals(targetNode) /* && targetNode != null*/) { bool canDrop = true; // Crawl our way up from the node we dropped on to find out if // if the target node is our parent. while (canDrop && (parentNode != null) && (targetGroup == null)) { canDrop = !Object.ReferenceEquals(draggedNode, parentNode); parentNode = parentNode.Parent; targetGroup = parentNode?.Tag as SINnerSearchGroup; targetNode = parentNode; } // Is this a valid drop location? if (canDrop) { // Yes. Move the node, expand it, and select it. var client = StaticUtils.GetClient(); if (draggedGroup != null) { var res = await client.PutGroupInGroupWithHttpMessagesAsync(draggedGroup.Id, draggedGroup.Groupname, targetGroup?.Id, draggedGroup.MyAdminIdentityRole, draggedGroup.IsPublic); if (res.Response.StatusCode == HttpStatusCode.OK) { MoveNode(draggedNode, targetNode); } } if ((draggedSINner?.MySINner?.MyGroup != null) && (targetGroup != null)) { if (targetGroup.Groupname == "My SINners") { var res = await client.DeleteLeaveGroupWithHttpMessagesAsync( draggedSINner.MySINner.MyGroup.Id, draggedSINner.MySINner.Id); var response = Backend.Utils.HandleError(res, res.Body); if (res.Response.StatusCode == HttpStatusCode.OK) { bSearch_Click(sender, e); } } if ((draggedSINner.MySINner.MyGroup?.Id == targetGroup.Id)) { return; } if (draggedSINner.MySINner.MyGroup == null && targetGroup.Id == null) { return; } try { var res = await client.PutSINerInGroupWithHttpMessagesAsync(targetGroup.Id, draggedSINner.MySINner.Id); var response = Backend.Utils.HandleError(res, res.Body); if (res.Response.StatusCode == HttpStatusCode.OK) { bSearch_Click(sender, e); } } catch (Exception exception) { await Backend.Utils.HandleError(exception); } } if ((draggedSINner?.MySINner?.MyGroup?.Id != null) && (targetNode == null)) { var res = await client.DeleteLeaveGroupWithHttpMessagesAsync( draggedSINner.MySINner.MyGroup.Id, draggedSINner.MySINner.Id); var response = Backend.Utils.HandleError(res, res.Body); if (res.Response.StatusCode == HttpStatusCode.OK) { MoveNode(draggedNode, targetNode); } } else if ((draggedSINner?.MySINner != null && (targetNode == null))) { var res = await client.PutSINerInGroupWithHttpMessagesAsync(null, draggedSINner.MySINner.Id); var response = Backend.Utils.HandleError(res, res.Body); if (res.Response.StatusCode == HttpStatusCode.OK) { MoveNode(draggedNode, targetNode); } } else if (draggedSINner != null && targetGroup != null) { var res = await client.PutSINerInGroupWithHttpMessagesAsync(targetGroup.Id, draggedSINner.MySINner.Id); var response = Backend.Utils.HandleError(res, res.Body); if (res.Response.StatusCode == HttpStatusCode.OK) { MoveNode(draggedNode, targetNode); } } } } // Optional: Select the dropped node and navigate (however you do it) tvGroupSearchResult.SelectedNode = draggedNode; // NavigateToContent(draggedNode.Tag); }
private async Task <ActionResult <SINSearchGroupResult> > GetSearchGroupsInternal(string Groupname, string UsernameOrEmail, string sINnerName, string language) { ApplicationUser user = null; try { if (!ModelState.IsValid) { var errors = ModelState.Select(x => x.Value.Errors) .Where(y => y.Count > 0) .ToList(); string msg = "ModelState is invalid: "; foreach (var err in errors) { foreach (var singleerr in err) { msg += Environment.NewLine + "\t" + singleerr.ToString(); } } return(BadRequest(new HubException(msg))); } SINSearchGroupResult result = new SINSearchGroupResult(); var groupfoundseq = await(from a in _context.SINnerGroups where a.Groupname.ToLowerInvariant().Contains(Groupname.ToLowerInvariant()) && (a.Language == language || String.IsNullOrEmpty(language)) select a.Id).ToListAsync(); if (!groupfoundseq.Any()) { return(NotFound(Groupname)); } foreach (var groupid in groupfoundseq) { var ssg = await GetSinSearchGroupResultById(groupid); result.SINGroups.Add(ssg); } if (!String.IsNullOrEmpty(UsernameOrEmail)) { List <SINner> byUser = new List <SINner>(); ApplicationUser bynameuser = await _userManager.FindByNameAsync(UsernameOrEmail); if (bynameuser != null) { var usersinners = await SINner.GetSINnersFromUser(bynameuser, _context, true); byUser.AddRange(usersinners); } ApplicationUser byemailuser = await _userManager.FindByEmailAsync(UsernameOrEmail); if ((byemailuser != null) && (byemailuser != bynameuser)) { var usersinners = await SINner.GetSINnersFromUser(byemailuser, _context, true); byUser.AddRange(usersinners); } foreach (var sin in byUser) { if (sin.MyGroup != null) { SINnerSearchGroup ssg = null; var foundseq = (from a in result.SINGroups where a.Groupname?.ToLowerInvariant() == sin.MyGroup?.Groupname.ToLowerInvariant() select a).ToList(); if (foundseq.Any()) { ssg = foundseq.FirstOrDefault(); } if (ssg == null) { ssg = new SINnerSearchGroup(sin.MyGroup); } ssg.Id = sin.MyGroup?.Id; SINnerSearchGroupMember ssgm = new SINnerSearchGroupMember(); ssgm.MySINner = sin; if (byemailuser != null) { ssgm.Username = byemailuser?.UserName; } if (bynameuser != null) { ssgm.Username = bynameuser?.UserName; } ssg.MyMembers.Add(ssgm); } } } result.SINGroups = RemovePWHashRecursive(result.SINGroups); return(Ok(result)); } catch (Exception e) { try { var tc = new Microsoft.ApplicationInsights.TelemetryClient(); Microsoft.ApplicationInsights.DataContracts.ExceptionTelemetry telemetry = new Microsoft.ApplicationInsights.DataContracts.ExceptionTelemetry(e); telemetry.Properties.Add("User", user?.Email); telemetry.Properties.Add("Groupname", Groupname?.ToString()); tc.TrackException(telemetry); } catch (Exception ex) { _logger.LogError(ex.ToString()); } if (e is HubException) { return(BadRequest(e)); } HubException hue = new HubException("Exception in GetSearchGroups: " + e.Message, e); return(BadRequest(hue)); } }
public async Task <ActionResult <SINSearchGroupResult> > GetSINnersByAuthorization() { SINSearchGroupResult ret = new SINSearchGroupResult(); SINnerGroup sg = new SINnerGroup(); SINnerSearchGroup ssg = new SINnerSearchGroup(sg) { MyMembers = new List <SINnerSearchGroupMember>() }; try { var user = await _signInManager.UserManager.GetUserAsync(User); if (user == null) { ret.ErrorText = "Unauthorized"; throw new AuthenticationException("User is not authenticated."); } var roles = await _userManager.GetRolesAsync(user); ret.Roles = roles.ToList(); ssg.Groupname = user.Email; ssg.Id = Guid.Empty; //get all from visibility //SINnersList list = new SINnersList(); List <SINner> mySinners = await SINner.GetSINnersFromUser(user, _context, true); foreach (var sin in mySinners) { SINnerSearchGroupMember ssgm = new SINnerSearchGroupMember { MySINner = sin, Username = user.UserName }; ssg.MyMembers.Add(ssgm); if (sin.MyGroup != null) { SINnerSearchGroup ssgFromSIN; if (ssg.MySINSearchGroups.Any(a => a.Id == sin.MyGroup.Id)) { ssgFromSIN = ssg.MySINSearchGroups.FirstOrDefault(a => a.Id == sin.MyGroup.Id); } else { ssgFromSIN = new SINnerSearchGroup(sin.MyGroup); ssg.MySINSearchGroups.Add(ssgFromSIN); } //add all members of his group var members = await sin.MyGroup.GetGroupMembers(_context); foreach (var member in members) { if ((member.SINnerMetaData.Visibility.IsGroupVisible == true) || (member.SINnerMetaData.Visibility.IsPublic) ) { member.MyGroup = sin.MyGroup; member.MyGroup.MyGroups = new List <SINnerGroup>(); SINnerSearchGroupMember sinssgGroupMember = new SINnerSearchGroupMember { MySINner = member }; ssgFromSIN.MyMembers.Add(sinssgGroupMember); } } sin.MyGroup.PasswordHash = ""; sin.MyGroup.MyGroups = new List <SINnerGroup>(); } } ret.SINGroups.Add(ssg); return(Ok(ret)); } catch (Exception e) { if (e is HubException) { return(BadRequest(e)); } HubException hue = new HubException(e.Message, e); return(BadRequest(hue)); } }