Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
717f928fedecede6e2b43fc7b3f792172a9e18e0
87a0bb7cdaaaaba31aa794d497f2da86f2450e29
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
# Identity Manager HTML5 applications

## Change log
### March 06, 2025
- 443363: Fixes an issue with typescript entities, while synchronizing in case of an error.
- 474677: Fixes an issue with the inheritance of memberships for `UNSGroupCollection`.
- 464626: Fixes an issue with hard coded FK candidate endpoints.
- 475616: Fixes an additional issue with navigating directly to the attestation, while an user is not authenticated.
- 475458: Fixes an issue with directing to the login page after an user is already authenticated.
- 477620: Fixes an issue with deleting shopping cart items, in case of cancellation.
- 456426: Fixes an issue on the product by reference page, if th user directly navigates to the page.
- 469349: Fixes additional issues with duplicated requests on data tables.
- 473064: Fixes an issue with duplicated requests for Data Explorer -> User Accounts page.
- 470237: Fixes additional issues with duplicated requests on data tables, that resulted in a bad state.

### February 20,2025
- Fixes some package-vulnerabilities
Expand Down
52 changes: 26 additions & 26 deletions imxweb/projects/aob/src/lib/aob-config.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,45 +26,45 @@

import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { RouterModule, Routes } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';

import { EuiCoreModule, EuiMaterialModule } from '@elemental-ui/core';
import { ClassloggerService, DocChapterService, DocDocument, HELP_CONTEXTUAL, RouteGuardService } from 'qbm';
import { TilesModule } from 'qer';
import { AobService } from './aob.service';
import { ApplicationsComponent } from './applications/applications.component';
import { ApplicationNavigationComponent } from './applications/application-navigation/application-navigation.component';
import { ApplicationDetailComponent } from './applications/application-detail.component';
import { ApplicationNavigationComponent } from './applications/application-navigation/application-navigation.component';
import { ApplicationsComponent } from './applications/applications.component';
import { ApplicationsModule } from './applications/applications.module';
import { EntitlementsModule } from './entitlements/entitlements.module';
import { StartPageModule } from './start-page/start-page.module';
import { AobApplicationsGuardService } from './guards/aob-applications-guard.service';
import { LockInfoAlertComponent } from './extensions/service-items-edit/lock-info-alert/lock-info-alert.component';
import { GlobalKpiComponent } from './global-kpi/global-kpi.component';
import { AobApplicationsGuardService } from './guards/aob-applications-guard.service';
import { AobKpiGuardService } from './guards/aob-kpi-guard.service';
import { LockInfoAlertComponent } from './extensions/service-items-edit/lock-info-alert/lock-info-alert.component';
import { StartPageModule } from './start-page/start-page.module';

const routes: Routes = [
{
path: 'applications/kpi',
component: GlobalKpiComponent,
canActivate: [RouteGuardService, AobKpiGuardService],
resolve: [RouteGuardService]
canActivate: [AobKpiGuardService],
resolve: [RouteGuardService],
},
{
path: 'applications',
component: ApplicationsComponent,
canActivate: [RouteGuardService, AobApplicationsGuardService],
canActivate: [AobApplicationsGuardService],
resolve: [RouteGuardService],
children: [
{
path: 'navigation',
component: ApplicationNavigationComponent,
canActivate: [RouteGuardService],
resolve: [RouteGuardService],
data:{
contextId: HELP_CONTEXTUAL.Applications
}
data: {
contextId: HELP_CONTEXTUAL.Applications,
},
},
{
path: 'detail',
Expand All @@ -75,7 +75,7 @@ const routes: Routes = [
},
{ path: ':create:id', redirectTo: 'applications', pathMatch: 'full' },
],
}
},
];

