Skip to content

Commit 5a7ea90

Browse files
committed
Expand IdentityItemData to have more properties available
1 parent ff04fef commit 5a7ea90

File tree

5 files changed

+22
-11
lines changed

5 files changed

+22
-11
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />
4141
<PackageVersion Include="OxyPlot.Core" Version="2.2.0" />
4242
<PackageVersion Include="OxyPlot.ImageSharp" Version="2.2.0" />
43+
<PackageVersion Include="Riok.Mapperly" Version="4.1.0" />
4344
<PackageVersion Include="Serilog" Version="4.0.1" />
4445
<PackageVersion Include="Serilog.Enrichers.Environment" Version="3.0.1" />
4546
<PackageVersion Include="Serilog.Enrichers.Process" Version="3.0.0" />

src/MigrationTools.Clients.TfsObjectModel/MigrationTools.Clients.TfsObjectModel.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
<PackageReference Include="OpenTelemetry.Exporter.Console" />
4141
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
4242
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
43+
<PackageReference Include="Riok.Mapperly" />
4344
<PackageReference Include="TfsUrlParser" />
4445
</ItemGroup>
4546

src/MigrationTools.Clients.TfsObjectModel/Processors/TfsExportUsersForMappingProcessor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ protected override void InternalExecute()
6565
Log.LogInformation("Found {usersToMap} total mapped", usersToMap.Count);
6666
}
6767

68-
usersToMap = usersToMap.Where(x => x.Source.FriendlyName != x.Target?.FriendlyName).ToList();
68+
usersToMap = usersToMap.Where(x => x.Source.DisplayName != x.Target?.DisplayName).ToList();
6969
Log.LogInformation("Filtered to {usersToMap} total viable mappings", usersToMap.Count);
7070
Dictionary<string, string> usermappings = [];
7171
foreach (IdentityMapData userMapping in usersToMap)
7272
{
73-
// We cannot use ToDictionary(), because there can be multiple users with the same friendly name and so
73+
// We cannot use ToDictionary(), because there can be multiple users with the same display name and so
7474
// it would throw with duplicate key. This way we just overwrite the value – last item in source wins.
75-
usermappings[userMapping.Source.FriendlyName] = userMapping.Target?.FriendlyName;
75+
usermappings[userMapping.Source.DisplayName] = userMapping.Target?.DisplayName;
7676
}
7777
System.IO.File.WriteAllText(CommonTools.UserMapping.Options.UserMappingFile, JsonConvert.SerializeObject(usermappings, Formatting.Indented));
7878
Log.LogInformation("Writen to: {LocalExportJsonFile}", CommonTools.UserMapping.Options.UserMappingFile);

src/MigrationTools.Clients.TfsObjectModel/Tools/TfsUserMappingTool.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using MigrationTools.DataContracts;
99
using MigrationTools.Processors.Infrastructure;
1010
using MigrationTools.Tools.Infrastructure;
11+
using Riok.Mapperly.Abstractions;
1112

1213
namespace MigrationTools.Tools
1314
{
@@ -23,6 +24,7 @@ public TfsUserMappingTool(IOptions<TfsUserMappingToolOptions> options, IServiceP
2324
}
2425

2526
private readonly CaseInsensitiveStringComparer _workItemNameComparer = new();
27+
private readonly TfsUserMappingToolMapper _mapper = new();
2628

2729
private HashSet<string> GetUsersFromWorkItems(List<WorkItemData> workitems, List<string> identityFieldsToCheck)
2830
{
@@ -76,7 +78,7 @@ private Dictionary<string, string> GetMappingFileData()
7678
try
7779
{
7880
var fileMaps = Newtonsoft.Json.JsonConvert.DeserializeObject<List<IdentityMapData>>(fileData);
79-
_UserMappings = fileMaps.ToDictionary(x => x.Source.FriendlyName, x => x.Target?.FriendlyName);
81+
_UserMappings = fileMaps.ToDictionary(x => x.Source.DisplayName, x => x.Target?.DisplayName);
8082
}
8183
catch (Exception)
8284
{
@@ -106,11 +108,7 @@ private List<IdentityItemData> GetUsersListFromServer(IGroupSecurityService gss)
106108
else if ((identity.Type == IdentityType.WindowsUser) || (identity.Type == IdentityType.UnknownIdentityType))
107109
{
108110
// UnknownIdentityType is set for users in Azure Entra ID.
109-
foundUsers.Add(new IdentityItemData()
110-
{
111-
FriendlyName = identity.DisplayName,
112-
AccountName = identity.AccountName
113-
});
111+
foundUsers.Add(_mapper.IdentityToIdentityItemData(identity));
114112
}
115113
else
116114
{
@@ -154,7 +152,7 @@ public List<IdentityMapData> GetUsersInSourceMappedToTargetForWorkItems(TfsProce
154152
Log.LogDebug($"TfsUserMappingTool::GetUsersInSourceMappedToTargetForWorkItems [workItemUsers|{workItemUsers.Count}]");
155153
List<IdentityMapData> mappedUsers = GetUsersInSourceMappedToTarget(processor);
156154
Log.LogDebug($"TfsUserMappingTool::GetUsersInSourceMappedToTargetForWorkItems [mappedUsers|{mappedUsers.Count}]");
157-
return mappedUsers.Where(x => workItemUsers.Contains(x.Source.FriendlyName)).ToList();
155+
return mappedUsers.Where(x => workItemUsers.Contains(x.Source.DisplayName)).ToList();
158156
}
159157
else
160158
{
@@ -176,4 +174,12 @@ public int GetHashCode(string obj)
176174
return obj.GetHashCode();
177175
}
178176
}
177+
178+
[Mapper]
179+
internal partial class TfsUserMappingToolMapper
180+
{
181+
#pragma warning disable RMG020 // Source member is not mapped to any target member
182+
public partial IdentityItemData IdentityToIdentityItemData(Identity identity);
183+
#pragma warning restore RMG020 // Source member is not mapped to any target member
184+
}
179185
}

src/MigrationTools/DataContracts/IdentityItemData.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
{
33
public class IdentityItemData
44
{
5-
public string FriendlyName { get; set; }
5+
public string Sid { get; set; }
6+
public string DisplayName { get; set; }
7+
public string Domain { get; set; }
68
public string AccountName { get; set; }
9+
public string MailAddress { get; set; }
710
}
811

912
public class IdentityMapData

0 commit comments

Comments
 (0)