public static IEnumerable <CachedUser> GetAdministrators(this CachedRepo repo) { var result = repo.Users .Where(ua => ua.Permission == CachedPermission.Admin && !ua.User.IsBot() && !ua.Describe().IsOwner) .Select(ua => ua.User); if (!result.Any()) { return(repo.Org.GetOwners()); } return(result); }
public PolicyViolation(PolicyDescriptor descriptor, string title, string body, CachedOrg org, CachedRepo repo = null, CachedTeam team = null, CachedUser user = null, IReadOnlyCollection <CachedUser> assignees = null) { Descriptor = descriptor; Fingerprint = ComputeFingerprint(descriptor.DiagnosticId, repo, user, team); Title = title; Body = UnindentAndTrim(body); Org = org; Repo = repo; Team = team; User = user; Assignees = ComputeAssignees(org, repo, team, user, assignees); }
private static Guid ComputeFingerprint(string diagnosticId, CachedRepo repo, CachedUser user, CachedTeam team) { using (var fingerprintBytes = new MemoryStream()) using (var md5 = MD5.Create()) { using (var writer = new StreamWriter(fingerprintBytes, Encoding.UTF8, 2048, leaveOpen: true)) { writer.WriteLine(diagnosticId); writer.WriteLine(repo?.Org.Name); writer.WriteLine(repo?.Name); writer.WriteLine(user?.Login); writer.WriteLine(team?.Name); } fingerprintBytes.Position = 0; var hashBytes = md5.ComputeHash(fingerprintBytes); return(new Guid(hashBytes)); } }
private static IReadOnlyCollection <CachedUser> ComputeAssignees(CachedOrg org, CachedRepo repo, CachedTeam team, CachedUser user, IReadOnlyCollection <CachedUser> assignees) { if (assignees != null && assignees.Count > 0) { return(assignees); } if (repo != null) { return(repo.GetAdministrators().ToArray()); } if (team != null) { return(team.GetMaintainers().ToArray()); } if (user != null) { return new[] { user } } ; return(org.GetOwners().ToArray()); }
public static bool IsOwnedByMicrosoft(this CachedRepo repo) { var microsoftTeam = repo.Org.GetMicrosoftTeam(); return(repo.Teams.Any(ta => ta.Team == microsoftTeam)); }
public static string Markdown(this CachedRepo repo) { return($"[{repo.Name}]({repo.Url})"); }