@NgModule({
Expand All @@ -90,14 +90,14 @@ const routes: Routes = [
TranslateModule,
RouterModule.forChild(routes),
],
declarations: [
LockInfoAlertComponent
],
declarations: [LockInfoAlertComponent],
})
export class AobConfigModule {
constructor(private readonly initializer: AobService,
constructor(
private readonly initializer: AobService,
private readonly docSvc: DocChapterService,
private readonly logger: ClassloggerService) {
private readonly logger: ClassloggerService
) {
this.logger.info(this, '🔥 AOB loaded');
this.initializer.onInit(routes);
this.configureDocPaths();
Expand All @@ -108,16 +108,16 @@ export class AobConfigModule {
// Web Portal for Application Governance User Guide
var appgovDoc: DocDocument = {
paths: {
"en-US": "imx/doc/OneIM_AOB_UserGuide_en-us.html5/OneIM_AOB_UserGuide.html",
"de-DE": "imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html",
"de-CH": "imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html",
"de-AT": "imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html"
}
'en-US': 'imx/doc/OneIM_AOB_UserGuide_en-us.html5/OneIM_AOB_UserGuide.html',
'de-DE': 'imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html',
'de-CH': 'imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html',
'de-AT': 'imx/doc/OneIM_AOB_UserGuide_de-de.html5/OneIM_AOB_UserGuide.html',
},
};

this.docSvc.chapters["applications"] = {
chapterUid: "35FE656D-A608-4B16-A55F-B758D5B72F75",
document: appgovDoc
this.docSvc.chapters['applications'] = {
chapterUid: '35FE656D-A608-4B16-A55F-B758D5B72F75',
document: appgovDoc,
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
*/

import { Injectable, OnDestroy } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { Observable, Subscription } from 'rxjs';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
import { Subscription } from 'rxjs';

import { AppConfigService, AuthenticationService, ISessionState } from 'qbm';
import { AppConfigService, AuthenticationService, RouteGuardService } from 'qbm';
import { AobPermissionsService } from '../permissions/aob-permissions.service';

@Injectable({
Expand All @@ -41,23 +41,21 @@ export class AobApplicationsGuardService implements CanActivate, OnDestroy {
private readonly aobPermissionService: AobPermissionsService,
private readonly authentication: AuthenticationService,
private readonly appConfig: AppConfigService,
private readonly router: Router
) { }
private readonly router: Router,
private readonly routeGuardService: RouteGuardService
) {}

public canActivate(): Observable<boolean> {
return new Observable<boolean>((observer) => {
this.onSessionResponse = this.authentication.onSessionResponse.subscribe(async (sessionState: ISessionState) => {
if (sessionState.IsLoggedIn) {
const isApplicationOwner = await this.aobPermissionService.isAobApplicationOwner();
const isApplicationAdmin = await this.aobPermissionService.isAobApplicationAdmin();
if (!isApplicationOwner && !isApplicationAdmin) {
this.router.navigate([this.appConfig.Config.routeConfig.start], { queryParams: {} });
}
observer.next(isApplicationOwner || isApplicationAdmin);
observer.complete();
}
});
});
public async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
if (await this.routeGuardService.canActivate(route, state)) {
const isApplicationOwner = await this.aobPermissionService.isAobApplicationOwner();
const isApplicationAdmin = await this.aobPermissionService.isAobApplicationAdmin();
if (!isApplicationOwner && !isApplicationAdmin) {
this.router.navigate([this.appConfig.Config.routeConfig.start], { queryParams: {} });
}
return isApplicationOwner || isApplicationAdmin;
}
this.router.navigate([this.appConfig.Config.routeConfig.login]);
return false;
}

public ngOnDestroy(): void {
Expand Down
34 changes: 16 additions & 18 deletions imxweb/projects/aob/src/lib/guards/aob-kpi-guard.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
*/

import { Injectable, OnDestroy } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { Observable, Subscription } from 'rxjs';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
import { Subscription } from 'rxjs';

import { AppConfigService, AuthenticationService, ISessionState } from 'qbm';
import { AppConfigService, AuthenticationService, RouteGuardService } from 'qbm';
import { AobPermissionsService } from '../permissions/aob-permissions.service';

@Injectable({
Expand All @@ -41,22 +41,20 @@ export class AobKpiGuardService implements CanActivate, OnDestroy {
private readonly aobPermissionService: AobPermissionsService,
private readonly authentication: AuthenticationService,
private readonly appConfig: AppConfigService,
private readonly router: Router
) { }
private readonly router: Router,
private readonly routeGuardService: RouteGuardService
) {}

public canActivate(): Observable<boolean> {
return new Observable<boolean>((observer) => {
this.onSessionResponse = this.authentication.onSessionResponse.subscribe(async (sessionState: ISessionState) => {
if (sessionState.IsLoggedIn) {
const isApplicationAdmin = await this.aobPermissionService.isAobApplicationAdmin();
if (!isApplicationAdmin) {
this.router.navigate([this.appConfig.Config.routeConfig.start], { queryParams: {} });
}
observer.next(isApplicationAdmin);
observer.complete();
}
});
});
public async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
if (await this.routeGuardService.canActivate(route, state)) {
const isApplicationAdmin = await this.aobPermissionService.isAobApplicationAdmin();
if (!isApplicationAdmin) {
this.router.navigate([this.appConfig.Config.routeConfig.start], { queryParams: {} });
}
return isApplicationAdmin;
}
this.router.navigate([this.appConfig.Config.routeConfig.login]);
return false;
}

public ngOnDestroy(): void {
Expand Down
50 changes: 23 additions & 27 deletions imxweb/projects/att/src/lib/att-config.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,32 @@ import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';
import { Routes, RouterModule } from '@angular/router';
import { RouterModule, Routes } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';

import { EuiCoreModule } from '@elemental-ui/core';
import { PolicyListComponent } from './policies/policy-list/policy-list.component';
import { PolicyGroupListComponent } from './policy-group/policy-group-list/policy-group-list.component';
import { ClassloggerService, HELP_CONTEXTUAL, RouteGuardService } from 'qbm';
import { InitService } from './init.service';
import { AttestationDecisionModule } from './decision/attestation-decision.module';
import { AttestationDecisionComponent } from './decision/attestation-decision.component';
import { DashboardPluginComponent } from './dashboard-plugin/dashboard-plugin.component';
import { AttestationRunsModule } from './runs/attestation-runs.module';
import { RunsComponent } from './runs/runs.component';
import { TilesModule } from 'qer';
import { AttestationHistoryWrapperComponent } from './attestation-history/attestation-history-wrapper.component';
import { AttestationFeatureGuardService } from './attestation-feature-guard.service';
import { PickCategoryComponent } from './pick-category/pick-category.component';
import { AttestionAdminGuardService } from './guards/attestation-admin-guard.service';
import { AttestationPoliciesGuardService } from './guards/attestation-policies-guard.service';
import { ClaimDeviceComponent } from './claim-device/claim-device.component';
import { AttestationHistoryWrapperComponent } from './attestation-history/attestation-history-wrapper.component';
import { MyAttestationCasesComponent } from './attestation-history/my-attestation-cases/my-attestation-cases.component';
import { ClaimDeviceComponent } from './claim-device/claim-device.component';
import { DashboardPluginComponent } from './dashboard-plugin/dashboard-plugin.component';
import { AttestationDecisionComponent } from './decision/attestation-decision.component';
import { AttestationDecisionModule } from './decision/attestation-decision.module';
import { AttestionAdminGuardService } from './guards/attestation-admin-guard.service';
import { HardwareGuardService } from './hardware-guard.service';
import { InitService } from './init.service';
import { PickCategoryComponent } from './pick-category/pick-category.component';
import { PolicyListComponent } from './policies/policy-list/policy-list.component';
import { PolicyGroupListComponent } from './policy-group/policy-group-list/policy-group-list.component';
import { AttestationRunsModule } from './runs/attestation-runs.module';
import { RunsComponent } from './runs/runs.component';
const routes: Routes = [
{
path: 'attestation/policies',
component: PolicyListComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService, AttestationPoliciesGuardService],
canActivate: [AttestationFeatureGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationPolicies,
Expand All @@ -63,7 +62,7 @@ const routes: Routes = [
{
path: 'attestation/runs',
component: RunsComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService, AttestationPoliciesGuardService],
canActivate: [AttestationFeatureGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationRuns,
Expand All @@ -72,7 +71,7 @@ const routes: Routes = [
{
path: 'attestation/history',
component: AttestationHistoryWrapperComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService],
canActivate: [AttestationFeatureGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationHistory,
Expand All @@ -81,7 +80,7 @@ const routes: Routes = [
{
path: 'attestation/decision',
component: AttestationDecisionComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService],
canActivate: [AttestationFeatureGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.PendingAttestations,
Expand All @@ -90,7 +89,7 @@ const routes: Routes = [
{
path: 'attestation/preselection',
component: PickCategoryComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService, AttestionAdminGuardService],
canActivate: [AttestationFeatureGuardService, AttestionAdminGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationPreselection,
Expand All @@ -108,7 +107,7 @@ const routes: Routes = [
{
path: 'attestation/policy-group',
component: PolicyGroupListComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService, AttestationPoliciesGuardService],
canActivate: [AttestationFeatureGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationPolicyCollections,
},
Expand All @@ -117,7 +116,7 @@ const routes: Routes = [
{
path: 'attestation/myattestationcases',
component: MyAttestationCasesComponent,
canActivate: [RouteGuardService, AttestationFeatureGuardService],
canActivate: [AttestationFeatureGuardService],
resolve: [RouteGuardService],
data: {
contextId: HELP_CONTEXTUAL.AttestationMyAttestationCases,
Expand All @@ -126,9 +125,7 @@ const routes: Routes = [
];

@NgModule({
declarations: [
DashboardPluginComponent
],
declarations: [DashboardPluginComponent],
imports: [
CommonModule,
TilesModule,
Expand All @@ -139,11 +136,10 @@ const routes: Routes = [
MatListModule,
TranslateModule,
EuiCoreModule,
]
],
})
export class AttConfigModule {
constructor(
private readonly initializer: InitService, private readonly logger: ClassloggerService) {
constructor(private readonly initializer: InitService, private readonly logger: ClassloggerService) {
this.logger.info(this, '🔥 ATT loaded');
this.initializer.onInit(routes);
this.logger.info(this, '▶️ ATT initialized');
Expand Down
Loading