tenant login changes

This commit is contained in:
Efstratios Giannopoulos 2024-06-05 17:42:56 +03:00
parent f1d899ea0e
commit ebdeeb6e7d
4 changed files with 43 additions and 36 deletions

View File

@ -80,7 +80,6 @@ public class UserRemovalIntegrationEventHandlerImpl implements UserRemovalIntegr
if (!(userRemovalConsistencyHandler.isConsistent(new UserRemovalConsistencyPredicates(event.getUserId())))) { if (!(userRemovalConsistencyHandler.isConsistent(new UserRemovalConsistencyPredicates(event.getUserId())))) {
status = EventProcessingStatus.Postponed; status = EventProcessingStatus.Postponed;
currentPrincipalResolver.pop(); currentPrincipalResolver.pop();
tenantScope.removeTempTenant(this.tenantEntityManager);
return status; return status;
} }

View File

@ -14,6 +14,8 @@ import { Observable, Subject, forkJoin, from, of } from 'rxjs';
import { exhaustMap, map, takeUntil } from 'rxjs/operators'; import { exhaustMap, map, takeUntil } from 'rxjs/operators';
import { ConfigurationService } from '../configuration/configuration.service'; import { ConfigurationService } from '../configuration/configuration.service';
import { PrincipalService } from '../http/principal.service'; import { PrincipalService } from '../http/principal.service';
import { BaseHttpParams } from '@common/http/base-http-params';
import { InterceptorType } from '@common/http/interceptors/interceptor-type';
export interface ResolutionContext { export interface ResolutionContext {
roles: AppRole[]; roles: AppRole[];
@ -156,10 +158,11 @@ export class AuthService extends BaseService {
return observable.pipe( return observable.pipe(
map((x) => this.currentAuthenticationToken(x)), map((x) => this.currentAuthenticationToken(x)),
exhaustMap(() => forkJoin([ exhaustMap(() => forkJoin([
this.accessToken ? this.principalService.me(httpParams) : of(null) this.accessToken ? this.ensureTenant() : of(false),
this.accessToken ? this.principalService.me(httpParams) : of(null),
])), ])),
map((item) => { map((item) => {
this.currentAccount(item[0]); this.currentAccount(item[1]);
return true; return true;
}) })
); );
@ -173,6 +176,38 @@ export class AuthService extends BaseService {
); );
} }
public ensureTenant(): Observable<string> {
if (!this.selectedTenant()) {
this.selectedTenant('default');
}
const params = new BaseHttpParams();
params.interceptorContext = {
excludedInterceptors: [InterceptorType.TenantHeaderInterceptor]
};
return this.principalService.myTenants({ params: params }).pipe(takeUntil(this._destroyed),
map(
(myTenants) => {
if (myTenants) {
if (this.selectedTenant()) {
if (myTenants.findIndex(x => x.code.toLocaleLowerCase() == this.selectedTenant().toLocaleLowerCase()) < 0) {
this.selectedTenant(null);
}
}
if (!this.selectedTenant()) {
if (myTenants.length > 0) {
this.selectedTenant(myTenants[0]?.code);
}
}
} else {
this.selectedTenant(null);
}
return this.selectedTenant();
}
)
);
}
private currentAccount( private currentAccount(
appAccount: AppAccount appAccount: AppAccount
): void { ): void {

View File

@ -36,38 +36,12 @@ export class LoginComponent extends BaseComponent implements OnInit {
if (!this.keycloakService.isLoggedIn()) { if (!this.keycloakService.isLoggedIn()) {
this.authService.authenticate(this.returnUrl); this.authService.authenticate(this.returnUrl);
} else { } else {
if (!this.authService.selectedTenant()) { this.authService.prepareAuthRequest(from(this.keycloakService.getToken())).pipe(takeUntil(this._destroyed)).subscribe(
this.authService.selectedTenant('default'); () => {
} let returnUrL = this.returnUrl;
const params = new BaseHttpParams(); this.zone.run(() => this.router.navigateByUrl(returnUrL));
params.interceptorContext = { },
excludedInterceptors: [InterceptorType.TenantHeaderInterceptor] (error) => this.authService.authenticate('/'));
};
this.principalService.myTenants({ params: params }).subscribe(myTenants => {
if (myTenants) {
if (this.authService.selectedTenant()) {
if (myTenants.findIndex(x => x.code.toLocaleLowerCase() == this.authService.selectedTenant().toLocaleLowerCase()) < 0) {
this.authService.selectedTenant(null);
}
}
if (!this.authService.selectedTenant()) {
if (myTenants.length > 0) {
this.authService.selectedTenant(myTenants[0]?.code);
}
}
} else {
this.authService.selectedTenant(null);
}
this.authService.prepareAuthRequest(from(this.keycloakService.getToken())).pipe(takeUntil(this._destroyed)).subscribe(
() => {
let returnUrL = this.returnUrl;
this.zone.run(() => this.router.navigateByUrl(returnUrL));
},
(error) => this.authService.authenticate('/'));
}, (error) => this.authService.authenticate('/')); //TODO HANDLE-ERRORS ?
} }
} }
} }

View File

@ -86,7 +86,6 @@ public class UserRemovalIntegrationEventHandlerImpl implements UserRemovalIntegr
if (!(userRemovalConsistencyHandler.isConsistent(new UserRemovalConsistencyPredicates(event.getUserId())))) { if (!(userRemovalConsistencyHandler.isConsistent(new UserRemovalConsistencyPredicates(event.getUserId())))) {
status = EventProcessingStatus.Postponed; status = EventProcessingStatus.Postponed;
currentPrincipalResolver.pop(); currentPrincipalResolver.pop();
tenantScope.removeTempTenant(this.tenantEntityManager);
return status; return status;
} }