Skip to content

Commit fb0807f

Browse files
Various fixes for beta v3
1 parent dd8c5fc commit fb0807f

9 files changed

Lines changed: 51 additions & 35 deletions

File tree

source/GitHubApp/Controllers/OrchestratorController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ namespace GitHubApp.Controllers
1212
public class OrchestratorController : ControllerBase
1313
{
1414
private readonly IGitHubFacadeFactory gitHubFacadeFactory;
15-
private readonly IActiveDirectoryFacade activeDirectoryFacade;
15+
private readonly IActiveDirectoryFacade activeDirectoryFacade;
1616
private readonly AppOptions appOptions;
1717

1818
public OrchestratorController(IGitHubFacadeFactory gitHubFacadeFactory, IActiveDirectoryFacade activeDirectoryFacade, IOptions<AppOptions> appOptions)
1919
{
2020
this.gitHubFacadeFactory = gitHubFacadeFactory;
2121
this.activeDirectoryFacade = activeDirectoryFacade;
22-
this.appOptions = appOptions.Value;
22+
this.appOptions = appOptions.Value;
2323
}
2424

2525
[HttpPost(Name = "Sync All Orgs")]

source/GitHubApp/Controllers/SyncController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ namespace GitHubApp.Controllers
1010
public sealed class SyncController : ControllerBase
1111
{
1212
private readonly IGitHubFacadeFactory gitHubFacadeFactory;
13-
private readonly IActiveDirectoryFacade activeDirectoryFacade;
13+
private readonly IActiveDirectoryFacade activeDirectoryFacade;
1414
private readonly AppOptions appOptions;
1515

1616
public SyncController(IGitHubFacadeFactory gitHubFacadeFactory, IActiveDirectoryFacade activeDirectoryFacade, IOptions<AppOptions> appOptions)
1717
{
1818
this.gitHubFacadeFactory = gitHubFacadeFactory;
1919
this.activeDirectoryFacade = activeDirectoryFacade;
20-
this.appOptions = appOptions.Value;
20+
this.appOptions = appOptions.Value;
2121
}
2222

2323
[HttpGet(Name = "Syncronize Org")]
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace Gttsb.Gh
1+
namespace Gttsb.Core
22
{
33
public sealed class AppOptions
44
{
@@ -9,5 +9,6 @@ public sealed class AppOptions
99
// Perhaps it is user error on Josh's part.
1010
public Dictionary<string, string> EmailReplaceRules { get; init; } = new Dictionary<string, string>();
1111
public string[] EmailTextToReplaceRules { get; init; } = Array.Empty<string>();
12+
public string GitHubIdAppend { get; init; } = string.Empty;
1213
}
1314
}

source/Gttsb.Core/GroupSyncer.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
namespace Gttsb.Core
22
{
3-
internal sealed class GroupSyncer : IGroupSyncer
3+
public sealed class GroupSyncer : IGroupSyncer
44
{
55
private readonly IActiveDirectoryFacade _activeDirectoryFacade;
66
private readonly IInstalledGitHubFacade _gitHubFacade;
7-
private readonly IEmailToCloudIdConverter _emailToGitHubIdConverter;
7+
private readonly AppOptions _appOptions;
88

9-
public GroupSyncer(IActiveDirectoryFacade activeDirectoryFacade, IInstalledGitHubFacade gitHubFacade, IEmailToCloudIdConverter emailToCloudIdConverter)
9+
public GroupSyncer(IActiveDirectoryFacade activeDirectoryFacade, IInstalledGitHubFacade gitHubFacade, AppOptions appOptions)
1010
{
1111
_activeDirectoryFacade = activeDirectoryFacade;
1212
_gitHubFacade = gitHubFacade;
13-
_emailToGitHubIdConverter = emailToCloudIdConverter;
13+
_appOptions = appOptions;
1414
}
1515

1616
public Task<GroupSyncResult> SyncronizeGroupsAsync(string gitHubOrg, IEnumerable<TeamDefinition> teams, bool createDeployment) => SyncronizeGroupsAsync(gitHubOrg, teams, true, createDeployment);
@@ -140,14 +140,24 @@ private async Task<GroupSyncResult> SyncronizeGroupsAsync(string gitHubOrg, IEnu
140140
m.Id,
141141
m.DisplayName,
142142
m.Email,
143-
GitHubId = _emailToGitHubIdConverter.ToId(m.Email)
143+
GitHubId = m.PotentialGitHubId + _appOptions.GitHubIdAppend
144144
});
145145

146146
// Check if user is valid
147147
var validUsersForTeam = new List<ValidGitHubId>();
148148
var usersWithSyncIssues = new List<GitHubUser>();
149149
foreach (var user in groupMembersWithGitHubIds)
150150
{
151+
if(string.IsNullOrWhiteSpace(user.GitHubId))
152+
{
153+
usersWithSyncIssues.Add(new GitHubUser
154+
(
155+
Email: user.Email,
156+
GitHubId: new ValidGitHubId(user.GitHubId)
157+
));
158+
continue;
159+
}
160+
151161
var validUser = await _gitHubFacade.DoesUserExistAsync(user.GitHubId);
152162

153163
if (validUser == null)

source/Gttsb.Core/GroupSyncerBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
{
33
public static class GroupSyncerBuilder
44
{
5-
public static IGroupSyncer Build(IActiveDirectoryFacade adFacade, IInstalledGitHubFacade gFacade, IEmailToCloudIdConverter emailToCloudIdConverter)
5+
public static IGroupSyncer Build(IActiveDirectoryFacade adFacade, IInstalledGitHubFacade gFacade, AppOptions appOptions)
66
{
7-
return new GroupSyncer(adFacade, gFacade, emailToCloudIdConverter);
7+
return new GroupSyncer(adFacade, gFacade, appOptions);
88
}
99
}
1010
}

source/Gttsb.Core/Member.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
namespace Gttsb.Core
22
{
3-
public record Member(string DisplayName, string Email, string Id);
3+
public record Member(string DisplayName, string Email, string Id, string PotentialGitHubId);
44
}

source/Gttsb.Gh/ActiveDirectoryFacade.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,36 @@ public async Task<MembersResponse> FetchMembersAsync(string groupDisplayName)
2929
return new MembersResponse(Success: false, Enumerable.Empty<Member>());
3030
}
3131

32-
var groupInQuestion = groups[0];
32+
var groupInQuestion = groups[0];
3333

34+
// TODO: do proper "string escape" here
35+
var filteredExtensionName = _azureOptions.ExtensionPropertyWithGitHubId.Replace(";", "").Replace(",", "").ReplaceLineEndings("").Replace(" ", "");
3436
var members = await _graphServiceClient.Groups[groupInQuestion.Id].Members
35-
.Request()
36-
.Select("id,mail,displayName")
37+
.Request()
38+
.Select($"id,mail,displayName,{filteredExtensionName}")
3739
.GetAsync();
3840

3941
Func<User, Member> memberToUser = (User m) => {
4042
// TODO: handle exception case?
41-
var asUser = m;
43+
44+
if(m.AdditionalData.TryGetValue(filteredExtensionName, out var gitHubId))
45+
{
46+
return new Member
47+
(
48+
DisplayName: m.DisplayName,
49+
Email: m.Mail,
50+
Id: m.Id,
51+
PotentialGitHubId: gitHubId.ToString() ?? string.Empty
52+
);
53+
}
54+
4255
return new Member
43-
(
44-
DisplayName: asUser.DisplayName,
45-
Email: asUser.Mail,
46-
Id: asUser.Id
47-
);
56+
(
57+
DisplayName: m.DisplayName,
58+
Email: m.Mail,
59+
Id: m.Id,
60+
PotentialGitHubId: string.Empty
61+
);
4862
};
4963

5064
var users = members.Select(m => memberToUser((User)m)).ToList();

source/Gttsb.Gh/Bootstrap.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,7 @@ public static async Task<bool> StartTeamSyncAsync(IActiveDirectoryFacade activeD
4141
var securityManagers = inputs.SecurityManagerTeams.Concat(appOptions.SecurityManagerTeams).Distinct().ToList();
4242
var groupDisplayNames = inputs.GitHubTeamNames.Concat(new[] { inputs.OrganizationMembersGroup }).Concat(securityManagers).Distinct().ToDictionary(t => t);
4343

44-
var org = gitHubFacade.OrgName;
45-
46-
var emailReplaceRuleDictionaries = new[] { inputs.EmailReplaceRules, appOptions.EmailReplaceRules };
47-
var emailReplaceRules = emailReplaceRuleDictionaries
48-
.SelectMany(d => d)
49-
.ToLookup(p => p.Key, p => p.Value)
50-
.ToDictionary(g => g.Key, g => g.First());
51-
var itemsToReplaceRules = inputs.EmailTextToReplaceRules.Concat(appOptions.EmailTextToReplaceRules);
52-
53-
var emailToCloudIdBuilder = EmailToCloudIdBuilder.Build(string.Empty, inputs.EmailAppend, itemsToReplaceRules, emailReplaceRules);
54-
55-
var groupSyncer = GroupSyncerBuilder.Build(activeDirectoryFacade, gitHubFacade, emailToCloudIdBuilder);
44+
var org = gitHubFacade.OrgName;
5645

5746
var groupsToSyncronize = groupDisplayNames.Select(g => new
5847
{
@@ -68,6 +57,8 @@ public static async Task<bool> StartTeamSyncAsync(IActiveDirectoryFacade activeD
6857

6958
var usersWithSyncIssues = new List<GitHubUser>();
7059

60+
var groupSyncer = GroupSyncerBuilder.Build(activeDirectoryFacade, gitHubFacade, appOptions);
61+
7162
if (securityManagers.Any())
7263
{
7364
var memberSyncResult = await groupSyncer.SyncronizeMembersAsync(org, securityManagers.Select(s => groupsToSyncronize[s]).ToArray());

source/Gttsb.Gh/InstalledGitHubFacade.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public async Task<IReadOnlyDictionary<string, GitHubTeam>> GetAllTeamsAsync(stri
5555

5656
var result = await graphQlClient.Run(query);
5757

58-
return result.ToDictionary(t=> t.Name, t => new GitHubTeam(t.DatabaseId, t.Name, t.Members.Select(m => new GitHubUser(m.Email, new ValidGitHubId(m.Login))).ToList()));
58+
return result.ToDictionary(t=> t.Name, t => new GitHubTeam(t.DatabaseId, t.Name, t.Members.Select(m => new GitHubUser(m.Email, new ValidGitHubId(m.Login))).ToList()), StringComparer.InvariantCultureIgnoreCase);
5959
}
6060

6161
public async Task AddTeamMemberAsync(GitHubTeam team, ValidGitHubId userGitHubId)

0 commit comments

Comments
 (0)