blob: 3456c3cc67d1664b45a8d2a5c87ec4b32397832c [file] [log] [blame]
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';
import { SessionContext } from './common/session-context';
import { Globals } from './common/globals';
import { BaseDataLoaderService } from './services/jobs/base-data-loader.service';
import { MessageService, MessageDefines } from './services/message.service';
import { JwtHelper } from 'angular2-jwt';
import { User } from './model/user';
import { HttpResponseInterceptorService } from './services/http-response-interceptor.service';
import { ReminderCallerJobService } from './services/jobs/reminder-caller-job.service';
import { ImportFileCallerService } from './services/jobs/import-file-caller.service';
import { BannerMessage } from './common/banner-message';
import { BannerMessageStatusEn } from './common/enums';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'app works!';
private bannerMessageStatus = BannerMessageStatusEn;
constructor(private http: Http, public router: Router,
public baseDataLoader: BaseDataLoaderService,
private activatedRoute: ActivatedRoute,
public httpInterceptor: HttpResponseInterceptorService,
private sessionContext: SessionContext,
private messageService: MessageService,
public reminderCallerJobService: ReminderCallerJobService,
public importFileCallerService: ImportFileCallerService) {
this.http.get('assets/settings.json')
.subscribe(res => this.sessionContext.settings = res.json());
this.sessionContext.centralHttpResultCode$.subscribe(rc => {
this.onRcFromHttpService(rc);
});
}
ngOnInit() {
this.extractTokenFromParameters();
}
private processAccessToken( accessToken: string ) {
const jwtHelper: JwtHelper = new JwtHelper();
const decoded: any = jwtHelper.decodeToken(accessToken);
const user: User = new User();
user.id = decoded.sub;
user.username = decoded.preferred_username;
user.itemName = decoded.preferred_username;
let firstName = decoded.given_name;
if (!firstName) {
firstName = '';
}
let lastName = decoded.family_name;
if (!lastName) {
lastName = '';
}
user.name = firstName + ' ' + lastName;
if (decoded.realm_access.roles.filter(s => s === Globals.OAUTH2CONF_SUPERUSER_ROLE).length >= 1) {
user.specialUser = true;
}
this.sessionContext.setCurrUser(user);
this.sessionContext.setAccessToken(accessToken);
}
/**
* Extract the params (suscribe to router event) and store them in the sessionContext.
*/
private extractTokenFromParameters() {
this.activatedRoute.params.subscribe((params: Params) => {
const accessToken = this.getParametersFromUrl();
if (accessToken) {
this.processAccessToken( accessToken );
}
this.messageService.loginLogoff$.emit(MessageDefines.MSG_LOG_IN_SUCCEEDED);
});
}
private getParametersFromUrl() {
const parameter = window.location.search.substr(1);
return parameter != null && parameter !== '' ? this.readParamAccessToken(parameter) : null;
}
private readParamAccessToken(prmstr) {
const params = {};
const prmarr = prmstr.split('&');
for (let i = 0; i < prmarr.length; i++) {
const tmparr = prmarr[i].split('=');
params[tmparr[0]] = tmparr[1];
}
return params['accessToken'];
}
//TODO redirect to Portal as login component has been removed.
//handle different adresses for redirect (test, local, production environment)
private onRcFromHttpService(rc: number): void {
if (rc === 401) {
this.router.navigate(['/logout']);
}
}
}