Skip to content

Commit

Permalink
set tenant and save it to avoid bug multi tenant
Browse files Browse the repository at this point in the history
  • Loading branch information
laedanrex committed Jun 19, 2023
1 parent dbda331 commit 0eb6e0f
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 76 deletions.
3 changes: 2 additions & 1 deletion ui/ui-frontend-common/src/app/modules/active-tenant.guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import { AuthService } from './auth.service';
import { GlobalEventService } from './global-event.service';
import { WINDOW_LOCATION } from './injection-tokens';
import { Tenant } from './models';
import { TenantsByApplication } from './models/user/tenants-by-application.interface';
import { TenantsByApplication } from './models';
import { StartupService } from './startup.service';

@Injectable({
Expand Down Expand Up @@ -76,6 +76,7 @@ export class ActiveTenantGuard implements CanActivate, CanActivateChild {
const result = tenantsByApp.tenants.find((tenant: Tenant) => tenant.identifier === +tenantIdentifier);
if (result) {
// set tenant Identifier whenever a tenant is selected
console.log('ActiveTenantGuard.checkTenants -> startupService.setTenantIdentifier ' + tenantIdentifier);
this.startupService.setTenantIdentifier(tenantIdentifier);
// emit tenant change event
this.globalEventService.tenantEvent.next(tenantIdentifier);
Expand Down
5 changes: 3 additions & 2 deletions ui/ui-frontend-common/src/app/modules/app.guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export class AppGuard implements CanActivate {
private globalEventService: GlobalEventService,
@Inject(WINDOW_LOCATION) private location: any,
private translateService: TranslateService
) {}
) {}

canActivate(
next: ActivatedRouteSnapshot
Expand All @@ -77,11 +77,12 @@ export class AppGuard implements CanActivate {

this.startupService.CURRENT_APP_ID = appId;

this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
this.translateService.onLangChange.subscribe((_: LangChangeEvent) => {
this.titleService.setTitle(this.translateService.instant(APPLICATION_TRANSLATE_PATH + '.' + appId + '.NAME'));
});

// set user default tenant Identifier whenever we switch pages
console.log('AppGuard.canActivate -> startupService.setTenantIdentifier WITHOUT PARAMS');
this.startupService.setTenantIdentifier();
// emit page change event
this.globalEventService.pageEvent.next(appId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';

import { ApplicationId } from '../../../application-id.enum';
import { StartupService } from '../../../startup.service';
import { CommonMenuComponent } from '../common-menu/common-menu.component';
import { MenuType } from '../menu-type.enum';
import { TenantMenuService } from './tenant-menu.service';
Expand All @@ -63,6 +64,7 @@ export class TenantMenuComponent implements OnInit, OnDestroy {
private tenantSelection: Subscription;

constructor(
private startupService: StartupService,
public tenantMenuService: TenantMenuService,
public dialog: MatDialog,
private route: ActivatedRoute) { }
Expand All @@ -71,10 +73,14 @@ export class TenantMenuComponent implements OnInit, OnDestroy {
this.tenantMenuService.appId = this.appId;
this.route.paramMap.subscribe((params: any) => {
this.tenantMenuService.activeTenantIdentifier = +params.get('tenantIdentifier');
console.log('TenantMenuComponent.route.subscribe activeTenantIdentifier = ' + this.tenantMenuService.activeTenantIdentifier);
});
this.tenantSelection = this.tenantMenuService.getSelectedTenant().subscribe((tenantIdentifier) => {
console.log('TenantMenuComponent.getSelectedTenant tenantIdentifier = ' + tenantIdentifier);
if (tenantIdentifier !== this.tenantMenuService.activeTenantIdentifier) {
this.tenantMenuService.activeTenantIdentifier = tenantIdentifier;
console.log(' startupService.setTenantIdentifier ' + tenantIdentifier);
this.startupService.setTenantIdentifier(tenantIdentifier.toString());
this.emitTenantIdentifierChange(tenantIdentifier);
}
});
Expand Down
16 changes: 13 additions & 3 deletions ui/ui-frontend-common/src/app/modules/startup.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@ import { ApplicationId } from './application-id.enum';
import { ApplicationService } from './application.service';
import { AuthService } from './auth.service';
import { WINDOW_LOCATION } from './injection-tokens';
import { Logger } from './logger/logger';
import { Logger } from './logger';
import { AppConfiguration, AttachmentType, AuthUser, UserInfo } from './models';
import { ThemeService } from './theme.service';

const WARNING_DURATION = 2000;

@Injectable({
providedIn: 'root',
})
Expand Down Expand Up @@ -121,15 +122,24 @@ export class StartupService {
}

setTenantIdentifier(tenantIdentifier?: string) {
this.CURRENT_TENANT_IDENTIFIER = tenantIdentifier;
console.log(' StartupService.setTenantIdentifier : ' + tenantIdentifier);
if (tenantIdentifier) {
console.log(' setted');
this.CURRENT_TENANT_IDENTIFIER = tenantIdentifier;
} else {
console.log(' unchanged, actual = ' + this.CURRENT_TENANT_IDENTIFIER);
}
}

getTenantIdentifier() {
console.log(' StartupService.getTenantIdentifier');
let tenantIdentifier = this.CURRENT_TENANT_IDENTIFIER;
if (!tenantIdentifier && this.authService.user) {
console.log(' undefined -> return proofTenantIdentifier (but not saved)');
tenantIdentifier = this.authService.user.proofTenantIdentifier;
} else {
console.log(' defined = ' + tenantIdentifier);
}

return tenantIdentifier;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { AuthService } from './auth.service';
import { ErrorDialogComponent } from './error-dialog/error-dialog.component';
import { ENVIRONMENT, WINDOW_LOCATION } from './injection-tokens';
import { Logger } from './logger/logger';
import { Logger } from './logger';
import { StartupService } from './startup.service';

import { VitamUISnackBarService } from './components/vitamui-snack-bar/vitamui-snack-bar.service';
import { VitamUISnackBarService } from './components/vitamui-snack-bar';
import { SKIP_ERROR_NOTIFICATION } from './utils';

import { VitamUITimeoutError } from './models/http-interceptor/vitamui-timeout-error';
Expand All @@ -70,6 +70,7 @@ const ERROR_NOTIFICATION_MESSAGE_BY_HTTP_STATUS: Map<number, string> = new Map([
[412, 'EXCEPTIONS.HTTP_INTERCEPTOR.HTTP_STATUS_PRECONDITION_FAILED_EXCEPTION'],
[408, 'EXCEPTIONS.HTTP_INTERCEPTOR.HTTP_STATUS_CODE_REQUEST_TIMEOUT'],
]);

@Injectable()
export class VitamUIHttpInterceptor implements HttpInterceptor {
private errorDialog: MatDialogRef<ErrorDialogComponent>;
Expand All @@ -91,9 +92,14 @@ export class VitamUIHttpInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.initSnackBarService();

console.log('VitamUIHttpInterceptor.intercept :');
let tenantIdentifier = request.headers.get('X-Tenant-Id');
if ((!tenantIdentifier || tenantIdentifier === undefined || tenantIdentifier === '') && this.authService.user) {
console.log(' X-Tenant-Id received = ' + tenantIdentifier);
if ((!tenantIdentifier || tenantIdentifier === '') && this.authService.user) {
tenantIdentifier = this.startupService.getTenantIdentifier();
console.log(' X-Tenant-Id = startupService.getTenantIdentifier = ' + tenantIdentifier);
} else {
console.log(' X-Tenant-Id = already setted = ' + tenantIdentifier);
}
let requestId = request.headers.get('X-Request-Id');
if (!requestId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,7 @@ import { SearchUnitApiService } from 'projects/vitamui-library/src/lib/api/searc
import { Observable, of, throwError, TimeoutError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import {
AccessContract,
AccessContractApiService,
ApiUnitObject,
FilingHoldingSchemeNode,
Ontology,
SearchService,
Transaction,
Unit
AccessContract, AccessContractApiService, ApiUnitObject, FilingHoldingSchemeNode, Ontology, SearchService, Transaction, Unit
} from 'ui-frontend-common';
import { ProjectsApiService } from '../core/api/project-api.service';
import { TransactionApiService } from '../core/api/transaction-api.service';
Expand All @@ -60,6 +53,7 @@ import { PagedResult, SearchCriteriaDto, SearchCriteriaEltDto, SearchResponse }
})
export class ArchiveCollectService extends SearchService<any> {
constructor(
// private tenantMenuService: TenantMenuService,
private projectsApiService: ProjectsApiService,
private transactionApiService: TransactionApiService,
private searchUnitApiService: SearchUnitApiService,
Expand Down Expand Up @@ -109,7 +103,7 @@ export class ArchiveCollectService extends SearchService<any> {
}

searchArchiveUnitsByCriteria(criteriaDto: SearchCriteriaDto, transactionId: string): Observable<PagedResult> {
let headers = new HttpHeaders().append('Content-Type', 'application/json');
const headers = new HttpHeaders().append('Content-Type', 'application/json');
if (!!transactionId) {
return this.transactionApiService.searchArchiveUnitsByCriteria(criteriaDto, transactionId, headers).pipe(
// timeout(TIMEOUT_SEC),
Expand Down Expand Up @@ -150,8 +144,7 @@ export class ArchiveCollectService extends SearchService<any> {
}

getAccessContractById(accessContract: string): Observable<AccessContract> {
let headers = new HttpHeaders().append('Content-Type', 'application/json');

const headers = new HttpHeaders().append('Content-Type', 'application/json');
return this.accessContractApiService.getAccessContractById(accessContract, headers);
}

Expand All @@ -170,7 +163,7 @@ export class ArchiveCollectService extends SearchService<any> {
launchDownloadObjectFromUnit(
unitId: string,
objectId: string,
tenantIdentifier: number,
tenantIdentifier: number,
qualifier?: string,
version?: number
) {
Expand Down Expand Up @@ -203,8 +196,8 @@ export class ArchiveCollectService extends SearchService<any> {
}

exportCsvSearchArchiveUnitsByCriteria(criteriaDto: SearchCriteriaDto, projectId: string) {
let headers = new HttpHeaders().append('Content-Type', 'application/json');
const headers = new HttpHeaders().append('Content-Type', 'application/json');

return this.transactionApiService.exportCsvSearchArchiveUnitsByCriteria(criteriaDto, projectId, headers).subscribe(
(file) => {
const element = document.createElement('a');
Expand Down Expand Up @@ -245,14 +238,14 @@ export class ArchiveCollectService extends SearchService<any> {
}

getReferentialUnitDetails(unitId: string): Observable<SearchResponse> {
let headers = new HttpHeaders().append('Content-Type', 'application/json');
const headers = new HttpHeaders().append('Content-Type', 'application/json');

return this.searchUnitApiService.getById(unitId, headers);
}

getCollectUnitDetails(unitId: string): Observable<Unit> {
let headers = new HttpHeaders().append('Content-Type', 'application/json');
const headers = new HttpHeaders().append('Content-Type', 'application/json');

return this.transactionApiService.getCollectUnitById(unitId, headers);
}

Expand Down Expand Up @@ -280,7 +273,7 @@ export class ArchiveCollectService extends SearchService<any> {
vitamId: unit['#id'],
checked: false,
hidden: false,
hasObject: unit['#object'] ? true : false,
hasObject: !!unit['#object'],
unitType: unit['#unitType'],
};
outNode.children = this.buildNestedTreeLevels(arr, outNode);
Expand All @@ -307,8 +300,8 @@ export class ArchiveCollectService extends SearchService<any> {
}

selectUnitWithInheritedRules(transactionId: string, criteriaDto: SearchCriteriaDto): Observable<Unit> {
let headers = new HttpHeaders().append('Content-Type', 'application/json');
const headers = new HttpHeaders().append('Content-Type', 'application/json');

return this.transactionApiService.selectUnitWithInheritedRules(transactionId, criteriaDto, headers);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,36 +34,15 @@ import { TranslateService } from '@ngx-translate/core';
import { BehaviorSubject, merge, Subject, Subscription } from 'rxjs';
import { debounceTime, map, mergeMap } from 'rxjs/operators';
import {
AccessContract,
CriteriaDataType,
CriteriaOperator,
Direction,
ExternalParameters,
ExternalParametersService,
FilingHoldingSchemeNode,
GlobalEventService,
SidenavPage,
Transaction,
TransactionStatus,
Unit
AccessContract, CriteriaDataType, CriteriaOperator, Direction, ExternalParameters, ExternalParametersService, FilingHoldingSchemeNode,
GlobalEventService, SidenavPage, Transaction, TransactionStatus, Unit
} from 'ui-frontend-common';
import {
ArchiveSearchResultFacets,
CriteriaValue,
PagedResult,
SearchCriteria,
SearchCriteriaCategory,
SearchCriteriaEltDto,
SearchCriteriaEltements,
SearchCriteriaHistory,
SearchCriteriaMgtRuleEnum,
SearchCriteriaStatusEnum,
SearchCriteriaTypeEnum
ArchiveSearchResultFacets, CriteriaValue, PagedResult, SearchCriteria, SearchCriteriaCategory, SearchCriteriaEltDto,
SearchCriteriaEltements, SearchCriteriaHistory, SearchCriteriaMgtRuleEnum, SearchCriteriaStatusEnum, SearchCriteriaTypeEnum
} from '../core/models';
import { ArchiveCollectService } from './archive-collect.service';
import {
SearchCriteriaSaverComponent
} from './archive-search-criteria/components/search-criteria-saver/search-criteria-saver.component';
import { SearchCriteriaSaverComponent } from './archive-search-criteria/components/search-criteria-saver/search-criteria-saver.component';
import { ArchiveFacetsService } from './archive-search-criteria/services/archive-facets.service';
import { ArchiveSearchHelperService } from './archive-search-criteria/services/archive-search-helper.service';
import { ArchiveSharedDataService } from './archive-search-criteria/services/archive-shared-data.service';
Expand Down Expand Up @@ -197,7 +176,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
this.searchCriteriaKeys,
this.nbQueryCriteria,
'NODE',
{id: node.id, value: node.id},
{ id: node.id, value: node.id },
node.title,
true,
CriteriaOperator.EQ,
Expand All @@ -208,7 +187,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
);
} else {
node.count = null;
this.removeCriteria('NODE', {id: node.id, value: node.id}, false);
this.removeCriteria('NODE', { id: node.id, value: node.id }, false);
}
})
);
Expand Down Expand Up @@ -249,6 +228,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
mergeMap((params) => {
this.projectId = params.projectId;
this.tenantIdentifier = params.tenantIdentifier;
console.log('ArchiveSearchCollectComponent.ngOnInit : route.params.tenantIdentifier=' + params.tenantIdentifier)
return params.transactionId
? this.archiveUnitCollectService.getTransactionById(params.transactionId)
: this.archiveUnitCollectService.getLastTransactionByProjectId(this.projectId);
Expand Down Expand Up @@ -282,7 +262,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
this.searchCriteriaKeys,
this.nbQueryCriteria,
ALL_ARCHIVE_UNIT_TYPES,
{value: ARCHIVE_UNIT_WITH_OBJECTS, id: ARCHIVE_UNIT_WITH_OBJECTS},
{ value: ARCHIVE_UNIT_WITH_OBJECTS, id: ARCHIVE_UNIT_WITH_OBJECTS },
this.translateService.instant('COLLECT.SEARCH_CRITERIA_FILTER.FIELDS.UNIT_TYPE.ARCHIVE_UNIT_WITH_OBJECTS'),
true,
CriteriaOperator.EQ,
Expand All @@ -297,7 +277,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
this.searchCriteriaKeys,
this.nbQueryCriteria,
ALL_ARCHIVE_UNIT_TYPES,
{value: ARCHIVE_UNIT_WITHOUT_OBJECTS, id: ARCHIVE_UNIT_WITHOUT_OBJECTS},
{ value: ARCHIVE_UNIT_WITHOUT_OBJECTS, id: ARCHIVE_UNIT_WITHOUT_OBJECTS },
this.translateService.instant('COLLECT.SEARCH_CRITERIA_FILTER.FIELDS.UNIT_TYPE.ARCHIVE_UNIT_WITHOUT_OBJECTS'),
true,
CriteriaOperator.EQ,
Expand Down Expand Up @@ -388,7 +368,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
}
// Prepare criteria and store them to use for lateral panel
this.pending = true;
const sortingCriteria = {criteria: this.orderBy, sorting: this.direction};
const sortingCriteria = { criteria: this.orderBy, sorting: this.direction };
const searchCriteria = {
criteriaList: this.criteriaSearchList,
pageNumber: this.currentPage,
Expand Down Expand Up @@ -490,7 +470,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
if (this.isAllchecked && !action) {
this.listOfUACriteriaSearch = [];
this.isIndeterminate = true;
this.listOfUAIdToExclude.push({value: id, id});
this.listOfUAIdToExclude.push({ value: id, id });
this.listOfUAIdToInclude = [];
if (this.itemSelected > 0) {
this.itemSelected--;
Expand All @@ -504,7 +484,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
if (this.itemSelected === this.totalResults) {
this.isIndeterminate = false;
}
this.listOfUAIdToInclude.push({value: id, id});
this.listOfUAIdToInclude.push({ value: id, id });
this.listOfUAIdToExclude.splice(0, this.listOfUAIdToExclude.length);
} else {
this.listOfUAIdToInclude = this.listOfUAIdToInclude.filter((element) => element.id !== id);
Expand Down Expand Up @@ -722,7 +702,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O

private launchComputingManagementRulesFacets() {
this.pendingComputeFacets = true;
const sortingCriteria = {criteria: this.orderBy, sorting: this.direction};
const sortingCriteria = { criteria: this.orderBy, sorting: this.direction };
const searchCriteria = {
criteriaList: this.criteriaSearchList,
pageNumber: 0,
Expand Down Expand Up @@ -899,7 +879,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O

if (this.criteriaSearchList && this.criteriaSearchList.length > 0) {
this.listOfUACriteriaSearch = this.prepareListOfUACriteriaSearch();
const sortingCriteria = {criteria: this.orderBy, sorting: this.direction};
const sortingCriteria = { criteria: this.orderBy, sorting: this.direction };
const searchCriteria = {
criteriaList: this.listOfUACriteriaSearch,
pageNumber: this.currentPage,
Expand Down Expand Up @@ -937,7 +917,7 @@ export class ArchiveSearchCollectComponent extends SidenavPage<any> implements O
this.archiveUnitCollectService.sendTransaction(this.transaction.id).subscribe(() => {
this.isNotReady$.next(true);
const message = this.translateService.instant('COLLECT.INGEST_TRANSACTION_LAUNCHED');
this.snackBar.open(message , null, {
this.snackBar.open(message, null, {
panelClass: 'vitamui-snack-bar',
duration: 10000,
});
Expand Down
Loading

0 comments on commit 0eb6e0f

Please sign in to comment.