oleewere closed pull request #2: [AMBARI-24656] [Log Search UI] Handle the 401 
and the 403 response status at login
URL: https://github.com/apache/ambari-logsearch/pull/2
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/ambari-logsearch-web/karma.conf.js 
b/ambari-logsearch-web/karma.conf.js
index 08608d863b..b7e9d035dd 100644
--- a/ambari-logsearch-web/karma.conf.js
+++ b/ambari-logsearch-web/karma.conf.js
@@ -26,6 +26,7 @@ module.exports = function (config) {
     plugins: [
       require('karma-jasmine'),
       require('karma-phantomjs-launcher'),
+      require('karma-chrome-launcher'),
       require('karma-jasmine-html-reporter'),
       require('karma-coverage-istanbul-reporter'),
       require('@angular/cli/plugins/karma')
diff --git a/ambari-logsearch-web/package.json 
b/ambari-logsearch-web/package.json
index 3639b54239..2b1e7efd90 100644
--- a/ambari-logsearch-web/package.json
+++ b/ambari-logsearch-web/package.json
@@ -23,6 +23,7 @@
     "@angular/platform-browser-dynamic": "^4.0.0",
     "@angular/router": "^4.0.0",
     "@ngrx/core": "^1.2.0",
+    "@ngrx/effects": "2.0.5",
     "@ngrx/store": "^2.2.3",
     "@ngrx/store-devtools": "3.2.4",
     "@ngx-translate/core": "^6.0.1",
@@ -37,9 +38,11 @@
     "d3-scale-chromatic": "^1.1.1",
     "font-awesome": "^4.7.0",
     "jquery": "^1.12.4",
+    "karma-chrome-launcher": "^2.2.0",
     "moment": "^2.18.1",
     "moment-timezone": "^0.5.13",
     "ngx-bootstrap": "^2.0.5",
+    "reselect": "^3.0.1",
     "rxjs": "^5.4.3",
     "zone.js": "^0.8.4"
   },
diff --git a/ambari-logsearch-web/src/app/app.module.ts 
b/ambari-logsearch-web/src/app/app.module.ts
index b72980ed9e..097bf04402 100644
--- a/ambari-logsearch-web/src/app/app.module.ts
+++ b/ambari-logsearch-web/src/app/app.module.ts
@@ -17,10 +17,9 @@
  */
 
 import {BrowserModule} from '@angular/platform-browser';
-import {NgModule, CUSTOM_ELEMENTS_SCHEMA, Injector} from '@angular/core';
+import {NgModule, CUSTOM_ELEMENTS_SCHEMA, APP_INITIALIZER, Injector} from 
'@angular/core';
 import {FormsModule, ReactiveFormsModule} from '@angular/forms';
-import {HttpModule, Http, XHRBackend, BrowserXhr, ResponseOptions, 
XSRFStrategy} from '@angular/http';
-import {InMemoryBackendService} from 'angular-in-memory-web-api';
+import { HttpModule, Http } from '@angular/http';
 import {TypeaheadModule, TooltipModule} from 'ngx-bootstrap';
 import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
 import {StoreModule} from '@ngrx/store';
@@ -30,7 +29,7 @@ import {MomentTimezoneModule} from 'angular-moment-timezone';
 import {NgStringPipesModule} from 'angular-pipes';
 import {SimpleNotificationsModule} from 'angular2-notifications';
 
-import {environment} from '@envs/environment';
+import { EffectsModule } from '@ngrx/effects';
 
 import {SharedModule} from '@modules/shared/shared.module';
 import {AppLoadModule} from '@modules/app-load/app-load.module';
@@ -115,6 +114,9 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {LogsStateService} from '@app/services/storage/logs-state.service';
 import {LoginScreenGuardService} from 
'@app/services/login-screen-guard.service';
 
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 @NgModule({
   declarations: [
     AppComponent,
@@ -186,7 +188,11 @@ import {LoginScreenGuardService} from 
'@app/services/login-screen-guard.service'
       maxAge: 5
     }),
 
-    AppRoutingModule
+    AppRoutingModule,
+
+    EffectsModule.run(AuthEffects),
+    EffectsModule.run(NotificationEffects)
+
   ],
   providers: [
     HttpClientService,
diff --git a/ambari-logsearch-web/src/app/classes/models/app-state.ts 
b/ambari-logsearch-web/src/app/classes/models/app-state.ts
index 2a4d4cc211..374e15d46c 100644
--- a/ambari-logsearch-web/src/app/classes/models/app-state.ts
+++ b/ambari-logsearch-web/src/app/classes/models/app-state.ts
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
 
-import {ActiveServiceLogEntry} from '@app/classes/active-service-log-entry';
-import {ListItem} from '@app/classes/list-item';
-import {DataAvailability, DataAvailabilityValues, LogsType} from 
'@app/classes/string';
+import { ActiveServiceLogEntry } from '@app/classes/active-service-log-entry';
+import { ListItem } from '@app/classes/list-item';
+import { DataAvailabilityValues, LogsType } from '@app/classes/string';
 
 export interface History {
   items: ListItem[];
@@ -26,10 +26,9 @@ export interface History {
 }
 
 export interface AppState {
-  isAuthorized: boolean;
   isInitialLoading: boolean;
   isLoginInProgress: boolean;
-  baseDataSetState: DataAvailability;
+  baseDataSetState: DataAvailabilityValues;
   activeLogsType?: LogsType;
   isServiceLogsFileView: boolean;
   isServiceLogContextView: boolean;
@@ -39,7 +38,6 @@ export interface AppState {
 }
 
 export const initialState: AppState = {
-  isAuthorized: false,
   isInitialLoading: false,
   isLoginInProgress: false,
   baseDataSetState: DataAvailabilityValues.NOT_AVAILABLE,
diff --git a/ambari-logsearch-web/src/app/classes/models/store.ts 
b/ambari-logsearch-web/src/app/classes/models/store.ts
index 9e34b14e7b..f106b17a2b 100644
--- a/ambari-logsearch-web/src/app/classes/models/store.ts
+++ b/ambari-logsearch-web/src/app/classes/models/store.ts
@@ -16,24 +16,26 @@
  * limitations under the License.
  */
 
-import {ReflectiveInjector} from '@angular/core';
-import {Observable} from 'rxjs/Observable';
-import {Store, Action} from '@ngrx/store';
-import {AppSettings} from '@app/classes/models/app-settings';
-import {AppState} from '@app/classes/models/app-state';
-import {AuditLog} from '@app/classes/models/audit-log';
-import {ServiceLog} from '@app/classes/models/service-log';
-import {BarGraph} from '@app/classes/models/bar-graph';
-import {Graph} from '@app/classes/models/graph';
-import {NodeItem} from '@app/classes/models/node-item';
-import {UserConfig} from '@app/classes/models/user-config';
-import {LogTypeTab} from '@app/classes/models/log-type-tab';
-import {LogField} from '@app/classes/object';
-import {UtilsService} from '@app/services/utils.service';
-import {NotificationInterface} from 
'@modules/shared/interfaces/notification.interface';
-import {LogsState} from '@app/classes/models/logs-state';
+import { ReflectiveInjector } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store, Action } from '@ngrx/store';
+import { AppSettings } from '@app/classes/models/app-settings';
+import { AppState } from '@app/classes/models/app-state';
+import { AuditLog } from '@app/classes/models/audit-log';
+import { ServiceLog } from '@app/classes/models/service-log';
+import { BarGraph } from '@app/classes/models/bar-graph';
+import { Graph } from '@app/classes/models/graph';
+import { NodeItem } from '@app/classes/models/node-item';
+import { UserConfig } from '@app/classes/models/user-config';
+import { LogTypeTab } from '@app/classes/models/log-type-tab';
+import { LogField } from '@app/classes/object';
+import { UtilsService } from '@app/services/utils.service';
+import { NotificationInterface } from 
'@modules/shared/interfaces/notification.interface';
+import { LogsState } from '@app/classes/models/logs-state';
 import { DataAvaibilityStatesModel } from 
'@app/modules/app-load/models/data-availability-state.model';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+
 const storeActions = {
     'ARRAY.ADD': 'ADD',
     'ARRAY.ADD.START': 'ADD_TO_START',
@@ -68,6 +70,7 @@ export interface AppStore {
   notifications: NotificationInterface[];
   logsState: LogsState;
   dataAvailabilityStates: DataAvaibilityStatesModel;
+  auth: auth.State;
 }
 
 export class ModelService {
diff --git a/ambari-logsearch-web/src/app/classes/models/user.ts 
b/ambari-logsearch-web/src/app/classes/models/user.ts
new file mode 100644
index 0000000000..1743865008
--- /dev/null
+++ b/ambari-logsearch-web/src/app/classes/models/user.ts
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+export interface User {
+  username: string;
+  name?: string;
+  email?: string;
+}
diff --git a/ambari-logsearch-web/src/app/classes/string.ts 
b/ambari-logsearch-web/src/app/classes/string.ts
index db1311faf7..2e577403a4 100644
--- a/ambari-logsearch-web/src/app/classes/string.ts
+++ b/ambari-logsearch-web/src/app/classes/string.ts
@@ -26,7 +26,6 @@ export type ScrollType = 'before' | 'after' | '';
 
 export type LogLevel = 'FATAL' | 'ERROR' | 'WARN' | 'INFO' | 'DEBUG' | 'TRACE' 
| 'UNKNOWN';
 
-export type DataAvailability = 'NOT_AVAILABLE' | 'LOADING' | 'AVAILABLE' | 
'ERROR';
 export enum DataAvailabilityValues {
   NOT_AVAILABLE = 'NOT_AVAILABLE',
   LOADING = 'LOADING',
diff --git 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.html
 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.html
index 8970316613..e64a89c8c1 100644
--- 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.html
+++ 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.html
@@ -35,7 +35,7 @@
              (buttonClick)="stopCapture()"></menu-button>
 <menu-button label="{{'topMenu.refresh' | translate}}" iconClass="fa 
fa-refresh"
              (buttonClick)="refresh()"></menu-button>
-<modal-dialog
+<modal-dialog *ngIf="isLogIndexFilterDisplayed$ | async"
   class="log-index-filter"
   [visible]="isLogIndexFilterDisplayed$ | async"
   [showCloseBtn]="false"
diff --git 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts
index 4d84bb7dee..133c4bb89f 100644
--- 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts
@@ -56,6 +56,12 @@ import {NotificationService} from 
'@modules/shared/services/notification.service
 
 import { DataAvailabilityStatesStore, dataAvailabilityStates } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('ActionMenuComponent', () => {
   let component: ActionMenuComponent;
   let fixture: ComponentFixture<ActionMenuComponent>;
@@ -81,8 +87,11 @@ describe('ActionMenuComponent', () => {
           hosts,
           serviceLogsTruncated,
           tabs,
-          dataAvailabilityStates
-        })
+          dataAvailabilityStates,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       declarations: [
         LogIndexFilterComponent,
@@ -116,7 +125,8 @@ describe('ActionMenuComponent', () => {
         LogsStateService,
         NotificationsService,
         NotificationService,
-        DataAvailabilityStatesStore
+        DataAvailabilityStatesStore,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.ts 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.ts
index a293e95e98..46a0a765bf 100644
--- 
a/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.ts
+++ 
b/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.ts
@@ -63,7 +63,7 @@ export class ActionMenuComponent  implements OnInit, 
OnDestroy {
   subscriptions: Subscription[] = [];
 
   constructor(
-    private logsContainer: LogsContainerService,
+    private logsContainerService: LogsContainerService,
     private historyManager: HistoryManagerService,
     private settings: UserSettingsService,
     private route: ActivatedRoute,
@@ -98,7 +98,7 @@ export class ActionMenuComponent  implements OnInit, 
OnDestroy {
   }
 
   get captureSeconds(): number {
-    return this.logsContainer.captureSeconds;
+    return this.logsContainerService.captureSeconds;
   }
 
   setModalSubmitDisabled(isDisabled: boolean): void {
@@ -126,7 +126,7 @@ export class ActionMenuComponent  implements OnInit, 
OnDestroy {
   }
 
   refresh(): void {
-    this.logsContainer.loadLogs();
+    this.logsContainerService.loadLogs();
   }
 
   onSelectCluster(cluster: string) {
@@ -157,15 +157,15 @@ export class ActionMenuComponent  implements OnInit, 
OnDestroy {
   }
 
   startCapture(): void {
-    this.logsContainer.startCaptureTimer();
+    this.logsContainerService.startCaptureTimer();
   }
 
   stopCapture(): void {
-    this.logsContainer.stopCaptureTimer();
+    this.logsContainerService.stopCaptureTimer();
   }
 
   cancelCapture(): void {
-    this.logsContainer.cancelCapture();
+    this.logsContainerService.cancelCapture();
   }
 
 }
diff --git a/ambari-logsearch-web/src/app/components/app.component.html 
b/ambari-logsearch-web/src/app/components/app.component.html
index c9f83131c1..47d461b60f 100644
--- a/ambari-logsearch-web/src/app/components/app.component.html
+++ b/ambari-logsearch-web/src/app/components/app.component.html
@@ -22,6 +22,11 @@ <h1>{{'common.title' | translate}}</h1>
     <top-menu *ngIf="(isAuthorized$ | async) && (isBaseDataAvailable$ | 
async)"></top-menu>
   </nav>
 </header>
-<data-loading-indicator *ngIf="!(isBaseDataAvailable$ | async) && 
(isAuthorized$ | async)"></data-loading-indicator>
-<main-container *ngIf="!(isAuthorized$ | async) || (isBaseDataAvailable$ | 
async)"></main-container>
-<simple-notifications 
[options]="notificationServiceOptions"></simple-notifications>
+
+<ng-container *ngIf="(authorizationStatus$ | async) !== 
authorizationStatuses.LOGGED_OUT">
+  <data-loading-indicator *ngIf="!(isBaseDataAvailable$ | async) && 
(isAuthorized$ | async)"></data-loading-indicator>
+
+  <main-container *ngIf="!(isAuthorized$ | async) || (isBaseDataAvailable$ | 
async)"></main-container>
+
+  <simple-notifications 
[options]="notificationServiceOptions"></simple-notifications>
+</ng-container>
diff --git a/ambari-logsearch-web/src/app/components/app.component.less 
b/ambari-logsearch-web/src/app/components/app.component.less
index b9eb907765..3e566719ed 100644
--- a/ambari-logsearch-web/src/app/components/app.component.less
+++ b/ambari-logsearch-web/src/app/components/app.component.less
@@ -59,4 +59,11 @@
       }
     }
   }
+  .auth-checking-in-progress {
+    align-content: center;
+    align-items: center;
+    display: flex;
+    justify-content: center;
+    margin: 1rem 0;
+  }
 }
diff --git a/ambari-logsearch-web/src/app/components/app.component.ts 
b/ambari-logsearch-web/src/app/components/app.component.ts
index 09a82c2028..68d220e464 100644
--- a/ambari-logsearch-web/src/app/components/app.component.ts
+++ b/ambari-logsearch-web/src/app/components/app.component.ts
@@ -16,23 +16,41 @@
  * limitations under the License.
  */
 
-import {Component} from '@angular/core';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {Observable} from 'rxjs/Observable';
-import {Options} from 'angular2-notifications/src/options.type';
-import {notificationIcons} from 
'@modules/shared/services/notification.service';
-import { DataAvailability, DataAvailabilityValues } from '@app/classes/string';
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Subject } from 'rxjs/Subject';
+
+import { Options } from 'angular2-notifications/src/options.type';
+
+import { AppStateService } from '@app/services/storage/app-state.service';
+import { DataAvailabilityValues } from '@app/classes/string';
+import { notificationIcons } from 
'@modules/shared/services/notification.service';
+
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { AuthorizationStatuses } from '@app/store/reducers/auth.reducers';
+import { isAuthorizedSelector, authStatusSelector, 
isCheckingAuthStatusInProgressSelector } from 
'@app/store/selectors/auth.selectors';
 
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
-  styleUrls: ['./app.component.less', '../modules/shared/notifications.less']
+  styleUrls: ['./app.component.less', '../modules/shared/notifications.less'],
+  host: {
+    '[class]': 'hostCssClasses'
+  }
 })
-export class AppComponent {
+export class AppComponent implements OnInit, OnDestroy {
 
-  isAuthorized$: Observable<boolean> = 
this.appState.getParameter('isAuthorized');
+  authorizationStatuses = AuthorizationStatuses;
+
+  isAuthorized$: Observable<boolean> = this.store.select(isAuthorizedSelector);
+  authorizationStatus$: Observable<AuthorizationStatuses> = 
this.store.select(authStatusSelector);
+  isCheckingAuthStatusInProgress$: Observable<boolean> = 
this.store.select(isCheckingAuthStatusInProgressSelector);
+  authorizationCode$: Observable<number> = 
this.appState.getParameter('authorizationCode');
   isBaseDataAvailable$: Observable<boolean> = 
this.appState.getParameter('baseDataSetState')
-    .map((dataSetState: DataAvailability) => dataSetState === 
DataAvailabilityValues.AVAILABLE);
+    .map((dataSetState: DataAvailabilityValues) => dataSetState === 
DataAvailabilityValues.AVAILABLE);
+
+  destroyed$ = new Subject();
 
   notificationServiceOptions: Options = {
     timeOut: 2000,
@@ -44,8 +62,27 @@ export class AppComponent {
     position: ['top', 'left']
   };
 
+  hostCssClasses = '';
+
   constructor(
-    private appState: AppStateService
+    private appState: AppStateService,
+    private store: Store<AppStore>
   ) {}
 
+  ngOnInit() {
+    
this.authorizationStatus$.distinctUntilChanged().takeUntil(this.destroyed$).subscribe(this.onAuthStatusChange);
+  }
+
+  ngOnDestroy() {
+    this.destroyed$.next(true);
+  }
+
+  onAuthStatusChange = (status: AuthorizationStatuses): void => {
+    this.setHostCssClasses(status ? status.replace(/\s/, 
'-').toLocaleLowerCase() : '');
+  }
+
+  setHostCssClasses(cls: string) {
+    this.hostCssClasses = cls;
+  }
+
 }
diff --git 
a/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts
index 51d1fdae0a..e6191f11a6 100644
--- 
a/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts
@@ -47,6 +47,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('AuditLogsEntriesComponent', () => {
   let component: AuditLogsEntriesComponent;
   let fixture: ComponentFixture<AuditLogsEntriesComponent>;
@@ -73,8 +79,11 @@ describe('AuditLogsEntriesComponent', () => {
           components,
           hosts,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       providers: [
         ...MockHttpRequestModules,
@@ -98,7 +107,8 @@ describe('AuditLogsEntriesComponent', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts
index f65180d164..60c6e9b9d5 100644
--- 
a/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts
@@ -52,6 +52,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import { AuthService } from '@app/services/auth.service';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('AuditLogsTableComponent', () => {
   let component: AuditLogsTableComponent;
   let fixture: ComponentFixture<AuditLogsTableComponent>;
@@ -83,8 +89,11 @@ describe('AuditLogsTableComponent', () => {
           tabs,
           clusters,
           components,
-          hosts
-        })
+          hosts,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       providers: [
         ...MockHttpRequestModules,
@@ -108,7 +117,8 @@ describe('AuditLogsTableComponent', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.spec.ts
index 8a6cbc6254..ac6efb10a8 100644
--- 
a/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.spec.ts
@@ -52,6 +52,8 @@ import {NotificationService} from 
'@modules/shared/services/notification.service
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 import { DataAvailabilityStatesStore, dataAvailabilityStates } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+
 describe('ClusterFilterComponent', () => {
   let component: ClusterFilterComponent;
   let fixture: ComponentFixture<ClusterFilterComponent>;
@@ -84,7 +86,8 @@ describe('ClusterFilterComponent', () => {
           clusters,
           components,
           hosts,
-          dataAvailabilityStates
+          dataAvailabilityStates,
+          auth: auth.reducer
         })
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.ts
 
b/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.ts
index 9921d41756..086160be17 100644
--- 
a/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.ts
+++ 
b/ambari-logsearch-web/src/app/components/cluster-filter/cluster-filter.component.ts
@@ -45,7 +45,7 @@ export class ClusterFilterComponent implements OnInit, 
OnDestroy {
 
   private clusterSelectionStoreKey: BehaviorSubject<string> = new 
BehaviorSubject('');
 
-  private clustersAsListItems$: Observable<ListItem[]> = 
this.clusterSelectionStoreKey.distinctUntilChanged()
+  clustersAsListItems$: Observable<ListItem[]> = 
this.clusterSelectionStoreKey.distinctUntilChanged()
     .switchMap((selectionStoreKey: string) => Observable.combineLatest(
         this.clusterSelectionStoreService.getParameter(selectionStoreKey),
         this.clusterStoreService.getAll()
@@ -58,8 +58,8 @@ export class ClusterFilterComponent implements OnInit, 
OnDestroy {
       })
     ).startWith([]);
 
-  private readonly defaultUseMultiSelection = true;
-  private useMultiSelection: BehaviorSubject<boolean> = new 
BehaviorSubject(false);
+  readonly defaultUseMultiSelection = true;
+  useMultiSelection: BehaviorSubject<boolean> = new BehaviorSubject(false);
 
   private subscriptions: Subscription[] = [];
 
diff --git 
a/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts
index afca603168..0dfc49a49d 100644
--- 
a/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts
@@ -51,6 +51,11 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('ContextMenuComponent', () => {
   let component: ContextMenuComponent;
   let fixture: ComponentFixture<ContextMenuComponent>;
@@ -86,8 +91,11 @@ describe('ContextMenuComponent', () => {
           clusters,
           components,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         FormsModule
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
 
b/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
index 7385305ae9..657d1eaaad 100644
--- 
a/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
+++ 
b/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
@@ -32,25 +32,49 @@
     <dropdown-button iconClass="fa fa-search-minus" label="{{'filter.exclude' 
| translate}}" [hideCaret]="true"
                      [showSelectedValue]="false" 
[showCommonLabelWithSelection]="true"
                      [options]="searchBoxItems$ | async" 
(selectItem)="proceedWithExclude($event)"></dropdown-button>
-    <filter-button *ngIf="isFilterConditionDisplayed('hosts')" 
formControlName="hosts"
-                   label="{{filters.hosts.label | translate}}" 
[iconClass]="filters.hosts.iconClass"
-                   [subItems]="filters.hosts.options" 
[isMultipleChoice]="true" [isRightAlign]="true"
-                   additionalLabelComponentSetter="getDataForHostsNodeBar"
-                   [class.disabled]="isServiceLogsFileView$ | async" 
[isDisabled]="isServiceLogsFileView$ | async"
-                   [useDropDownLocalFilter]="true"></filter-button>
-    <filter-button *ngIf="isFilterConditionDisplayed('users')" 
formControlName="users"
-                   label="{{filters.users.label | translate}}" 
[iconClass]="filters.users.iconClass"
-                   [subItems]="filters.users.options" 
[isMultipleChoice]="true" [isRightAlign]="true"
-                   [useDropDownLocalFilter]="true"></filter-button>
-    <filter-button *ngIf="isFilterConditionDisplayed('components')" 
formControlName="components"  [useDropDownLocalFilter]="true"
-                   label="{{filters.components.label | translate}}" 
[iconClass]="filters.components.iconClass"
-                   [subItems]="filters.components.options" 
[isMultipleChoice]="true" [isRightAlign]="true"
-                   [class.disabled]="isServiceLogsFileView$ | async" 
[isDisabled]="isServiceLogsFileView$ | async"
-                   
additionalLabelComponentSetter="getDataForComponentsNodeBar"></filter-button>
-    <filter-button *ngIf="isFilterConditionDisplayed('levels')" 
formControlName="levels"
-                   label="{{filters.levels.label | translate}}" 
[iconClass]="filters.levels.iconClass"
-                   [subItems]="filters.levels.options" 
[isMultipleChoice]="true" [isRightAlign]="true"
-                   [useDropDownLocalFilter]="true"></filter-button>
+
+    <filter-button *ngIf="isFilterConditionDisplayed('hosts')"
+      formControlName="hosts"
+      [subItems]="filters.hosts.options"
+      label="{{filters.hosts.label | translate}}"
+      [useDropDownLocalFilter]="true"
+      [isMultipleChoice]="true"
+      [iconClass]="filters.hosts.iconClass"
+      [isRightAlign]="true"
+      [class.disabled]="isServiceLogsFileView$ | async"
+      [isDisabled]="isServiceLogsFileView$ | async"
+      additionalLabelComponentSetter="getDataForHostsNodeBar"></filter-button>
+
+    <filter-button *ngIf="isFilterConditionDisplayed('users')"
+      formControlName="users"
+      label="{{filters.users.label | translate}}"
+      [iconClass]="filters.users.iconClass"
+      [subItems]="filters.users.options"
+      [isMultipleChoice]="true"
+      [isRightAlign]="true"
+      [useDropDownLocalFilter]="true"></filter-button>
+
+    <filter-button *ngIf="isFilterConditionDisplayed('components')"
+      formControlName="components"
+      [subItems]="filters.components.options"
+      label="{{filters.components.label | translate}}"
+      [useDropDownLocalFilter]="true"
+      [isMultipleChoice]="true"
+      [iconClass]="filters.components.iconClass"
+      [isRightAlign]="true"
+      [class.disabled]="isServiceLogsFileView$ | async"
+      [isDisabled]="isServiceLogsFileView$ | async"
+      
additionalLabelComponentSetter="getDataForComponentsNodeBar"></filter-button>
+
+    <filter-button *ngIf="isFilterConditionDisplayed('levels')"
+      formControlName="levels"
+      label="{{filters.levels.label | translate}}"
+      [iconClass]="filters.levels.iconClass"
+      [subItems]="filters.levels.options"
+      [isMultipleChoice]="true"
+      [isRightAlign]="true"
+      [useDropDownLocalFilter]="true"></filter-button>
+
     <menu-button class="clear-filter-btn" iconClass="fa fa-times" 
label="{{'filters.clear' | translate}}"
     (buttonClick)="onClearBtnClick($event)"></menu-button>
   </div>
diff --git 
a/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
index 3b85377141..fa73ce066e 100644
--- 
a/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
@@ -48,6 +48,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('FiltersPanelComponent', () => {
   let component: FiltersPanelComponent;
   let fixture: ComponentFixture<FiltersPanelComponent>;
@@ -80,8 +86,11 @@ describe('FiltersPanelComponent', () => {
           serviceLogsHistogramData,
           appState,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
@@ -106,7 +115,8 @@ describe('FiltersPanelComponent', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts
index 82201ba23e..e2e10ba1fa 100644
--- 
a/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts
@@ -47,6 +47,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('LogContextComponent', () => {
   let component: LogContextComponent;
   let fixture: ComponentFixture<LogContextComponent>;
@@ -72,8 +78,11 @@ describe('LogContextComponent', () => {
           components,
           hosts,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
@@ -98,7 +107,8 @@ describe('LogContextComponent', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.html
 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.html
index f5dc84b2a8..2096687380 100644
--- 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.html
+++ 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.html
@@ -20,10 +20,10 @@
       <tr>
         <th class="component-column">{{'filter.components' | translate}}</th>
         <th *ngFor="let column of columns" class="checkbox-column">
-          <input type="checkbox" attr.id="{{column.name}}"
+          <input type="checkbox" 
attr.id="log-index-filter-component-{{column.name}}"
                 [attr.checked]="isAllComponentsCheckedForLevel(column.name) ? 
'checked' : null"
                 (change)="processAllComponentsForLevel(column.name, 
$event.target.checked)">
-          <label attr.for="{{column.name}}">
+          <label attr.for="log-index-filter-component-{{column.name}}">
             <graph-legend-item label="{{column.label | translate}}" 
color="{{column.color}}"></graph-legend-item>
           </label>
         </th>
diff --git 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.less
 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.less
index a5c3957b44..efdb2c663b 100644
--- 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.less
+++ 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.less
@@ -21,12 +21,18 @@
 :host {
   div.log-index-filter-content {
     table {
+      td {
+        vertical-align: middle;
+      }
       &.table-header {
         background-color: #fff;
         margin-bottom: 0;
         position: sticky;
         top: -1px;
         z-index: 10;
+        tr {
+          box-shadow: -2px 2px 2px fadeout(@fluid-gray-1, 50%);
+        }
         th {
           padding: 8px 0;
         }
diff --git 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts
index 3b042aeb47..19d0b573c3 100644
--- 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts
@@ -55,6 +55,12 @@ import {ComponentLabelPipe} from 
'@app/pipes/component-label';
 
 import { dataAvailabilityStates, DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('LogIndexFilterComponent', () => {
   let component: LogIndexFilterComponent;
   let fixture: ComponentFixture<LogIndexFilterComponent>;
@@ -79,8 +85,11 @@ describe('LogIndexFilterComponent', () => {
           hosts,
           serviceLogsTruncated,
           tabs,
-          dataAvailabilityStates
-        })
+          dataAvailabilityStates,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       declarations: [
         LogIndexFilterComponent,
@@ -113,7 +122,8 @@ describe('LogIndexFilterComponent', () => {
         LogsStateService,
         NotificationsService,
         NotificationService,
-        DataAvailabilityStatesStore
+        DataAvailabilityStatesStore,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.ts
 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.ts
index 65c22a4d81..73c86043f5 100644
--- 
a/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.ts
+++ 
b/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.ts
@@ -33,7 +33,7 @@ import { UtilsService } from '@app/services/utils.service';
 import { ClustersService } from '@app/services/storage/clusters.service';
 import { HostsService } from '@app/services/storage/hosts.service';
 import { DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
-import { DataAvailabilityValues, DataAvailability } from '@app/classes/string';
+import { DataAvailabilityValues } from '@app/classes/string';
 
 @Component({
   selector: 'log-index-filter',
@@ -68,7 +68,7 @@ export class LogIndexFilterComponent implements OnInit, 
OnDestroy, OnChanges, Co
 
   configsAvailabilityState$: Observable<string> = 
this.dataAvailablilityStore.getParameter('logIndexFilter');
   configsAreLoading$: Observable<boolean> = 
this.configsAvailabilityState$.distinctUntilChanged().map(
-    (state: DataAvailability) => state === DataAvailabilityValues.LOADING
+    (state: DataAvailabilityValues) => state === DataAvailabilityValues.LOADING
   );
 
   @Input()
diff --git 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.html 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
index 3db75c691b..344ac0a703 100644
--- 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
+++ 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
@@ -16,18 +16,25 @@
 -->
 
 <div class="login-form well col-md-4 col-md-offset-4 col-sm-offset-4">
-  <div class="alert alert-danger" 
*ngIf="isLoginAlertDisplayed">{{errorMessage}}</div>
+  <div class="alert alert-danger" *ngIf="authorizationMessage$ | async">{{ 
(authorizationMessage$ | async) | translate}}</div>
   <form #loginForm="ngForm" (ngSubmit)="login()">
     <div class="form-group">
       <label for="username">{{'authorization.name' | translate}}</label>
-      <input class="form-control" type="text" id="username" name="username" 
required [(ngModel)]="username">
+      <input class="form-control" type="text" id="username" name="username"
+        [disabled]="isInputDisabled$ | async" required [(ngModel)]="username">
     </div>
     <div class="form-group">
       <label for="password">{{'authorization.password' | translate}}</label>
-      <input class="form-control" type="password" id="password" 
name="password" required [(ngModel)]="password">
+      <input class="form-control" type="password" id="password" name="password"
+        [disabled]="isInputDisabled$ | async" required [(ngModel)]="password">
     </div>
-    <button class="btn btn-success" [disabled]="!loginForm.form.valid || 
(isLoginInProgress$ | async)">
-      {{'authorization.signIn' | translate}}
-    </button>
+    <footer>
+      <button class="btn btn-success" [disabled]="!loginForm.form.valid || 
(isInputDisabled$ | async)">
+        {{'authorization.signIn' | translate}}
+      </button>
+      <span *ngIf="isCheckingAuthStatusInProgress$ | async" 
class="checking-auth-in-progress">
+        <i class="fa fa-spinner fa-spin"></i> 
{{'authorization.checkingAuthorization' | translate}}
+      </span>
+    </footer>
   </form>
 </div>
diff --git 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.less 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
index 19d800d7ed..f7a4265f11 100644
--- 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
+++ 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
@@ -16,7 +16,14 @@
  */
 
 @import '../../modules/shared/variables';
-
-.login-form {
-  margin-top: @block-margin-top;
+:host {
+  footer {
+    display: flex;
+    .checking-auth-in-progress {
+      margin-left: auto;
+    }
+  }
+  .login-form {
+    margin-top: @block-margin-top;
+  }
 }
diff --git 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
index 3ec55fda7a..eb6a21ebbe 100644
--- 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
@@ -16,19 +16,26 @@
  * limitations under the License.
  */
 
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, inject, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormsModule} from '@angular/forms';
-import {TranslationModules} from '@app/test-config.spec';
+import {TranslationModules, MockHttpRequestModules} from 
'@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppStateService, appState} from 
'@app/services/storage/app-state.service';
 import {HttpClientService} from '@app/services/http-client.service';
-import {AuthService} from '@app/services/auth.service';
 
 import {LoginFormComponent} from './login-form.component';
 import {RouterTestingModule} from '@angular/router/testing';
 import {NotificationsService} from 'angular2-notifications';
 import {NotificationService} from 
'@app/modules/shared/services/notification.service';
 
+import {Store} from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('LoginFormComponent', () => {
   let component: LoginFormComponent;
   let fixture: ComponentFixture<LoginFormComponent>;
@@ -56,17 +63,22 @@ describe('LoginFormComponent', () => {
         FormsModule,
         ...TranslationModules,
         StoreModule.provideStore({
-          appState
-        })
+          appState,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       providers: [
+        ...MockHttpRequestModules,
         AppStateService,
         {
           provide: AuthService,
           useValue: AuthServiceMock
         },
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ]
     })
     .compileComponents();
@@ -82,36 +94,4 @@ describe('LoginFormComponent', () => {
     expect(component).toBeTruthy();
   });
 
-  describe('#login()', () => {
-    const cases = [
-      {
-        isError: true,
-        isLoginAlertDisplayed: true,
-        isAuthorized: false,
-        title: 'login failure'
-      },
-      {
-        isError: false,
-        isLoginAlertDisplayed: false,
-        isAuthorized: true,
-        title: 'login success'
-      }
-    ];
-
-    cases.forEach(test => {
-      describe(test.title, () => {
-        beforeEach(() => {
-          authMock.isError = test.isError;
-          authMock.isAuthorized = test.isAuthorized;
-          component.login();
-        });
-
-        it('isLoginAlertDisplayed', () => {
-          
expect(component.isLoginAlertDisplayed).toEqual(test.isLoginAlertDisplayed);
-        });
-
-      });
-    });
-
-  });
 });
diff --git 
a/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts 
b/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
index 2f28411c10..8d5070b6a7 100644
--- a/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
+++ b/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
@@ -16,71 +16,56 @@
  * limitations under the License.
  */
 
-import {Component, ViewChild, OnInit, OnDestroy} from '@angular/core';
-import {Observable} from 'rxjs/Observable';
+import { Component, ViewChild } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
 import 'rxjs/add/operator/finally';
-import {Subscription} from 'rxjs/Subscription';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {AuthService} from '@app/services/auth.service';
-import {TranslateService} from '@ngx-translate/core';
-import {FormGroup} from '@angular/forms';
+import 'rxjs/add/operator/combineLatest';
+
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import {
+  isLoginInProgressSelector,
+  isCheckingAuthStatusInProgressSelector,
+  authMessageSelector
+} from '@app/store/selectors/auth.selectors';
+import { LogInAction } from '@app/store/actions/auth.actions';
+
+
+import { FormGroup } from '@angular/forms';
+
 
 @Component({
   selector: 'login-form',
   templateUrl: './login-form.component.html',
   styleUrls: ['./login-form.component.less']
 })
-export class LoginFormComponent implements OnInit, OnDestroy {
+export class LoginFormComponent {
 
   username: string;
 
   password: string;
 
-  isLoginAlertDisplayed: boolean;
+  authorizationMessage$: Observable<string> = 
this.store.select(authMessageSelector);
+  isLoginInProgress$: Observable<boolean> = 
this.store.select(isLoginInProgressSelector);
+  isCheckingAuthStatusInProgress$: Observable<boolean> = 
this.store.select(isCheckingAuthStatusInProgressSelector);
 
-  isLoginInProgress$: Observable<boolean> = 
this.appState.getParameter('isLoginInProgress');
+  isInputDisabled$: Observable<boolean> = 
Observable.combineLatest(this.isLoginInProgress$, 
this.isCheckingAuthStatusInProgress$)
+    .map(([loginInProgress, checkAuthInProgress]) => loginInProgress || 
checkAuthInProgress);
 
   errorMessage: string;
 
   @ViewChild('loginForm')
   loginForm: FormGroup;
 
-  subscriptions: Subscription[] = [];
-
   constructor(
-    private authService: AuthService,
-    private appState: AppStateService,
-    private translateService: TranslateService
+    private store: Store<AppStore>
   ) {}
 
-  ngOnInit(): void {
-    this.subscriptions.push(
-      this.loginForm.valueChanges.subscribe(this.onLoginFormChange)
-    );
-  }
-
-  ngOnDestroy(): void {
-    this.subscriptions.forEach((subscription: Subscription) => 
subscription.unsubscribe());
-  }
-
-  onLoginFormChange = (event) => {
-    this.isLoginAlertDisplayed = false;
-  }
-
-  private onLoginSuccess = (result: Boolean): void => {
-    this.isLoginAlertDisplayed = false;
-    this.errorMessage = '';
-  }
-
-  private onLoginError = (resp: Boolean): void => {
-    
this.translateService.get('authorization.error.401').first().subscribe((message:
 string) => {
-      this.errorMessage = message;
-      this.isLoginAlertDisplayed = true;
-    });
-  }
-
   login() {
-    this.authService.login(this.username, 
this.password).subscribe(this.onLoginSuccess, this.onLoginError);
+    this.store.dispatch(new LogInAction({
+      username: this.username,
+      password: this.password
+    }));
   }
 
 }
diff --git 
a/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
index 78245e47e2..0051db7a1b 100644
--- 
a/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
@@ -43,12 +43,19 @@ import {TabsComponent} from 
'@app/components/tabs/tabs.component';
 import {LogsContainerComponent} from './logs-container.component';
 import {ClusterSelectionService} from 
'@app/services/storage/cluster-selection.service';
 import {RouterTestingModule} from '@angular/router/testing';
-import {LogsStateService} from '@app/services/storage/logs-state.service';
 import {RoutingUtilsService} from '@app/services/routing-utils.service';
 import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import {LogsStateService} from '@app/services/storage/logs-state.service';
+
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('LogsContainerComponent', () => {
   let component: LogsContainerComponent;
   let fixture: ComponentFixture<LogsContainerComponent>;
@@ -74,8 +81,11 @@ describe('LogsContainerComponent', () => {
           serviceLogsHistogramData,
           tabs,
           hosts,
-          serviceLogsTruncated
+          serviceLogsTruncated,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules,
         TooltipModule.forRoot(),
       ],
@@ -99,9 +109,10 @@ describe('LogsContainerComponent', () => {
         ClusterSelectionService,
         RoutingUtilsService,
         LogsFilteringUtilsService,
-        LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        LogsStateService,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
 
b/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
index 6b983fcac0..34eb2a4c37 100644
--- 
a/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
+++ 
b/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
@@ -313,7 +313,7 @@ export class LogsContainerComponent implements OnInit, 
OnDestroy {
             filtersParams,
             tab.appState.activeLogsType
           );
-          // we dont't have to reset the form with the new values when there 
is tab changes
+          // we don't have to reset the form with the new values when there is 
tab changes
           // because the onActiveTabIdChange will call the setActiveTabById on 
LogsContainerService
           // which will reset the form to the tab's activeFilters prop.
           // If we do reset wvery time then the form will be reseted twice 
with every tab changes... not a big deal anyway
diff --git 
a/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
 
b/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
index cd0f1be467..adec4a7439 100644
--- 
a/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
+++ 
b/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
@@ -16,35 +16,10 @@
  * limitations under the License.
  */
 
-import {Component, OnDestroy, OnInit} from '@angular/core';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {Subscription} from 'rxjs/Subscription';
+import { Component } from '@angular/core';
 
 @Component({
   selector: 'main-container',
   templateUrl: './main-container.component.html'
 })
-export class MainContainerComponent implements OnInit, OnDestroy{
-
-  private subscriptions: Subscription[] = [];
-
-  constructor(private appState: AppStateService) {}
-
-  ngOnInit() {
-    this.subscriptions.push(
-      this.appState.getParameter('isAuthorized').subscribe((value: boolean) => 
this.isAuthorized = value)
-    );
-    this.subscriptions.push(
-      this.appState.getParameter('isInitialLoading').subscribe((value: 
boolean) => this.isInitialLoading = value)
-    );
-  }
-
-  ngOnDestroy() {
-    this.subscriptions.forEach((subscription: Subscription) => 
subscription.unsubscribe());
-  }
-
-  isAuthorized: boolean = false;
-
-  isInitialLoading: boolean = false;
-
-}
+export class MainContainerComponent {}
diff --git 
a/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts
index 77457813d5..5bf2969a34 100644
--- 
a/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts
@@ -56,6 +56,11 @@ import {RouterTestingModule} from '@angular/router/testing';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('ServiceLogsTableComponent', () => {
   let component: ServiceLogsTableComponent;
   let fixture: ComponentFixture<ServiceLogsTableComponent>;
@@ -88,8 +93,11 @@ describe('ServiceLogsTableComponent', () => {
           tabs,
           clusters,
           components,
-          hosts
+          hosts,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         TooltipModule.forRoot()
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts
index f076861022..d568354dbc 100644
--- 
a/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts
@@ -35,7 +35,7 @@ import {
 } from '@app/services/storage/service-logs-histogram-data.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from 
'@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
+// import {HttpClientService} from '@app/services/http-client.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UtilsService} from '@app/services/utils.service';
 
@@ -48,6 +48,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('TimeRangePickerComponent', () => {
   let component: TimeRangePickerComponent;
   let fixture: ComponentFixture<TimeRangePickerComponent>;
@@ -70,8 +76,11 @@ describe('TimeRangePickerComponent', () => {
           serviceLogsFields,
           serviceLogsHistogramData,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
@@ -96,7 +105,8 @@ describe('TimeRangePickerComponent', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })
diff --git 
a/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
 
b/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
index 736c7ef897..2de7d338c5 100644
--- 
a/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
@@ -54,6 +54,11 @@ import {NotificationService} from 
'@modules/shared/services/notification.service
 
 import { dataAvailabilityStates, DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('TimeZonePickerComponent', () => {
   let component: TimeZonePickerComponent;
   let fixture: ComponentFixture<TimeZonePickerComponent>;
@@ -81,8 +86,11 @@ describe('TimeZonePickerComponent', () => {
           serviceLogsHistogramData,
           serviceLogsTruncated,
           tabs,
-          dataAvailabilityStates
+          dataAvailabilityStates,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts 
b/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
index 3ae2f972d6..9f263a4bed 100644
--- 
a/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
@@ -50,6 +50,11 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('TopMenuComponent', () => {
   let component: TopMenuComponent;
   let fixture: ComponentFixture<TopMenuComponent>;
@@ -72,8 +77,11 @@ describe('TopMenuComponent', () => {
           tabs,
           clusters,
           components,
-          hosts
+          hosts,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       declarations: [TopMenuComponent],
diff --git 
a/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts 
b/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
index a87ca2f4ff..76af57bbb0 100644
--- a/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
+++ b/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
@@ -21,10 +21,13 @@ import {FormGroup} from '@angular/forms';
 import {FilterCondition, TimeUnitListItem} from '@app/classes/filtering';
 import {ListItem} from '@app/classes/list-item';
 import {HomogeneousObject} from '@app/classes/object';
-import {AuthService} from '@app/services/auth.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {Router} from '@angular/router';
 
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { LogOutAction } from '@app/store/actions/auth.actions';
+
 @Component({
   selector: 'top-menu',
   templateUrl: './top-menu.component.html',
@@ -32,7 +35,11 @@ import {Router} from '@angular/router';
 })
 export class TopMenuComponent {
 
-  constructor(private authService: AuthService, private logsContainer: 
LogsContainerService, private router: Router) {}
+  constructor(
+    private logsContainer: LogsContainerService,
+    private router: Router,
+    private store: Store<AppStore>
+  ) {}
 
   get filtersForm(): FormGroup {
     return this.logsContainer.filtersForm;
@@ -45,10 +52,10 @@ export class TopMenuComponent {
   openSettings = (): void => {};
 
   /**
-   * Request a logout action from AuthService
+   * Dispatch the LogOutAction.
    */
   logout = (): void => {
-    this.authService.logout();
+    this.store.dispatch(new LogOutAction());
   }
 
   navigateToShipperConfig = (): void => {
diff --git a/ambari-logsearch-web/src/app/modules/app-load/app-load.module.ts 
b/ambari-logsearch-web/src/app/modules/app-load/app-load.module.ts
index ade23da6be..2f93cb3350 100644
--- a/ambari-logsearch-web/src/app/modules/app-load/app-load.module.ts
+++ b/ambari-logsearch-web/src/app/modules/app-load/app-load.module.ts
@@ -22,13 +22,26 @@ import { HttpClientModule } from '@angular/common/http';
 import { AppLoadService } from './services/app-load.service';
 import { DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
-export function check_if_authorized(appLoadService: AppLoadService) {
-  return () => appLoadService.syncAuthorizedStateWithBackend();
-}
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { CheckAuthorizationStatusAction } from 
'@app/store/actions/auth.actions';
+import { authStatusSelector } from '@app/store/selectors/auth.selectors';
+import { AuthorizationStatuses } from '@app/store/reducers/auth.reducers';
+
 export function set_translation_service(appLoadService: AppLoadService) {
   return () => appLoadService.setTranslationService();
 }
 
+export function check_auth_status(store: Store<AppStore>) {
+  return () => new Promise((resolve) => {
+    store.select(authStatusSelector)
+      .filter(
+        (status: AuthorizationStatuses): boolean => (status !== null && 
AuthorizationStatuses.CHEKCING_AUTHORIZATION_STATUS !== status)
+      ).first().subscribe(resolve);
+    store.dispatch(new CheckAuthorizationStatusAction());
+  });
+}
+
 @NgModule({
   imports: [
     HttpClientModule
@@ -36,8 +49,8 @@ export function set_translation_service(appLoadService: 
AppLoadService) {
   providers: [
     AppLoadService,
     DataAvailabilityStatesStore,
-{ provide: APP_INITIALIZER, useFactory: set_translation_service, deps: 
[AppLoadService], multi: true },
-    { provide: APP_INITIALIZER, useFactory: check_if_authorized, deps: 
[AppLoadService], multi: true }
+    { provide: APP_INITIALIZER, useFactory: set_translation_service, deps: 
[AppLoadService], multi: true },
+    { provide: APP_INITIALIZER, useFactory: check_auth_status, deps: [Store], 
multi: true }
   ]
 })
 export class AppLoadModule { }
diff --git 
a/ambari-logsearch-web/src/app/modules/app-load/services/app-load.service.ts 
b/ambari-logsearch-web/src/app/modules/app-load/services/app-load.service.ts
index 9405c9b8a5..cc107af422 100644
--- a/ambari-logsearch-web/src/app/modules/app-load/services/app-load.service.ts
+++ b/ambari-logsearch-web/src/app/modules/app-load/services/app-load.service.ts
@@ -17,24 +17,28 @@
  */
 
 import { Injectable } from '@angular/core';
-import {Response} from '@angular/http';
+import { Response } from '@angular/http';
 import 'rxjs/add/operator/toPromise';
-import {TranslateService} from '@ngx-translate/core';
+import { TranslateService } from '@ngx-translate/core';
 
-import {AppStateService} from 'app/services/storage/app-state.service';
-import {HttpClientService} from 'app/services/http-client.service';
-import {ClustersService} from 'app/services/storage/clusters.service';
-import {ServiceLogsFieldsService} from 
'app/services/storage/service-logs-fields.service';
-import {AuditLogsFieldsService} from 
'app/services/storage/audit-logs-fields.service';
-import {AuditFieldsDefinitionSet, LogField} from 'app/classes/object';
-import {Observable} from 'rxjs/Observable';
-import {HostsService} from 'app/services/storage/hosts.service';
-import {NodeItem} from 'app/classes/models/node-item';
-import {ComponentsService} from 'app/services/storage/components.service';
-import {DataAvailabilityValues} from 'app/classes/string';
+import { AppStateService } from 'app/services/storage/app-state.service';
+import { HttpClientService } from 'app/services/http-client.service';
+import { ClustersService } from 'app/services/storage/clusters.service';
+import { ServiceLogsFieldsService } from 
'app/services/storage/service-logs-fields.service';
+import { AuditLogsFieldsService } from 
'app/services/storage/audit-logs-fields.service';
+import { AuditFieldsDefinitionSet, LogField } from 'app/classes/object';
+import { Observable } from 'rxjs/Observable';
+import { HostsService } from 'app/services/storage/hosts.service';
+import { NodeItem } from 'app/classes/models/node-item';
+import { ComponentsService } from 'app/services/storage/components.service';
+import { DataAvailabilityValues } from 'app/classes/string';
 import { DataAvaibilityStatesModel } from 
'@app/modules/app-load/models/data-availability-state.model';
 import { DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
+
 // @ToDo create a separate data state enrty in the store with keys of the 
model names
 export enum DataStateStoreKeys {
   CLUSTERS_DATA_KEY = 'clustersDataState',
@@ -64,9 +68,10 @@ export class AppLoadService {
     private translationService: TranslateService,
     private hostStoreService: HostsService,
     private componentsStorageService: ComponentsService,
-    private dataAvaibilityStateStore: DataAvailabilityStatesStore
+    private dataAvaibilityStateStore: DataAvailabilityStatesStore,
+    private store: Store<AppStore>
   ) {
-    
this.appStateService.getParameter('isAuthorized').subscribe(this.initOnAuthorization);
+    
this.store.select(isAuthorizedSelector).subscribe(this.initOnAuthorization);
     this.appStateService.setParameter('isInitialLoading', true);
 
     Observable.combineLatest(
@@ -83,11 +88,9 @@ export class AppLoadService {
         let nextDataState: DataAvailabilityValues = 
DataAvailabilityValues.NOT_AVAILABLE;
         if (values.indexOf(DataAvailabilityValues.ERROR) > -1) {
           nextDataState = DataAvailabilityValues.ERROR;
-        }
-        if (values.indexOf(DataAvailabilityValues.LOADING) > -1) {
+        } else if (values.indexOf(DataAvailabilityValues.LOADING) > -1) {
           nextDataState = DataAvailabilityValues.LOADING;
-        }
-        if ( values.filter((value: DataAvailabilityValues) => value !== 
DataAvailabilityValues.AVAILABLE).length === 0 ) {
+        } else if ( values.filter((value: DataAvailabilityValues) => value !== 
DataAvailabilityValues.AVAILABLE).length === 0 ) {
           nextDataState = DataAvailabilityValues.AVAILABLE;
         }
         return nextDataState;
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-button/dropdown-button.component.ts
 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-button/dropdown-button.component.ts
index 534b69dcd5..ab519d069d 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-button/dropdown-button.component.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-button/dropdown-button.component.ts
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
 
-import {Component, Input, Output, EventEmitter} from '@angular/core';
-import {ListItem} from '@app/classes/list-item';
-import {UtilsService} from '@app/services/utils.service';
+import { Component, Input, Output, EventEmitter } from '@angular/core';
+import { ListItem } from '@app/classes/list-item';
+import { UtilsService } from '@app/services/utils.service';
 
 @Component({
   selector: 'dropdown-button',
@@ -87,7 +87,9 @@ export class DropdownButtonComponent {
     return this.showSelectedValue && !this.isMultipleChoice && 
this.selection.length > 0;
   }
 
-  constructor(protected utils: UtilsService) {}
+  constructor(
+    protected utils: UtilsService
+  ) {}
 
   updateSelection(updates: ListItem | ListItem[]): void {
     if (updates && (!Array.isArray(updates) || updates.length)) {
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.html
 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.html
index a15b1c315c..fac626fd4e 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.html
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.html
@@ -18,15 +18,15 @@
   <li [class.divider]="item.isDivider" [class.filtered]="isFiltered(item)"
       [attr.role]="item.isDivider ? 'separator' : null" 
[class]="(item.cssClass || '')">
     <ng-container *ngIf="!item.isDivider">
-      <label class="list-item-label" *ngIf="isMultipleChoice">
-        <input type="checkbox" [attr.id]="item.id || item.value" 
[(ngModel)]="item.isChecked"
+      <span class="list-item-label" *ngIf="isMultipleChoice">
+        <input type="checkbox" [attr.id]="(instanceId) + '-' + (item.id || 
item.value)" [(ngModel)]="item.isChecked"
                (change)="changeSelectedItem({value: item.value, isChecked: 
$event.currentTarget.checked}, $event)">
-        <label [attr.for]="item.id || item.value" class="label-container">
+        <label [attr.for]="(instanceId) + '-' + (item.id || item.value)" 
class="label-container">
           <span *ngIf="item.iconClass" [ngClass]="item.iconClass"></span>
           <span class="item-label-text">{{item.label | translate}}</span>
           <span #additionalComponent></span>
         </label>
-      </label>
+      </span>
       <span class="list-item-label label-container" *ngIf="!isMultipleChoice" 
(click)="changeSelectedItem(item, $event)">
         <span *ngIf="item.iconClass" [ngClass]="item.iconClass"></span>
         <span class="item-label-text">{{item.label | translate}}</span>
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.spec.ts
 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.spec.ts
index 8b3b13beb4..6f74de0dc0 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.spec.ts
@@ -49,6 +49,11 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('DropdownListComponent', () => {
   let component: DropdownListComponent;
   let fixture: ComponentFixture<DropdownListComponent>;
@@ -80,8 +85,11 @@ describe('DropdownListComponent', () => {
           clusters,
           components,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         FormsModule
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.ts
 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.ts
index 651578ae2f..18096370c2 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/dropdown-list/dropdown-list.component.ts
@@ -79,10 +79,14 @@ export class DropdownListComponent implements OnInit, 
OnChanges, AfterViewChecke
 
   private subscriptions: Subscription[] = [];
 
+  instanceId: string;
+
   constructor(
     private componentGenerator: ComponentGeneratorService,
     private changeDetector: ChangeDetectorRef
-  ) {}
+  ) {
+    this.instanceId = `dropdown-list-${Date.now()}`;
+  }
 
   ngOnInit() {
     this.separateSelections();
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.spec.ts
 
b/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.spec.ts
index 1b081c811c..c1bde14fc5 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.spec.ts
@@ -47,6 +47,11 @@ import {RouterTestingModule} from '@angular/router/testing';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('FilterDropdownComponent', () => {
   let component: FilterDropdownComponent;
   let fixture: ComponentFixture<FilterDropdownComponent>;
@@ -93,8 +98,11 @@ describe('FilterDropdownComponent', () => {
           tabs,
           clusters,
           components,
-          hosts
+          hosts,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/components/modal-dialog/modal-dialog.component.spec.ts
 
b/ambari-logsearch-web/src/app/modules/shared/components/modal-dialog/modal-dialog.component.spec.ts
index 19cd74dc03..f13872c0a0 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/components/modal-dialog/modal-dialog.component.spec.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/components/modal-dialog/modal-dialog.component.spec.ts
@@ -16,12 +16,21 @@
  */
 
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from 
'@app/services/storage/app-state.service';
 import {
   getCommonTestingBedConfiguration, MockHttpRequestModules,
   TranslationModules
 } from '@app/test-config.spec';
 
+import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
+import {NotificationService} from 
'@modules/shared/services/notification.service';
+
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 import { ModalDialogComponent } from './modal-dialog.component';
 
 describe('ModalDialogComponent', () => {
@@ -31,8 +40,15 @@ describe('ModalDialogComponent', () => {
   beforeEach(async(() => {
     TestBed.configureTestingModule(getCommonTestingBedConfiguration({
       imports: [
-        ...TranslationModules
+        ...TranslationModules,
+        StoreModule.provideStore({
+          appState,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
+      providers: [AppStateService, NotificationsService, NotificationService],
       declarations: [ ModalDialogComponent ]
     }))
     .compileComponents();
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/interfaces/notification.interface.ts
 
b/ambari-logsearch-web/src/app/modules/shared/interfaces/notification.interface.ts
index b8b3d6a6c3..096214c760 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/interfaces/notification.interface.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/interfaces/notification.interface.ts
@@ -15,10 +15,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Options} from 'angular2-notifications/src/options.type';
+import { Options } from 'angular2-notifications/src/options.type';
+import { NotificationType } from 
'@modules/shared/services/notification.service';
 
 export interface NotificationInterface extends Options {
-  type: string;
+  type: NotificationType | string;
   message: string;
-  title: string;
+  title?: string;
 }
diff --git 
a/ambari-logsearch-web/src/app/modules/shared/services/notification.service.ts 
b/ambari-logsearch-web/src/app/modules/shared/services/notification.service.ts
index df6ca2a028..ef340bd455 100644
--- 
a/ambari-logsearch-web/src/app/modules/shared/services/notification.service.ts
+++ 
b/ambari-logsearch-web/src/app/modules/shared/services/notification.service.ts
@@ -70,7 +70,7 @@ export class NotificationService {
     }
     const icon = notificationIcons[method] || notificationIcons['info'];
     const htmlMsg = messageTemplate
-      .replace(/{{title}}/gi, this.translateService.instant(title))
+      .replace(/{{title}}/gi, title ? this.translateService.instant(title) : 
'')
       .replace(/{{message}}/gi, this.translateService.instant(message))
       .replace(/{{icon}}/gi, icon);
     return this.notificationService.html(htmlMsg, method, {icon, ...config});
diff --git a/ambari-logsearch-web/src/app/modules/shared/variables.less 
b/ambari-logsearch-web/src/app/modules/shared/variables.less
index 7ffd20c63e..b9175274d1 100644
--- a/ambari-logsearch-web/src/app/modules/shared/variables.less
+++ b/ambari-logsearch-web/src/app/modules/shared/variables.less
@@ -19,6 +19,7 @@
 // Variables
 @blue: #1491C1;
 @grey: #DDD;
+@white: rgba(255, 255, 255, 1);
 
 @fluid-gray-1: #ccc;
 @fluid-gray-2: #999;
@@ -39,7 +40,7 @@
 @grey-color: #DDD;
 @default-line-height: 1.42857143;
 @main-background-color: #ECECEC;
-@filters-panel-background-color: #FFF;
+@filters-panel-background-color: @white;
 @filters-panel-padding: 10px 0;
 @list-header-background-color: #F2F2F2;
 @checkbox-top: 4px;
diff --git a/ambari-logsearch-web/src/app/services/auth-guard.service.ts 
b/ambari-logsearch-web/src/app/services/auth-guard.service.ts
index 8b56239224..f8f8e5c190 100644
--- a/ambari-logsearch-web/src/app/services/auth-guard.service.ts
+++ b/ambari-logsearch-web/src/app/services/auth-guard.service.ts
@@ -22,16 +22,24 @@ import {Observable} from 'rxjs/Observable';
 
 import {AuthService} from '@app/services/auth.service';
 
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
+
 /**
  * This guard goal is to prevent to display screens where authorization needs.
  */
 @Injectable()
 export class AuthGuardService implements CanActivate {
 
-  constructor(private authService: AuthService, private router: Router) {}
+  constructor(
+    private authService: AuthService,
+    private router: Router,
+    private store: Store<AppStore>
+  ) {}
 
   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
Observable<boolean> {
-    return this.authService.isAuthorized().map((isAuthorized: boolean) => {
+    return this.store.select(isAuthorizedSelector).map((isAuthorized: boolean) 
=> {
       this.authService.redirectUrl = state.url;
       if (!isAuthorized) {
         this.router.navigate(['/login']);
diff --git a/ambari-logsearch-web/src/app/services/auth.service.spec.ts 
b/ambari-logsearch-web/src/app/services/auth.service.spec.ts
index 74a7125bdf..0d302812c8 100644
--- a/ambari-logsearch-web/src/app/services/auth.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/auth.service.spec.ts
@@ -23,6 +23,8 @@ import 'rxjs/add/operator/first';
 import 'rxjs/add/operator/last';
 import 'rxjs/add/operator/take';
 import {StoreModule} from '@ngrx/store';
+import {Store} from '@ngrx/store';
+import {AppStore} from '@app/classes/models/store';
 import {AppStateService, appState} from 
'@app/services/storage/app-state.service';
 import {AuthService} from '@app/services/auth.service';
 import {HttpClientService} from '@app/services/http-client.service';
@@ -30,6 +32,11 @@ import {RouterTestingModule} from '@angular/router/testing';
 import {Routes} from '@angular/router';
 import {Component} from '@angular/core';
 
+
+import * as auth from '@app/store/reducers/auth.reducers';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
+import { LogInAction, LogOutAction, AuthorizedAction } from 
'@app/store/actions/auth.actions';
+
 describe('AuthService', () => {
 
   const successResponse = {
@@ -41,8 +48,8 @@ describe('AuthService', () => {
       bytesLoaded: 100,
       totalBytes: 100,
       headers: null
-    },
-    errorResponse = {
+    };
+  const errorResponse = {
       type: 'error',
       ok: false,
       url: '/',
@@ -54,11 +61,20 @@ describe('AuthService', () => {
     };
 
   // Note: We add delay to help the isLoginInProgress test case.
-  let httpServiceStub = {
+  const httpServiceStub = {
     isError: false,
-    postFormData: function () {
+    request: function () {
       const isError = this.isError;
       return Observable.create(observer => observer.next(isError ? 
errorResponse : successResponse)).delay(1);
+    },
+    postFormData: function () {
+      return this.request();
+    },
+    post: function () {
+      return this.request();
+    },
+    get: function () {
+      return this.request();
     }
   };
 
@@ -74,7 +90,8 @@ describe('AuthService', () => {
       imports: [
         HttpModule,
         StoreModule.provideStore({
-          appState
+          appState,
+          auth: auth.reducer
         }),
         RouterTestingModule.withRoutes(testRoutes)
       ],
@@ -90,54 +107,27 @@ describe('AuthService', () => {
     expect(service).toBeTruthy();
   }));
 
-  it('should set the isAuthorized state to true in appState when the login is 
success', async(inject(
-    [AuthService, AppStateService, HttpClientService],
-    (authService: AuthService, appStateService: AppStateService, 
httpClientService) => {
-      httpClientService.isError = false;
-      authService.login('test', 'test')
-        .subscribe(() => {
-          appStateService.getParameter('isAuthorized').subscribe((value: 
Boolean): void => {
-            expect(value).toBe(true);
-          });
-        }, value => {
-          throw value;
-        });
-    }
-  )));
-
-
-  it('should set the isAuthorized state to false in appState when the login is 
failed', async(inject(
-    [AuthService, AppStateService, HttpClientService],
-    (authService: AuthService, appStateService: AppStateService, 
httpClientService) => {
-      httpClientService.isError = true;
-      authService.login('test', 'test')
-        .subscribe(() => {
-          appStateService.getParameter('isAuthorized').subscribe((value: 
Boolean): void => {
-            expect(value).toBe(false);
-          });
-        });
+  it('should return with Observable<Response> when login called', async(inject(
+    [AuthService, Store],
+    (authService: AuthService) => {
+      const response = authService.login('test', 'test');
+      expect(response instanceof Observable).toBe(true);
     }
   )));
 
-  it('should set the isLoginInProgress state to true when the login started', 
async(inject(
-    [AuthService, AppStateService, HttpClientService],
-    (authService: AuthService, appStateService: AppStateService, 
httpClientService) => {
-      httpClientService.isError = false;
-      authService.login('test', 'test');
-      
appStateService.getParameter('isLoginInProgress').first().subscribe((value: 
Boolean): void => {
-        expect(value).toBe(true);
-      });
+  it('should return with Observable<Response> when logout called', 
async(inject(
+    [AuthService, Store],
+    (authService: AuthService) => {
+      const response = authService.logout();
+      expect(response instanceof Observable).toBe(true);
     }
   )));
 
-  it('should set the isLoginInProgress state to true after the login is 
success', async(inject(
-    [AuthService, AppStateService, HttpClientService],
-    (authService: AuthService, appStateService: AppStateService, 
httpClientService) => {
-      httpClientService.isError = false;
-      authService.login('test', 'test');
-      
appStateService.getParameter('isLoginInProgress').take(2).last().subscribe((value:
 Boolean): void => {
-        expect(value).toBe(false);
-      });
+  it('should return with Observable<Response> when checkAuthorizationState 
called', async(inject(
+    [AuthService, Store],
+    (authService: AuthService) => {
+      const response = authService.checkAuthorizationState();
+      expect(response instanceof Observable).toBe(true);
     }
   )));
 
diff --git a/ambari-logsearch-web/src/app/services/auth.service.ts 
b/ambari-logsearch-web/src/app/services/auth.service.ts
index 1bf1875861..c7c74baa01 100644
--- a/ambari-logsearch-web/src/app/services/auth.service.ts
+++ b/ambari-logsearch-web/src/app/services/auth.service.ts
@@ -16,19 +16,14 @@
  * limitations under the License.
  */
 
-import {Injectable} from '@angular/core';
-import {Response} from '@angular/http';
+import { Injectable } from '@angular/core';
+import { Response } from '@angular/http';
 
-import {Observable} from 'rxjs/Observable';
+import { Observable } from 'rxjs/Observable';
 
-import {HttpClientService} from '@app/services/http-client.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {Router} from '@angular/router';
-import {Subscription} from 'rxjs/Subscription';
-import { Observer } from 'rxjs/Observer';
-
-export const IS_AUTHORIZED_APP_STATE_KEY: string = 'isAuthorized';
-export const IS_LOGIN_IN_PROGRESS_APP_STATE_KEY: string = 'isLoginInProgress';
+import { HttpClientService } from '@app/services/http-client.service';
+import { AppStateService } from '@app/services/storage/app-state.service';
+import { Subscription } from 'rxjs/Subscription';
 
 /**
  * This service meant to be a single place where the authorization should 
happen.
@@ -47,140 +42,32 @@ export class AuthService {
 
   constructor(
     private httpClient: HttpClientService,
-    private appState: AppStateService,
-    private router: Router
-  ) {
-    
this.subscriptions.push(this.appState.getParameter(IS_AUTHORIZED_APP_STATE_KEY).subscribe(
-      this.onAppStateIsAuthorizedChanged
-    ));
-  }
+    private appState: AppStateService
+  ) {}
 
-  onAppStateIsAuthorizedChanged = (isAuthorized): void => {
-    if (isAuthorized) {
-      const redirectTo = this.redirectUrl || 
(this.router.routerState.snapshot.url === '/login' ? '/' : null);
-      if (redirectTo) {
-        if (Array.isArray(redirectTo)) {
-          this.router.navigate(redirectTo);
-        } else {
-          this.router.navigateByUrl(redirectTo);
-        }
-      }
-      this.redirectUrl = '';
-    } else {
-      this.router.navigate(['/login']);
-    }
-  }
   /**
    * The single entry point to request a login action.
    * @param {string} username
    * @param {string} password
    * @returns {Observable<Response>}
    */
-  login(username: string, password: string): Observable<Boolean> {
-    this.setLoginInProgressAppState(true);
-    const response$ = this.httpClient.postFormData('login', {
+  login(username: string, password: string): Observable<Response> {
+    return this.httpClient.postFormData('login', {
       username: username,
       password: password
     });
-    response$.subscribe(
-      (resp: Response) => this.onLoginResponse(resp),
-      (resp: Response) => this.onLoginError(resp)
-    );
-    return response$.switchMap((resp: Response) => {
-      return Observable.create((observer: Observer<boolean>) => {
-        if (resp.ok) {
-          observer.next(resp.ok);
-        } else {
-          observer.error(resp);
-        }
-        observer.complete();
-      });
-    });
   }
 
   /**
    * The single unique entry point to request a logout action
-   * @returns {Observable<boolean | Error>}
-   */
-  logout(): Observable<Boolean> {
-    const response$ = this.httpClient.get('logout');
-    response$.subscribe(
-      (resp: Response) => this.onLogoutResponse(resp),
-      (resp: Response) => this.onLogoutError(resp)
-    );
-    return response$.switchMap((resp: Response) => {
-      return Observable.create((observer) => {
-        if (resp.ok) {
-          observer.next(resp.ok);
-        } else {
-          observer.error(resp);
-        }
-        observer.complete();
-      });
-    });
-  }
-
-  /**
-   * Set the isLoginInProgress state in AppState. The reason behind create a 
function for this is that we set this app
-   * state from two different places so let's do always the same way.
-   * @param {boolean} state the new value of the isLoginInProgress app state.
-   */
-  private setLoginInProgressAppState(state: boolean) {
-    this.appState.setParameter(IS_LOGIN_IN_PROGRESS_APP_STATE_KEY, state);
-  }
-
-  /**
-   * Set the isAuthorized state in AppState. The reason behind create a 
function for this is that we set this app
-   * state from two different places so let's do always the same way.
-   * @param {boolean} state The new value of the isAuthorized app state.
-   */
-  private setAuthorizedAppState(state: boolean) {
-    this.appState.setParameter(IS_AUTHORIZED_APP_STATE_KEY, state);
-  }
-
-  /**
-   * Handling the login success response. The goal is to set the authorized 
property of the appState.
-   * @param resp
-   */
-  private onLoginResponse(resp: Response): void {
-    this.setLoginInProgressAppState(false);
-    if (resp && resp.ok) {
-      this.setAuthorizedAppState(resp.ok);
-    }
-  }
-
-  /**
-   * Handling the login error response. The goal is to set the authorized 
property correctly of the appState.
-   * @ToDo decide if we should have a loginError app state.
-   * @param {Reponse} resp
-   */
-  private onLoginError(resp: Response): void {
-    this.setLoginInProgressAppState(false);
-    this.setAuthorizedAppState(false);
-  }
-
-  /**
-   * Handling the logout success response. The goal is to set the authorized 
property of the appState.
-   * @param {Response} resp
+   * @returns {Observable<Response>}
    */
-  private onLogoutResponse(resp: Response): void {
-    if (resp && resp.ok) {
-      this.setAuthorizedAppState(false);
-    }
+  logout(): Observable<Response> {
+    return this.httpClient.get('logout');
   }
 
-  /**
-   * Handling the logout error response.
-   * @ToDo decide if we should create a logoutError app state or not
-   * @param {Response} resp
-   */
-  private onLogoutError(resp: Response): void {}
-
-  /**
-   * Simply return with the boolean value of the isAuthorized application 
state key.
-   */
-  public isAuthorized(): Observable<boolean> {
-    return this.appState.getParameter(IS_AUTHORIZED_APP_STATE_KEY);
+  checkAuthorizationState(): Observable<Response> {
+    return this.httpClient.get('status');
   }
 
 }
diff --git 
a/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts 
b/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
index e5584e3300..989994cba6 100644
--- a/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
@@ -47,6 +47,12 @@ import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.serv
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 
+import { AuthService } from '@app/services/auth.service';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('ComponentGeneratorService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
@@ -65,8 +71,11 @@ describe('ComponentGeneratorService', () => {
           clusters,
           components,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
@@ -93,7 +102,8 @@ describe('ComponentGeneratorService', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ]
     });
   });
diff --git 
a/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts 
b/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts
index ccfe611d61..70f05ad855 100644
--- a/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts
@@ -47,6 +47,12 @@ import {LogsStateService} from 
'@app/services/storage/logs-state.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 
+import { AuthService } from '@app/services/auth.service';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('HistoryManagerService', () => {
   beforeEach(() => {
 
@@ -67,8 +73,11 @@ describe('HistoryManagerService', () => {
           components,
           hosts,
           serviceLogsTruncated,
-          tabs
-        })
+          tabs,
+          auth: auth.reducer
+        }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects)
       ],
       providers: [
         ...MockHttpRequestModules,
@@ -93,7 +102,8 @@ describe('HistoryManagerService', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ]
     });
   });
diff --git a/ambari-logsearch-web/src/app/services/http-client.service.ts 
b/ambari-logsearch-web/src/app/services/http-client.service.ts
index c65278b51a..2d68977e46 100644
--- a/ambari-logsearch-web/src/app/services/http-client.service.ts
+++ b/ambari-logsearch-web/src/app/services/http-client.service.ts
@@ -32,6 +32,11 @@ import {ServiceLogsHistogramQueryParams} from 
'@app/classes/queries/service-logs
 import {ServiceLogsTruncatedQueryParams} from 
'@app/classes/queries/service-logs-truncated-query-params';
 import {AppStateService} from '@app/services/storage/app-state.service';
 
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { HttpAuthorizationErrorResponseAction } from 
'@app/store/actions/auth.actions';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
+
 @Injectable()
 export class HttpClientService extends Http {
 
@@ -100,7 +105,12 @@ export class HttpClientService extends Http {
 
   private readonly unauthorizedStatuses = [401, 403, 419];
 
-  constructor(backend: XHRBackend, defaultOptions: RequestOptions, private 
appState: AppStateService) {
+  constructor(
+    backend: XHRBackend,
+    defaultOptions: RequestOptions,
+    private appState: AppStateService,
+    private store: Store<AppStore>
+  ) {
     super(backend, defaultOptions);
   }
 
@@ -166,7 +176,11 @@ export class HttpClientService extends Http {
     const handleResponseError = (error) => {
       let handled = false;
       if (this.unauthorizedStatuses.indexOf(error.status) > -1) {
-        this.appState.setParameter('isAuthorized', false);
+        
this.store.select(isAuthorizedSelector).first().subscribe((isAuthorized: 
boolean) => {
+          if (isAuthorized) {
+            this.store.dispatch(new 
HttpAuthorizationErrorResponseAction({response: error}));
+          }
+        });
         handled = true;
       }
       return handled;
diff --git 
a/ambari-logsearch-web/src/app/services/log-index-filter.service.spec.ts 
b/ambari-logsearch-web/src/app/services/log-index-filter.service.spec.ts
index 924deee671..eb4bf66057 100644
--- a/ambari-logsearch-web/src/app/services/log-index-filter.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/log-index-filter.service.spec.ts
@@ -24,6 +24,9 @@ import {
 
 import { AppStateService } from '@app/services/storage/app-state.service';
 
+import {NotificationService} from 
'@modules/shared/services/notification.service';
+import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
+
 import { LogIndexFilterService } from './log-index-filter.service';
 
 describe('LogIndexFilterService', () => {
@@ -34,7 +37,9 @@ describe('LogIndexFilterService', () => {
       ],
       providers: [
         AppStateService,
-        LogIndexFilterService
+        LogIndexFilterService,
+        NotificationService,
+        NotificationsService
       ]
     }));
   });
diff --git 
a/ambari-logsearch-web/src/app/services/login-screen-guard.service.ts 
b/ambari-logsearch-web/src/app/services/login-screen-guard.service.ts
index 8dbe1d7398..99e886ee9b 100644
--- a/ambari-logsearch-web/src/app/services/login-screen-guard.service.ts
+++ b/ambari-logsearch-web/src/app/services/login-screen-guard.service.ts
@@ -22,16 +22,23 @@ import {Observable} from 'rxjs/Observable';
 
 import {AuthService} from '@app/services/auth.service';
 
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
+
 /**
  * The goal of this guard service is to prevent to display the login screen 
when the user is logged in.
  */
 @Injectable()
 export class LoginScreenGuardService implements CanActivate {
 
-  constructor(private authService: AuthService, private router: Router) {}
+  constructor(
+    private router: Router,
+    private store: Store<AppStore>
+  ) {}
 
   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
Observable<boolean> {
-    return this.authService.isAuthorized().map((isAuthorized: boolean) => {
+    return this.store.select(isAuthorizedSelector).map((isAuthorized: boolean) 
=> {
       if (isAuthorized && state.url === '/login') {
         this.router.navigate(['/']);
       }
diff --git 
a/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts 
b/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
index 3e70644f57..ee3f5da611 100644
--- a/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
@@ -45,6 +45,12 @@ import {LogsStateService} from 
'@app/services/storage/logs-state.service';
 import {NotificationService} from 
'@modules/shared/services/notification.service';
 import {NotificationsService} from 
'angular2-notifications/src/notifications.service';
 
+import { AuthService } from '@app/services/auth.service';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
 describe('LogsContainerService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
@@ -63,8 +69,11 @@ describe('LogsContainerService', () => {
           components,
           hosts,
           serviceLogsTruncated,
-          tabs
+          tabs,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
+        EffectsModule.run(NotificationEffects),
         ...TranslationModules
       ],
       providers: [
@@ -89,7 +98,8 @@ describe('LogsContainerService', () => {
         LogsFilteringUtilsService,
         LogsStateService,
         NotificationsService,
-        NotificationService
+        NotificationService,
+        AuthService
       ]
     });
   });
diff --git a/ambari-logsearch-web/src/app/services/logs-container.service.ts 
b/ambari-logsearch-web/src/app/services/logs-container.service.ts
index 9fba9517cc..d550fbb971 100644
--- a/ambari-logsearch-web/src/app/services/logs-container.service.ts
+++ b/ambari-logsearch-web/src/app/services/logs-container.service.ts
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
 
-import {Injectable} from '@angular/core';
-import {FormGroup, FormControl} from '@angular/forms';
-import {Response} from '@angular/http';
-import {Subject} from 'rxjs/Subject';
-import {Observable} from 'rxjs/Observable';
+import { Injectable } from '@angular/core';
+import { FormGroup, FormControl } from '@angular/forms';
+import { Response } from '@angular/http';
+import { Subject } from 'rxjs/Subject';
+import { Observable } from 'rxjs/Observable';
 import 'rxjs/add/observable/timer';
 import 'rxjs/add/observable/combineLatest';
 import 'rxjs/add/operator/distinctUntilChanged';
@@ -28,42 +28,46 @@ import 'rxjs/add/operator/first';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/takeUntil';
 import * as moment from 'moment-timezone';
-import {HttpClientService} from '@app/services/http-client.service';
-import {UtilsService} from '@app/services/utils.service';
-import {AuditLogsService} from '@app/services/storage/audit-logs.service';
-import {AuditLogsFieldsService, ResponseRootProperties} from 
'@app/services/storage/audit-logs-fields.service';
-import {AuditLogsGraphDataService} from 
'@app/services/storage/audit-logs-graph-data.service';
-import {ServiceLogsService} from '@app/services/storage/service-logs.service';
-import {ServiceLogsFieldsService} from 
'@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService} from 
'@app/services/storage/service-logs-histogram-data.service';
-import {ServiceLogsTruncatedService} from 
'@app/services/storage/service-logs-truncated.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-import {TabsService} from '@app/services/storage/tabs.service';
-import {ClustersService} from '@app/services/storage/clusters.service';
-import {ComponentsService} from '@app/services/storage/components.service';
-import {HostsService} from '@app/services/storage/hosts.service';
-import {ActiveServiceLogEntry} from '@app/classes/active-service-log-entry';
+import { HttpClientService } from '@app/services/http-client.service';
+import { UtilsService } from '@app/services/utils.service';
+import { AuditLogsService } from '@app/services/storage/audit-logs.service';
+import { AuditLogsFieldsService, ResponseRootProperties } from 
'@app/services/storage/audit-logs-fields.service';
+import { AuditLogsGraphDataService } from 
'@app/services/storage/audit-logs-graph-data.service';
+import { ServiceLogsService } from 
'@app/services/storage/service-logs.service';
+import { ServiceLogsFieldsService } from 
'@app/services/storage/service-logs-fields.service';
+import { ServiceLogsHistogramDataService } from 
'@app/services/storage/service-logs-histogram-data.service';
+import { ServiceLogsTruncatedService } from 
'@app/services/storage/service-logs-truncated.service';
+import { AppStateService } from '@app/services/storage/app-state.service';
+import { AppSettingsService } from 
'@app/services/storage/app-settings.service';
+import { TabsService } from '@app/services/storage/tabs.service';
+import { ClustersService } from '@app/services/storage/clusters.service';
+import { ComponentsService } from '@app/services/storage/components.service';
+import { HostsService } from '@app/services/storage/hosts.service';
+import { ActiveServiceLogEntry } from '@app/classes/active-service-log-entry';
 import {
   FilterCondition, TimeUnitListItem, SearchBoxParameter, 
SearchBoxParameterTriggered
 } from '@app/classes/filtering';
-import {ListItem} from '@app/classes/list-item';
-import {HomogeneousObject, LogLevelObject} from '@app/classes/object';
-import {DataAvailability, DataAvailabilityValues, LogsType, ScrollType} from 
'@app/classes/string';
-import {LogTypeTab} from '@app/classes/models/log-type-tab';
-import {AuditFieldsDefinitionSet} from '@app/classes/object';
-import {AuditLog} from '@app/classes/models/audit-log';
-import {ServiceLog} from '@app/classes/models/service-log';
-import {BarGraph} from '@app/classes/models/bar-graph';
-import {NodeItem} from '@app/classes/models/node-item';
-import {CommonEntry} from '@app/classes/models/common-entry';
-import {ClusterSelectionService} from 
'@app/services/storage/cluster-selection.service';
-import {ActivatedRoute, Router} from '@angular/router';
-import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.service';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import {LogsStateService} from '@app/services/storage/logs-state.service';
-import {LogLevelComponent} from 
'@app/components/log-level/log-level.component';
-import {NotificationService, NotificationType} from 
'@modules/shared/services/notification.service';
+import { ListItem } from '@app/classes/list-item';
+import { HomogeneousObject, LogLevelObject } from '@app/classes/object';
+import { DataAvailabilityValues, LogsType, ScrollType  } from 
'@app/classes/string';
+import { LogTypeTab } from '@app/classes/models/log-type-tab';
+import { AuditFieldsDefinitionSet } from '@app/classes/object';
+import { AuditLog } from '@app/classes/models/audit-log';
+import { ServiceLog } from '@app/classes/models/service-log';
+import { BarGraph } from '@app/classes/models/bar-graph';
+import { NodeItem } from '@app/classes/models/node-item';
+import { CommonEntry } from '@app/classes/models/common-entry';
+import { ClusterSelectionService } from 
'@app/services/storage/cluster-selection.service';
+import { Router } from '@angular/router';
+import { LogsFilteringUtilsService } from 
'@app/services/logs-filtering-utils.service';
+import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+import { LogsStateService } from '@app/services/storage/logs-state.service';
+import { LogLevelComponent } from 
'@app/components/log-level/log-level.component';
+import { NotificationService, NotificationType } from 
'@modules/shared/services/notification.service';
+
+import { Store } from '@ngrx/store';
+import { AppStore } from '@app/classes/models/store';
+import { isAuthorizedSelector } from '@app/store/selectors/auth.selectors';
 
 @Injectable()
 export class LogsContainerService {
@@ -377,11 +381,11 @@ export class LogsContainerService {
     private serviceLogsTruncatedStorage: ServiceLogsTruncatedService, private 
appSettings: AppSettingsService,
     private clusterSelectionStoreService: ClusterSelectionService,
     private router: Router,
-    private activatedRoute: ActivatedRoute,
     private logsFilteringUtilsService: LogsFilteringUtilsService,
     private logsStateService: LogsStateService,
     private notificationService: NotificationService,
-    private componentsService: ComponentsService
+    private componentsService: ComponentsService,
+    private store: Store<AppStore>
   ) {
     const formItems = Object.keys(this.filters).reduce((currentObject: any, 
key: string): HomogeneousObject<FormControl> => {
       const formControl = new FormControl();
@@ -402,10 +406,18 @@ export class LogsContainerService {
     appState.getParameter('activeLogsType').subscribe((value: LogsType) => {
       if (this.isLogsTypeSupported(value)) {
         this.activeLogsType = value;
-        this.loadLogs(this.activeLogsType);
       }
     });
 
+    Observable.combineLatest(
+      this.store.select(isAuthorizedSelector),
+      this.appState.getParameter('baseDataSetState')
+        .map((dataSetState: DataAvailabilityValues) => dataSetState === 
DataAvailabilityValues.AVAILABLE),
+      appState.getParameter('activeLogsType')
+    ).filter(([isAuthorized, dataAvailable, activeLogsType]) => isAuthorized 
&& dataAvailable)
+      .map(([isAuthorized, dataAvailable, activeLogsType]) => activeLogsType)
+      .subscribe(this.loadLogs);
+
     appSettings.getParameter('timeZone').subscribe((value: string) => 
this.timeZone = value || this.defaultTimeZone);
     tabsStorage.mapCollection((tab: LogTypeTab): LogTypeTab => {
       return Object.assign({}, tab, {
@@ -445,7 +457,7 @@ export class LogsContainerService {
   resetFiltersForms(filters): void {
     this.appState.getParameter('baseDataSetState')
     // do it only when the base data set is available so that the dropdowns 
can set the selections
-      .filter((dataSetState: DataAvailability) => dataSetState === 
DataAvailabilityValues.AVAILABLE)
+      .filter((dataSetState: DataAvailabilityValues) => dataSetState === 
DataAvailabilityValues.AVAILABLE)
       .first()
       .subscribe(() => {
         this.filtersFormSyncInProgress.next(true);
@@ -510,7 +522,7 @@ export class LogsContainerService {
    */
   setActiveTabById(tabId: string): void {
     this.tabsStorage.findInCollection((tab: LogTypeTab) => tab.id === 
tabId).first().subscribe((tab: LogTypeTab | null) => {
-      if (tab) {
+      if (tab && !tab.isActive) {
         this.switchTab(tab);
         this.logsStateService.setParameter('activeTabId', tabId);
       }
diff --git a/ambari-logsearch-web/src/app/services/storage/reducers.service.ts 
b/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
index cd67461553..1d18406131 100644
--- a/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
+++ b/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
@@ -36,6 +36,8 @@ import {clusterSelections} from 
'@app/services/storage/cluster-selection.service
 import {logsState} from '@app/services/storage/logs-state.service';
 import {dataAvailabilityStates} from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import * as auth from '@app/store/reducers/auth.reducers';
+
 export const reducers = {
   appSettings,
   appState,
@@ -54,7 +56,8 @@ export const reducers = {
   tabs,
   clusterSelections,
   logsState,
-  dataAvailabilityStates
+  dataAvailabilityStates,
+  auth: auth.reducer
 };
 
 export function reducer(state: any, action: any) {
diff --git 
a/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts 
b/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts
index 8dce161f3a..953d7fe444 100644
--- a/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts
+++ b/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts
@@ -48,6 +48,11 @@ import {NotificationService} from 
'@modules/shared/services/notification.service
 
 import { dataAvailabilityStates, DataAvailabilityStatesStore } from 
'@app/modules/app-load/stores/data-availability-state.store';
 
+import { AuthService } from '@app/services/auth.service';
+import * as auth from '@app/store/reducers/auth.reducers';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+
 describe('UserSettingsService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
@@ -67,8 +72,10 @@ describe('UserSettingsService', () => {
           hosts,
           serviceLogsTruncated,
           tabs,
-          dataAvailabilityStates
+          dataAvailabilityStates,
+          auth: auth.reducer
         }),
+        EffectsModule.run(AuthEffects),
         ...TranslationModules
       ],
       providers: [
@@ -95,7 +102,8 @@ describe('UserSettingsService', () => {
         LogsStateService,
         NotificationsService,
         NotificationService,
-        DataAvailabilityStatesStore
+        DataAvailabilityStatesStore,
+        AuthService
       ]
     });
   });
diff --git a/ambari-logsearch-web/src/app/store/actions/auth.actions.ts 
b/ambari-logsearch-web/src/app/store/actions/auth.actions.ts
new file mode 100644
index 0000000000..4bfc7ca5d9
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/actions/auth.actions.ts
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { Response } from '@angular/http';
+import { Action } from '@ngrx/store';
+
+
+export enum AuthActionTypes {
+  LOGIN = '[Auth] Login',
+  AUTHORIZED = '[Auth] Authorized',
+  UNAUTHORIZED = '[Auth] Unauthorized',
+  AUTHORIZATION_ERROR = '[Auth] Authorization Error',
+  FORBIDDEN = '[Auth] Forbidden',
+  LOGOUT = '[Auth] Logout',
+  LOGGED_OUT = '[Auth] Logged out',
+  LOGOUT_ERROR = '[Auth] Logout error',
+  CHECK_AUTHORIZATION_STATUS = '[Auth] Check status',
+  AUTHORIZATION_TIMEOUT = '[Auth] Authorization Timeout',
+  HTTP_AUTHORIZATION_ERROR_RESPONSE = '[Auth] HTTP Authorization Error 
Response'
+}
+
+export class LogInAction implements Action {
+  readonly type = AuthActionTypes.LOGIN;
+  constructor(public payload: any) {}
+}
+
+export class LogOutAction implements Action {
+  readonly type = AuthActionTypes.LOGOUT;
+  constructor() {}
+}
+
+export class AuthorizedAction implements Action {
+  readonly type = AuthActionTypes.AUTHORIZED;
+  constructor(public payload: any) {}
+}
+
+export class UnauthorizedAction implements Action {
+  readonly type = AuthActionTypes.UNAUTHORIZED;
+  constructor(public payload: any) {}
+}
+
+export class AuthorizationErrorAction implements Action {
+  readonly type = AuthActionTypes.AUTHORIZATION_ERROR;
+  constructor(public payload: any) {}
+}
+
+export class ForbiddenAction implements Action {
+  readonly type = AuthActionTypes.FORBIDDEN;
+  constructor(public payload: {response?: Response, [key: string]: any}) {}
+}
+
+export class LoggedOutAction implements Action {
+  readonly type = AuthActionTypes.LOGGED_OUT;
+  constructor(public payload?: any) {}
+}
+
+export class LogoutErrorAction implements Action {
+  readonly type = AuthActionTypes.LOGOUT_ERROR;
+  constructor(public payload: any) {}
+}
+
+export class CheckAuthorizationStatusAction implements Action {
+  readonly type = AuthActionTypes.CHECK_AUTHORIZATION_STATUS;
+  constructor() {}
+}
+
+export class AuthorizationTimeoutAction implements Action {
+  readonly type = AuthActionTypes.AUTHORIZATION_TIMEOUT;
+  constructor(public payload: any) {}
+}
+
+export class HttpAuthorizationErrorResponseAction implements Action {
+  readonly type = AuthActionTypes.HTTP_AUTHORIZATION_ERROR_RESPONSE;
+  constructor(public payload: {response: Response}) {}
+}
+
+export type AuthActions =
+  | LogInAction
+  | LogOutAction
+  | AuthorizedAction
+  | UnauthorizedAction
+  | ForbiddenAction
+  | LoggedOutAction
+  | LogoutErrorAction
+  | HttpAuthorizationErrorResponseAction
+  | CheckAuthorizationStatusAction;
diff --git a/ambari-logsearch-web/src/app/store/actions/notification.actions.ts 
b/ambari-logsearch-web/src/app/store/actions/notification.actions.ts
new file mode 100644
index 0000000000..c80734372b
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/actions/notification.actions.ts
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { Action } from '@ngrx/store';
+
+import { NotificationInterface } from 
'@modules/shared/interfaces/notification.interface';
+
+export enum NotificationActionTypes {
+  ADD_NOTIFICATION = '[Notification] Add'
+}
+
+export class AddNotificationAction implements Action {
+  readonly type = NotificationActionTypes.ADD_NOTIFICATION;
+  constructor(public payload: NotificationInterface) {}
+}
+
+export type NotificationActions =
+  | AddNotificationAction;
diff --git a/ambari-logsearch-web/src/app/store/effects/auth.effects.ts 
b/ambari-logsearch-web/src/app/store/effects/auth.effects.ts
new file mode 100644
index 0000000000..99d9bbb7ad
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/effects/auth.effects.ts
@@ -0,0 +1,198 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { Injectable } from '@angular/core';
+import { Response } from '@angular/http';
+import { Actions, Effect } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { Router } from '@angular/router';
+
+import 'rxjs/add/observable/of';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/do';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+import { AuthService } from '@app/services/auth.service';
+import {
+  AuthActionTypes,
+  LogInAction,
+  AuthorizedAction,
+  UnauthorizedAction,
+  AuthorizationErrorAction,
+  AuthorizationTimeoutAction,
+  ForbiddenAction,
+  LoggedOutAction,
+  LogoutErrorAction,
+  HttpAuthorizationErrorResponseAction
+} from '../actions/auth.actions';
+
+import { AddNotificationAction } from 
'@app/store/actions/notification.actions';
+import { NotificationType } from 
'@modules/shared/services/notification.service';
+
+
+@Injectable()
+export class AuthEffects {
+
+  @Effect()
+  CheckAuthorizationStatus: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.CHECK_AUTHORIZATION_STATUS)
+    .switchMap(() => {
+      return this.authService.checkAuthorizationState()
+        .map((response: Response) => {
+          return response.ok ? new AuthorizedAction({response}) : new 
UnauthorizedAction({response});
+        })
+        .catch((error) => {
+          return Observable.of(new UnauthorizedAction({error}));
+        });
+    });
+
+  @Effect()
+  LogIn: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.LOGIN)
+    .map((action: LogInAction) => action.payload)
+    .switchMap(payload => {
+      return this.authService.login(payload.username, payload.password)
+        .map((response: Response) => {
+          let message = '';
+          switch (response.status) {
+            case 401 :
+              message = 'authorization.error.unauthorized';
+            break;
+            case 403 :
+              message = 'authorization.error.forbidden';
+            break;
+            case 419 :
+              message = 'authorization.error.authorizationTimeout';
+            break;
+          }
+          const nextPayload = { message, response, user: {username: 
payload.username} };
+          return response.ok ? new AuthorizedAction(nextPayload) : (
+            response.status === 401 ? new UnauthorizedAction(nextPayload) : (
+            response.status === 403 ? new ForbiddenAction(nextPayload) : new 
AuthorizationErrorAction(nextPayload)
+            )
+          );
+        })
+        .catch((error) => {
+          return Observable.of(new AuthorizationErrorAction({error: error}));
+        });
+    });
+
+  @Effect({ dispatch: false })
+  Authorized: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.AUTHORIZED)
+    .do(() => {
+      if (this.router.url === '/login') {
+        const url = this.authService.redirectUrl || '/';
+        if (typeof url === 'string') {
+          this.router.navigateByUrl(url);
+        } else if (Array.isArray(url)) {
+          this.router.navigate(url);
+        }
+      }
+    });
+
+  @Effect()
+  LogOut: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.LOGOUT)
+    .switchMap(payload => {
+      return this.authService.logout()
+        .map((response: Response) => {
+          return response.ok ? new LoggedOutAction() : new 
LogoutErrorAction({response});
+        })
+        .catch((error) => {
+          return Observable.of(new LogoutErrorAction({error: error}));
+        });
+    });
+
+  @Effect({ dispatch: false })
+  LoggedOut: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.LOGGED_OUT)
+    .do(() => {
+      window.location.reload(true);
+    });
+
+  @Effect()
+  AuthorizationError: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.AUTHORIZATION_ERROR)
+    .map((action: AuthorizationErrorAction) => action.payload)
+    .switchMap((payload) => {
+      const response: Response = payload.response;
+      let message = 'authorization.error.authorizationError';
+      if (response) {
+        const body = response.json();
+        message = body.message || message;
+      }
+      return Observable.of(
+        new AddNotificationAction({
+          type: NotificationType.ERROR,
+          message: message
+        })
+      );
+    });
+
+  @Effect()
+  HttpAuthorizationErrorReponse: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.HTTP_AUTHORIZATION_ERROR_RESPONSE)
+    .map((action: HttpAuthorizationErrorResponseAction) => action.payload)
+    .switchMap(payload => {
+      const response = payload.response;
+      let action;
+      switch (response.status) {
+        case 401 :
+          action = new LoggedOutAction({response});
+        break;
+        case 403 :
+          action = new ForbiddenAction({response});
+        break;
+        case 419 :
+          action = new AuthorizationTimeoutAction({response});
+        break;
+      }
+      return Observable.of(action);
+    });
+
+  @Effect()
+  Forbidden: Observable<any> = this.actions$
+    .ofType(AuthActionTypes.FORBIDDEN)
+    .map((action: ForbiddenAction) => action.payload.response)
+    .switchMap((response: Response) => Observable.of(
+      new AddNotificationAction({
+        type: NotificationType.ERROR,
+        message: 'authorization.error.forbidden'
+      })
+    ));
+
+  @Effect()
+  AuthorizationTimeoutAction: Observable<any> = this.actions$
+  .ofType(AuthActionTypes.AUTHORIZATION_TIMEOUT)
+  .map((action: AuthorizationTimeoutAction) => action.payload.response)
+  .switchMap((response: Response) => Observable.of(
+    new AddNotificationAction({
+      type: NotificationType.ERROR,
+      message: 'authorization.error.authorizationTimeout'
+    })
+  ));
+
+  constructor(
+    private actions$: Actions,
+    private authService: AuthService,
+    private router: Router
+  ) {}
+
+}
diff --git a/ambari-logsearch-web/src/app/store/effects/notification.effects.ts 
b/ambari-logsearch-web/src/app/store/effects/notification.effects.ts
new file mode 100644
index 0000000000..a4bf62e394
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/effects/notification.effects.ts
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { Injectable } from '@angular/core';
+import { Actions, Effect } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+
+import 'rxjs/add/operator/do';
+
+import { NotificationService } from 
'@modules/shared/services/notification.service';
+import {
+  NotificationActionTypes,
+  AddNotificationAction
+} from '../actions/notification.actions';
+
+
+@Injectable()
+export class NotificationEffects {
+
+  @Effect({ dispatch: false })
+  AddNotificationAction: Observable<any> = this.actions$
+    .ofType(NotificationActionTypes.ADD_NOTIFICATION)
+    .do((action: AddNotificationAction) => {
+      this.notificationService.addNotification(action.payload);
+    });
+
+  constructor(
+    private actions$: Actions,
+    private notificationService: NotificationService
+  ) {}
+
+}
diff --git a/ambari-logsearch-web/src/app/store/reducers/auth.reducers.ts 
b/ambari-logsearch-web/src/app/store/reducers/auth.reducers.ts
new file mode 100644
index 0000000000..09ba8d92a5
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/reducers/auth.reducers.ts
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { User } from '../../classes/models/user';
+
+import { AuthActionTypes, AuthActions } from '../actions/auth.actions';
+
+export enum AuthorizationStatuses {
+  UNAUTHORIZED = 'Unauthorized', // no authorization attempt yet
+  NOT_AUTHORIZED = 'Not Authorized', // there were authorization attempt(s) 
but it was unsuccessful
+  CHEKCING_AUTHORIZATION_STATUS = 'Checking Authorization Status', // checking 
if the user already authenticated (eg. refreshed the page)
+  FORBIDDEN = 'Forbidden', // no access to Log Search
+  LOGGING_IN = 'Logging In', // login in progress
+  AUTHORIZED = 'Authorized', // authorized
+  LOGGING_OUT = 'Logging Out', // logout in progress
+  LOGGED_OUT = 'Logged Out', // logged out, the user was authorized before
+  LOGOUT_ERROR = 'Logout Error', // logged out, the user was authorized before
+  AUTHORIZATION_ERROR = 'Authorization Error' // there were some server error 
during the authorization
+};
+
+export interface State {
+  status: AuthorizationStatuses; // the status of the authorization
+  code?: number; // the last status code of the authorization response
+  user?: User | null; // the user model from the app or from the server
+  message?: string | null; // message from the server after the authentication 
attempt
+}
+
+export const initialState: State = {
+  status: null,
+  user: null
+};
+
+export function reducer(state = initialState, action: AuthActions): State {
+switch (action.type) {
+    case AuthActionTypes.LOGIN: {
+      return {
+        ...state,
+        status: AuthorizationStatuses.LOGGING_IN
+      };
+    }
+    case AuthActionTypes.CHECK_AUTHORIZATION_STATUS: {
+      return {
+        ...state,
+        status: AuthorizationStatuses.CHEKCING_AUTHORIZATION_STATUS
+      };
+    }
+    case AuthActionTypes.AUTHORIZED: {
+      const payload = action.payload;
+      return {
+        ...state,
+        status: AuthorizationStatuses.AUTHORIZED,
+        message: payload.message || '',
+        user: payload.user || null
+      };
+    }
+    case AuthActionTypes.UNAUTHORIZED: {
+      const payload = action.payload;
+      return {
+        ...state,
+        message: payload.message || '',
+        status: AuthorizationStatuses.UNAUTHORIZED
+      };
+    }
+    case AuthActionTypes.FORBIDDEN: {
+      const payload = action.payload;
+      return {
+        ...state,
+        status: AuthorizationStatuses.FORBIDDEN,
+        message: payload.message || ''
+      };
+    }
+    case AuthActionTypes.LOGOUT: {
+      return {
+        ...state,
+        status: AuthorizationStatuses.LOGGING_OUT
+      };
+    }
+    case AuthActionTypes.LOGGED_OUT: {
+      return {
+        ...state,
+        status: AuthorizationStatuses.LOGGED_OUT
+      };
+    }
+    case AuthActionTypes.LOGOUT_ERROR: {
+      const payload = action.payload;
+      return {
+        ...state,
+        status: AuthorizationStatuses.LOGOUT_ERROR,
+        message: payload.message || ''
+      };
+    }
+    default: {
+      return state;
+    }
+  }
+};
+
+export const getStatus = (state: State): AuthorizationStatuses => state.status;
+export const getMessage = (state: State): string => (state.message || '');
+export const isAuthorized = (status: AuthorizationStatuses): boolean => 
AuthorizationStatuses.AUTHORIZED === status;
+export const isLoginInProgress = (status: AuthorizationStatuses): boolean => 
AuthorizationStatuses.LOGGING_IN === status;
+export const isLoggedOut = (status: AuthorizationStatuses): boolean => 
AuthorizationStatuses.LOGGED_OUT === status;
+export const isCheckingAuthInProgress = (status: AuthorizationStatuses): 
boolean => (
+  AuthorizationStatuses.CHEKCING_AUTHORIZATION_STATUS === status
+);
diff --git a/ambari-logsearch-web/src/app/store/selectors/auth.selectors.ts 
b/ambari-logsearch-web/src/app/store/selectors/auth.selectors.ts
new file mode 100644
index 0000000000..23decd96a9
--- /dev/null
+++ b/ambari-logsearch-web/src/app/store/selectors/auth.selectors.ts
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import { createSelector } from 'reselect';
+
+import * as fromAuth from '@app/store/reducers/auth.reducers';
+import { AppStore } from '@app/classes/models/store';
+
+export const getAuthState = (state: AppStore): fromAuth.State => state.auth;
+
+export const authStatusSelector = createSelector( getAuthState, 
fromAuth.getStatus );
+export const authMessageSelector = createSelector( getAuthState, 
fromAuth.getMessage );
+
+export const isAuthorizedSelector = createSelector(
+  authStatusSelector,
+  fromAuth.isAuthorized
+);
+
+export const isLoginInProgressSelector = createSelector(
+  authStatusSelector,
+  fromAuth.isLoginInProgress
+);
+
+export const isLoggedOutSelector = createSelector(
+  authStatusSelector,
+  fromAuth.isLoggedOut
+);
+
+export const isCheckingAuthStatusInProgressSelector = createSelector(
+  authStatusSelector,
+  fromAuth.isCheckingAuthInProgress
+);
diff --git a/ambari-logsearch-web/src/app/test-config.spec.ts 
b/ambari-logsearch-web/src/app/test-config.spec.ts
index 9a53a3791c..0bad5f809c 100644
--- a/ambari-logsearch-web/src/app/test-config.spec.ts
+++ b/ambari-logsearch-web/src/app/test-config.spec.ts
@@ -16,20 +16,27 @@
  * limitations under the License.
  */
 
-import {HttpModule, Http, BrowserXhr, XSRFStrategy, ResponseOptions, 
XHRBackend} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {Injector} from '@angular/core';
-import {InMemoryBackendService} from 'angular-in-memory-web-api';
-import {MockApiDataService} from '@app/services/mock-api-data.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {RouterTestingModule} from '@angular/router/testing';
-import {clusters, ClustersService} from 
'@app/services/storage/clusters.service';
-import {StoreModule} from '@ngrx/store';
-import {UtilsService} from '@app/services/utils.service';
-import {ComponentGeneratorService} from 
'@app/services/component-generator.service';
-import {HostsService} from '@app/services/storage/hosts.service';
-import {ComponentsService} from '@app/services/storage/components.service';
+import { HttpModule, Http, BrowserXhr, XSRFStrategy, ResponseOptions, 
XHRBackend } from '@angular/http';
+import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
+import { TranslateHttpLoader } from '@ngx-translate/http-loader';
+import { Injector } from '@angular/core';
+import { InMemoryBackendService } from 'angular-in-memory-web-api';
+import { MockApiDataService } from '@app/services/mock-api-data.service';
+import { HttpClientService } from '@app/services/http-client.service';
+import { RouterTestingModule } from '@angular/router/testing';
+import { clusters, ClustersService } from 
'@app/services/storage/clusters.service';
+import { StoreModule } from '@ngrx/store';
+import { UtilsService } from '@app/services/utils.service';
+import { ComponentGeneratorService } from 
'@app/services/component-generator.service';
+import { HostsService } from '@app/services/storage/hosts.service';
+import { ComponentsService } from '@app/services/storage/components.service';
+
+import { AuthService } from '@app/services/auth.service';
+import { EffectsModule } from '@ngrx/effects';
+import { AuthEffects } from '@app/store/effects/auth.effects';
+import { NotificationEffects } from '@app/store/effects/notification.effects';
+
+import * as auth from '@app/store/reducers/auth.reducers';
 
 function HttpLoaderFactory(http: Http) {
   return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
@@ -62,8 +69,11 @@ export const getCommonTestingBedConfiguration = (
     ...TranslationModules,
     RouterTestingModule,
     StoreModule.provideStore({
-      clusters
+      clusters,
+      auth: auth.reducer
     }),
+    EffectsModule.run(AuthEffects),
+    EffectsModule.run(NotificationEffects),
     ...imports
   ],
   providers: [
@@ -73,6 +83,7 @@ export const getCommonTestingBedConfiguration = (
     HostsService,
     ComponentsService,
     UtilsService,
+    AuthService,
     ...providers
   ],
   declarations: [
diff --git a/ambari-logsearch-web/src/assets/i18n/en.json 
b/ambari-logsearch-web/src/assets/i18n/en.json
index a0796acb6f..d8b38018a6 100644
--- a/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch-web/src/assets/i18n/en.json
@@ -25,7 +25,13 @@
   "authorization.name": "Username",
   "authorization.password": "Password",
   "authorization.signIn": "Sign In",
-  "authorization.error.401": "Unable to sign in. Invalid username/password 
combination.",
+  "authorization.checkingAuthorization": "Checking authorization...",
+  "authorization.authorized": "Successful authorization.",
+  "authorization.loggedOut": "Successfuly logged out.",
+  "authorization.error.authorizationError": "Error during authorization. Maybe 
your session expired.",
+  "authorization.error.unauthorized": "Unable to sign in. Invalid 
username/password combination.",
+  "authorization.error.forbidden": "Access forbidden.",
+  "authorization.error.authorizationTimeout": "Authorization timeout.",
 
   "login.title": "Login",
 
diff --git a/ambari-logsearch-web/yarn.lock b/ambari-logsearch-web/yarn.lock
index ae4bb5a377..32e3a25892 100644
--- a/ambari-logsearch-web/yarn.lock
+++ b/ambari-logsearch-web/yarn.lock
@@ -158,6 +158,10 @@
   version "1.2.0"
   resolved 
"https://registry.yarnpkg.com/@ngrx/core/-/core-1.2.0.tgz#882b46abafa2e0e6d887cb71a1b2c2fa3e6d0dc6";
 
+"@ngrx/effects@2.0.5":
+  version "2.0.5"
+  resolved 
"https://registry.yarnpkg.com/@ngrx/effects/-/effects-2.0.5.tgz#10986923b7193af9b08944e80c5a661ba93a7936";
+
 "@ngrx/store-devtools@3.2.4":
   version "3.2.4"
   resolved 
"https://registry.yarnpkg.com/@ngrx/store-devtools/-/store-devtools-3.2.4.tgz#2ce4d13bf34848a9e51ec87e3b125ed67b51e550";
@@ -2674,6 +2678,12 @@ fresh@0.5.0:
   version "0.5.0"
   resolved 
"https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e";
 
+fs-access@^1.0.0:
+  version "1.0.1"
+  resolved 
"https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a";
+  dependencies:
+    null-check "^1.0.0"
+
 fs-extra@^0.23.1:
   version "0.23.1"
   resolved 
"https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.23.1.tgz#6611dba6adf2ab8dc9c69fab37cddf8818157e3d";
@@ -3667,6 +3677,13 @@ jsprim@^1.2.2:
     json-schema "0.2.3"
     verror "1.3.6"
 
+karma-chrome-launcher@^2.2.0:
+  version "2.2.0"
+  resolved 
"https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf";
+  dependencies:
+    fs-access "^1.0.0"
+    which "^1.2.1"
+
 karma-cli@~1.0.1:
   version "1.0.1"
   resolved 
"https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960";
@@ -4376,6 +4393,10 @@ nth-check@~1.0.1:
   dependencies:
     boolbase "~1.0.0"
 
+null-check@^1.0.0:
+  version "1.0.0"
+  resolved 
"https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd";
+
 num2fraction@^1.2.2:
   version "1.2.2"
   resolved 
"https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
@@ -5391,6 +5412,10 @@ requires-port@1.0.x, requires-port@1.x.x:
   version "1.0.0"
   resolved 
"https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff";
 
+reselect@^3.0.1:
+  version "3.0.1"
+  resolved 
"https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147";
+
 resolve@^1.1.6, resolve@^1.1.7:
   version "1.3.3"
   resolved 
"https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5";
@@ -6601,6 +6626,12 @@ which@1, which@^1.2.9:
   dependencies:
     isexe "^2.0.0"
 
+which@^1.2.1:
+  version "1.3.1"
+  resolved 
"https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a";
+  dependencies:
+    isexe "^2.0.0"
+
 which@^1.2.8, which@~1.2.10:
   version "1.2.14"
   resolved 
"https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5";


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to