Skip to content

Commit

Permalink
fix(registration): fixed the company name change in IDP
Browse files Browse the repository at this point in the history
  • Loading branch information
dhiren-singh-007 committed Sep 19, 2024
1 parent 9a261d8 commit 72a65e3
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,5 @@ public interface IProvisioningManager
Task<string?> GetIdentityProviderDisplayName(string alias);
Task DeleteSharedRealmAsync(string alias);
Task DeleteIdpSharedServiceAccount(string alias);
ValueTask UpdateCentralIdentityProviderMapperAsync(string idpAlias, string companyName);
}
25 changes: 25 additions & 0 deletions src/provisioning/Provisioning.Library/ProvisioningManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using Org.Eclipse.TractusX.Portal.Backend.Keycloak.ErrorHandling;
using Org.Eclipse.TractusX.Portal.Backend.Keycloak.Factory;
using Org.Eclipse.TractusX.Portal.Backend.Keycloak.Library;
using Org.Eclipse.TractusX.Portal.Backend.Keycloak.Library.Models.IdentityProviders;
using Org.Eclipse.TractusX.Portal.Backend.Provisioning.DBAccess;
using Org.Eclipse.TractusX.Portal.Backend.Provisioning.Library.Enums;
using Org.Eclipse.TractusX.Portal.Backend.Provisioning.Library.Models;
Expand Down Expand Up @@ -182,6 +183,30 @@ public async ValueTask UpdateSharedIdentityProviderAsync(string alias, string di
await UpdateCentralIdentityProviderAsync(alias, identityProvider).ConfigureAwait(ConfigureAwaitOptions.None);
}

public async ValueTask UpdateCentralIdentityProviderMapperAsync(string alias, string displayName)
{
var mappers = await _centralIdp.GetIdentityProviderMappersAsync(_settings.CentralRealm, alias).ConfigureAwait(ConfigureAwaitOptions.None);
var organisationMapperId = mappers.FirstOrDefault(z => z.Name == $"{_settings.MappedCompanyAttribute}-mapper")?.Id ?? string.Empty;
await UpdateAttributeInIdentityProvider(alias, organisationMapperId, _settings.MappedCompanyAttribute, displayName);
}

private async Task UpdateAttributeInIdentityProvider(string alias, string mapperId, string attributeName, string value) => await _centralIdp.UpdateIdentityProviderMapperAsync(
_settings.CentralRealm,
alias,
mapperId,
new IdentityProviderMapper
{
Id = mapperId,
Name = attributeName + "-mapper",
_IdentityProviderMapper = "hardcoded-attribute-idp-mapper",
IdentityProviderAlias = alias,
Config = new Dictionary<string, string>
{
["syncMode"] = "INHERIT",
["attribute"] = attributeName,
["attribute.value"] = value
}
}).ConfigureAwait(ConfigureAwaitOptions.None);
public async ValueTask UpdateSharedRealmTheme(string alias, string loginTheme)
{
var identityProvider = await GetCentralIdentityProviderAsync(alias).ConfigureAwait(ConfigureAwaitOptions.None);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ public interface IUserProvisioningService
Task<IEnumerable<UserRoleData>> GetOwnCompanyPortalRoleDatas(string clientId, IEnumerable<string> roles, Guid companyId);
Task<(Identity? Identity, Guid CompanyUserId)> GetOrCreateCompanyUser(IUserRepository userRepository, string alias, UserCreationRoleDataIdpInfo user, Guid companyId, Guid identityProviderId, string? businessPartnerNumber);
Task AssignRolesToNewUserAsync(IUserRolesRepository userRolesRepository, IEnumerable<UserRoleData> roleDatas, (string IamUserId, Guid CompanyUserId) userdata);
Task UpdateCompanyNameInIdentityProvider(Guid identityId, string companyName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -337,4 +337,11 @@ private static void ValidateRoleData(IEnumerable<UserRoleData> roleData, string
throw new ControllerArgumentException($"invalid roles: clientId: '{clientId}', roles: [{string.Join(", ", invalid)}]");
}
}

public async Task UpdateCompanyNameInIdentityProvider(Guid identityId, string companyName)
{
var (aliasData, _) = await GetCompanyNameSharedIdpAliasData(identityId).ConfigureAwait(ConfigureAwaitOptions.None);
await _provisioningManager.UpdateSharedIdentityProviderAsync(aliasData.IdpAlias, companyName).ConfigureAwait(false);
await _provisioningManager.UpdateCentralIdentityProviderMapperAsync(aliasData.IdpAlias, companyName).ConfigureAwait(false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -249,15 +249,18 @@ await companyDetails.ValidateDatabaseData(
var companyRepository = portalRepositories.GetInstance<ICompanyRepository>();

var companyApplicationData = await GetAndValidateApplicationData(applicationId, companyDetails, applicationRepository).ConfigureAwait(ConfigureAwaitOptions.None);

var existingCompanyName = companyApplicationData.Name;
var addressId = CreateOrModifyAddress(companyApplicationData, companyDetails, companyRepository);

ModifyCompany(addressId, companyApplicationData, companyDetails, companyRepository);

companyRepository.CreateUpdateDeleteIdentifiers(companyDetails.CompanyId, companyApplicationData.UniqueIds, companyDetails.UniqueIds.Select(x => (x.UniqueIdentifierId, x.Value)));

UpdateApplicationStatus(applicationId, companyApplicationData.ApplicationStatusId, UpdateApplicationSteps.CompanyWithAddress, applicationRepository, dateTimeProvider);

if (existingCompanyName != companyDetails.Name)
{
await userProvisioningService.UpdateCompanyNameInIdentityProvider(_identityData.IdentityId, companyDetails.Name);
}
await portalRepositories.SaveAsync().ConfigureAwait(ConfigureAwaitOptions.None);
}

Expand Down

0 comments on commit 72a65e3

Please sign in to comment.