This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
profile.service.ts 1.59 KiB
Newer Older
Lukas Kaltenbrunner's avatar
Lukas Kaltenbrunner committed
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map, shareReplay } from 'rxjs/operators';
import { Observable } from 'rxjs';

Michael Breu's avatar
Michael Breu committed
import { ApplicationConfigService } from 'app/core/config/application-config.service';
Lukas Kaltenbrunner's avatar
Lukas Kaltenbrunner committed
import { ProfileInfo, InfoResponse } from './profile-info.model';

@Injectable({ providedIn: 'root' })
export class ProfileService {
Michael Breu's avatar
Michael Breu committed
  private infoUrl = this.applicationConfigService.getEndpointFor('management/info');
  private profileInfo$?: Observable<ProfileInfo>;
Michael Breu's avatar
Michael Breu committed
  constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {}
Lukas Kaltenbrunner's avatar
Lukas Kaltenbrunner committed

  getProfileInfo(): Observable<ProfileInfo> {
    if (this.profileInfo$) {
      return this.profileInfo$;
    }

    this.profileInfo$ = this.http.get<InfoResponse>(this.infoUrl).pipe(
      map((response: InfoResponse) => {
        const profileInfo: ProfileInfo = {
          activeProfiles: response.activeProfiles,
Michael Breu's avatar
Michael Breu committed
          inProduction: response.activeProfiles?.includes('prod'),
          openAPIEnabled: response.activeProfiles?.includes('api-docs'),
Lukas Kaltenbrunner's avatar
Lukas Kaltenbrunner committed
        };
        if (response.activeProfiles && response['display-ribbon-on-profiles']) {
          const displayRibbonOnProfiles = response['display-ribbon-on-profiles'].split(',');
Michael Breu's avatar
Michael Breu committed
          const ribbonProfiles = displayRibbonOnProfiles.filter(profile => response.activeProfiles?.includes(profile));
Lukas Kaltenbrunner's avatar
Lukas Kaltenbrunner committed
          if (ribbonProfiles.length > 0) {
            profileInfo.ribbonEnv = ribbonProfiles[0];
          }
        }
        return profileInfo;
      }),
      shareReplay()
    );
    return this.profileInfo$;
  }
}