Skip to content

Commit

Permalink
fix(OSP Invite): Handle shared theme
Browse files Browse the repository at this point in the history
  • Loading branch information
dhiren-singh-007 committed Aug 8, 2024
1 parent 4dea66d commit 1531170
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/********************************************************************************
* Copyright (c) 2022 BMW Group AG
* Copyright (c) 2022 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* SPDX-License-Identifier: Apache-2.0
********************************************************************************/

using Org.Eclipse.TractusX.Portal.Backend.PortalBackend.PortalEntities.Enums;

namespace Org.Eclipse.TractusX.Portal.Backend.PortalBackend.DBAccess.Models;

public record IdentityProviderForTheme(
string IamIdpAliases,
IdentityProviderTypeId IdentityProviderType
);
Original file line number Diff line number Diff line change
Expand Up @@ -205,15 +205,15 @@ public IQueryable<CompanyApplication> GetExternalCompanyApplicationsFilteredQuer
.SingleOrDefaultAsync();

/// <inheritdoc />
public Task<(Guid CompanyId, string CompanyName, string? BusinessPartnerNumber, IEnumerable<string> IamIdpAliasse, CompanyApplicationTypeId ApplicationTypeId, Guid? NetworkRegistrationProcessId)> GetCompanyAndApplicationDetailsForApprovalAsync(Guid applicationId) =>
public Task<(Guid CompanyId, string CompanyName, string? BusinessPartnerNumber, IEnumerable<IdentityProviderForTheme> IamIdps, CompanyApplicationTypeId ApplicationTypeId, Guid? NetworkRegistrationProcessId)> GetCompanyAndApplicationDetailsForApprovalAsync(Guid applicationId) =>
portalDbContext.CompanyApplications.Where(companyApplication =>
companyApplication.Id == applicationId &&
companyApplication.ApplicationStatusId == CompanyApplicationStatusId.SUBMITTED)
.Select(ca => new ValueTuple<Guid, string, string?, IEnumerable<string>, CompanyApplicationTypeId, Guid?>(
.Select(ca => new ValueTuple<Guid, string, string?, IEnumerable<IdentityProviderForTheme>, CompanyApplicationTypeId, Guid?>(
ca.CompanyId,
ca.Company!.Name,
ca.Company.BusinessPartnerNumber,
ca.Company.IdentityProviders.Select(x => x.IamIdentityProvider!.IamIdpAlias),
ca.Company.IdentityProviders.Select(x => new IdentityProviderForTheme(x.IamIdentityProvider!.IamIdpAlias, x.IamIdentityProvider!.IdentityProvider!.IdentityProviderTypeId)),
ca.CompanyApplicationTypeId,
ca.CompanyApplicationTypeId == CompanyApplicationTypeId.EXTERNAL ?
ca.Company.NetworkRegistration!.ProcessId :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public interface IApplicationRepository
Task<CompanyApplicationDetailData?> GetCompanyApplicationDetailDataAsync(Guid applicationId, Guid userCompanyId, Guid? companyId);
Task<(string CompanyName, string? FirstName, string? LastName, string? Email, IEnumerable<(Guid ApplicationId, CompanyApplicationStatusId ApplicationStatusId, IEnumerable<(string? FirstName, string? LastName, string? Email)> InvitedUsers)> Applications)> GetCompanyApplicationsDeclineData(Guid companyUserId, IEnumerable<CompanyApplicationStatusId> applicationStatusIds);
Task<(bool IsValidApplicationId, Guid CompanyId, bool IsSubmitted)> GetCompanyIdSubmissionStatusForApplication(Guid applicationId);
Task<(Guid CompanyId, string CompanyName, string? BusinessPartnerNumber, IEnumerable<string> IamIdpAliasse, CompanyApplicationTypeId ApplicationTypeId, Guid? NetworkRegistrationProcessId)> GetCompanyAndApplicationDetailsForApprovalAsync(Guid applicationId);
Task<(Guid CompanyId, string CompanyName, string? BusinessPartnerNumber, IEnumerable<IdentityProviderForTheme> IamIdps, CompanyApplicationTypeId ApplicationTypeId, Guid? NetworkRegistrationProcessId)> GetCompanyAndApplicationDetailsForApprovalAsync(Guid applicationId);
Task<(Guid CompanyId, string CompanyName, string? BusinessPartnerNumber)> GetCompanyAndApplicationDetailsForCreateWalletAsync(Guid applicationId);
IAsyncEnumerable<CompanyInvitedUserData> GetInvitedUsersDataByApplicationIdUntrackedAsync(Guid applicationId);
IAsyncEnumerable<EmailData> GetEmailDataUntrackedAsync(Guid applicationId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ public ApplicationActivationService(
{
throw new ConflictException($"CompanyApplication {context.ApplicationId} is not in status SUBMITTED");
}
var (companyId, companyName, businessPartnerNumber, iamIdp, applicationTypeId, networkRegistrationProcessId) = result;

var (companyId, companyName, businessPartnerNumber, iamIdpAliasse, applicationTypeId, networkRegistrationProcessId) = result;
if (string.IsNullOrWhiteSpace(businessPartnerNumber))
{
throw new ConflictException($"BusinessPartnerNumber (bpn) for CompanyApplications {context.ApplicationId} company {companyId} is empty");
Expand All @@ -99,7 +99,7 @@ public ApplicationActivationService(
var userRolesRepository = _portalRepositories.GetInstance<IUserRolesRepository>();
var assignedRoles = await AssignRolesAndBpn(context.ApplicationId, userRolesRepository, applicationRepository, businessPartnerNumber).ConfigureAwait(ConfigureAwaitOptions.None);
await RemoveRegistrationRoles(context.ApplicationId, userRolesRepository).ConfigureAwait(ConfigureAwaitOptions.None);
await SetTheme(iamIdpAliasse).ConfigureAwait(ConfigureAwaitOptions.None);
await SetTheme(iamIdp).ConfigureAwait(ConfigureAwaitOptions.None);

applicationRepository.AttachAndModifyCompanyApplication(context.ApplicationId, ca =>
{
Expand Down Expand Up @@ -247,11 +247,14 @@ await _provisioningManager.DeleteClientRolesFromCentralUserAsync(iamUserId, role
}
}

private async Task SetTheme(IEnumerable<string> iamIdpAliasse)
private async Task SetTheme(IEnumerable<IdentityProviderForTheme> iamIdps)
{
foreach (var alias in iamIdpAliasse)
foreach (var iamIdp in iamIdps)
{
await _provisioningManager.UpdateSharedRealmTheme(alias, _settings.LoginTheme).ConfigureAwait(false);
if (iamIdp.IdentityProviderType == IdentityProviderTypeId.SHARED)
{
await _provisioningManager.UpdateSharedRealmTheme(iamIdp.IamIdpAliases, _settings.LoginTheme).ConfigureAwait(false);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,7 @@ public async Task HandleApplicationActivation_WithoutCompanyApplication_ThrowsCo
Enumerable.Empty<ProcessStepTypeId>());

A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForApprovalAsync(applicationId))
.Returns<(Guid, string, string?, IEnumerable<string>, CompanyApplicationTypeId, Guid?)>(default);
.Returns<(Guid, string, string?, IEnumerable<IdentityProviderForTheme>, CompanyApplicationTypeId, Guid?)>(default);

//Act
async Task Action() => await _sut.HandleApplicationActivation(context, CancellationToken.None);
Expand Down Expand Up @@ -945,13 +945,13 @@ private void SetupFakes(
};

A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForApprovalAsync(A<Guid>.That.Matches(x => x == Id)))
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { IdpAlias }, CompanyApplicationTypeId.INTERNAL, null));
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { new IdentityProviderForTheme(IdpAlias, IdentityProviderTypeId.SHARED) }, CompanyApplicationTypeId.INTERNAL, null));
A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForApprovalAsync(A<Guid>.That.Matches(x => x == IdWithTypeExternal)))
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { IdpAlias }, CompanyApplicationTypeId.EXTERNAL, ProcessId));
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { new IdentityProviderForTheme(IdpAlias, IdentityProviderTypeId.SHARED) }, CompanyApplicationTypeId.EXTERNAL, ProcessId));
A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForApprovalAsync(A<Guid>.That.Matches(x => x == IdWithTypeExternalWithoutProcess)))
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { IdpAlias }, CompanyApplicationTypeId.EXTERNAL, null));
.Returns((company.Id, company.Name, company.BusinessPartnerNumber, new[] { new IdentityProviderForTheme(IdpAlias, IdentityProviderTypeId.SHARED) }, CompanyApplicationTypeId.EXTERNAL, null));
A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForApprovalAsync(A<Guid>.That.Matches(x => x == IdWithoutBpn)))
.Returns((IdWithoutBpn, null!, null, Enumerable.Empty<string>(), CompanyApplicationTypeId.INTERNAL, null));
.Returns((IdWithoutBpn, null!, null, Enumerable.Empty<IdentityProviderForTheme>(), CompanyApplicationTypeId.INTERNAL, null));

A.CallTo(() => _applicationRepository.GetCompanyAndApplicationDetailsForCreateWalletAsync(A<Guid>.That.Matches(x => x == Id)))
.Returns((company.Id, company.Name, company.BusinessPartnerNumber));
Expand Down

0 comments on commit 1531170

Please sign in to comment.