blob: 68920b09c36032aa09bb514c4152b823d9c39d67 [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/// <reference path="../typings/index.d.ts" />
import * as angular from 'angular';
import 'angular-ui-router';
import 'angular-resource';
import 'angular-cookies';
import '../node_modules/ngprogress/build/ngProgress';
import routesConfig from './routes';
import {main} from './app/main';
import './index.scss';
import {xosCore} from './app/core/index';
import {xosDataSources} from './app/datasources/index';
import {xosViews} from './app/views/index';
import {xosTemplate} from './app/template/index';
import {
interceptorConfig, userStatusInterceptor, CredentialsInterceptor,
NoHyperlinksInterceptor
} from './interceptors';
import {IXosPageTitleService} from './app/core/services/page-title';
import {IXosAuthService} from './app/datasources/rest/auth.rest';
import {IXosNavigationRoute} from './app/core/services/navigation';
import XosLogDecorator from './decorators';
import {xosExtender} from './app/extender/index';
import {IXosKeyboardShortcutService} from './app/core/services/keyboard-shortcut';
import {IXosModelDiscovererService} from './app/datasources/helpers/model-discoverer.service';
import {xosServiceGraph} from './app/service-graph/index';
import {IXosDebugService} from './app/core/debug/debug.service';
export interface IXosAppConfig {
apiEndpoint: string;
websocketClient: string;
}
export interface IXosStyleConfig {
projectName: string;
payoff: string;
favicon: string;
background: string;
logo: string;
routes: IXosNavigationRoute[];
}
angular
.module('app', [
xosCore,
xosDataSources,
xosViews,
xosExtender,
xosTemplate, // template module
xosServiceGraph,
'ui.router',
'ngResource',
'ngProgress'
])
.config(XosLogDecorator)
.config(routesConfig)
.config(interceptorConfig)
.factory('UserStatusInterceptor', userStatusInterceptor)
.factory('CredentialsInterceptor', CredentialsInterceptor)
.factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
.component('xos', main)
.provider('XosConfig', function(){
// save the last visited state before reload
let lastVisitedUrl = window.location.hash.replace('#', '');
this.$get = [() => {
if (lastVisitedUrl === '/login' || lastVisitedUrl === '/loader') {
lastVisitedUrl = '/dashboard';
}
return {lastVisitedUrl};
}] ;
return this;
})
.run((
$rootScope: ng.IRootScopeService,
$transitions: any,
$log: ng.ILogService,
$location: ng.ILocationService,
$state: ng.ui.IStateService,
StyleConfig: IXosStyleConfig,
XosModelDiscoverer: IXosModelDiscovererService,
AuthService: IXosAuthService,
XosKeyboardShortcut: IXosKeyboardShortcutService,
PageTitle: IXosPageTitleService, // NOTE this service is not used, but needs to be loaded somewhere
XosDebug: IXosDebugService
) => {
// handle style configs
$rootScope['favicon'] = `./app/images/brand/${StyleConfig.favicon}`;
if ($state.current.data && $state.current.data.specialClass) {
$rootScope['class'] = $state.current.data.specialClass;
}
$transitions.onSuccess({ to: '**' }, (transtion) => {
if ($state.current.data && $state.current.data.specialClass) {
$rootScope['class'] = transtion.$to().data.specialClass;
}
else {
$rootScope['class'] = '';
}
});
// check the user login (on route change)
$transitions.onSuccess({ to: '**' }, (transtion) => {
if (!AuthService.isAuthenticated()) {
AuthService.clearUser();
$state.go('login');
}
});
// if the user is authenticated
$log.info(`[XOS] Is user authenticated? ${AuthService.isAuthenticated()}`);
if (AuthService.isAuthenticated()) {
$log.info(`[XOS] Redirect to "loader"`);
$state.go('loader');
$rootScope.$apply();
}
else {
AuthService.clearUser();
$log.info(`[XOS] Redirect to "login"`);
$state.go('login');
$rootScope.$apply();
}
// register keyboard shortcut
XosKeyboardShortcut.setup();
XosDebug.setupShortcuts();
});