KON-703 Keine Authentifizierung - Logout/Portal Page
diff --git a/.gitignore b/.gitignore
index 4f5768b..eb42148 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@
 /node_modules
 
 # IDEs and editors
-/.idea
+.idea
 /.vscode
 .project
 .classpath
diff --git a/config/development.json b/config/development.json
index 0c961ef..0fa0435 100644
--- a/config/development.json
+++ b/config/development.json
@@ -5,7 +5,8 @@
 
   "paths": {
     "imagesRoot": "/assets/images/",
-    "userImageFolder": "/assets/images/users/"
+    "userImageFolder": "/assets/images/users/",
+    "portalLoginUrl": "http://entopkon:8880/portalFE/#/login"
   },
 
   "localization": {
diff --git a/config/local.json b/config/local.json
new file mode 100644
index 0000000..fe125bb
--- /dev/null
+++ b/config/local.json
@@ -0,0 +1,33 @@
+{
+  "api": {
+    "baseUrl": "/api"
+  },
+
+  "paths": {
+    "imagesRoot": "/assets/images/",
+    "userImageFolder": "/assets/images/users/",
+    "portalLoginUrl": "http://localhost:8080/portalFE/#/login"
+  },
+
+  "localization": {
+    "languages": [
+      {"code": "de", "name": "DE", "culture": "de-DE"},
+      {"code": "en", "name": "EN", "culture": "en-EN"}
+    ],
+    "defaultLanguage": "de"
+  },
+
+  "notifications": {
+    "options": {
+      "timeOut": 5000,
+      "showProgressBar": true,
+      "pauseOnHover": true,
+      "position": ["top", "right"],
+      "theClass": "sy-notification"
+    },
+    "unauthorizedEndpoints": [],
+    "notFoundEndpoints": []
+  },
+
+  "debugging": true
+}
diff --git a/config/production.json b/config/production.json
index 0ef2a1f..fa74315 100644
--- a/config/production.json
+++ b/config/production.json
@@ -5,7 +5,8 @@
 
   "paths": {
     "imagesRoot": "/assets/images/",
-    "userImageFolder": "/assets/images/users/"
+    "userImageFolder": "/assets/images/users/",
+    "portalLoginUrl": "http://169.50.13.154/portalFE/#/login"
   },
 
   "localization": {
diff --git a/hooks/pre-local.js b/hooks/pre-local.js
new file mode 100644
index 0000000..4ffb72d
--- /dev/null
+++ b/hooks/pre-local.js
@@ -0,0 +1,46 @@
+/********************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+var fs = require('fs-extra');
+var jsonConcat = require('json-concat');
+
+var localizationSourceFilesDE = [
+  "./i18n/general.de.json",
+  "./i18n/components.de.json",
+  "./i18n/contacts.de.json",
+  "./i18n/persons.de.json",
+  "./i18n/salutations.de.json",
+  "./i18n/company.de.json",
+  "./i18n/admin.de.json",
+  "./i18n/addresses.de.json",
+  "./i18n/communications-data.de.json",
+  "./i18n/user-module-assignment.de.json",
+  "./i18n/logout.de.json",
+];
+
+function mergeAndSaveJsonFiles(src, dest) {
+  jsonConcat({ src: src, dest: dest }, function(res) {
+    console.log('Localization files successfully merged!');
+  });
+}
+
+function setEnvironment(configPath, environment) {
+  fs.writeJson(configPath, { env: environment }, function(res) {
+    console.log('Environment variable set to ' + environment);
+  });
+}
+
+// Set environment variable to "local env"
+setEnvironment('./config/env.json', 'local');
+
+// Merge all localization files into one
+mergeAndSaveJsonFiles(localizationSourceFilesDE, './i18n/de.json');
diff --git a/package.json b/package.json
index 82c914b..654d20b 100644
--- a/package.json
+++ b/package.json
@@ -8,13 +8,14 @@
   "scripts": {
     "start": "npm run sy-pre-start && ng serve --proxy-config proxy.conf.json",
     "start-integration": "npm run sy-pre-start && ng serve --proxy-config proxy.conf-integration.json",
-    "start-local": "npm run sy-pre-start && ng serve --proxy-config proxy.conf-local.json",
+    "start-local": "npm run sy-pre-local && ng serve --proxy-config proxy.conf-local.json",
     "test": "npm run sy-pre-test && ng test",
     "pree2e": "webdriver-manager update --standalone false --gecko false",
     "e2e": "ng e2e",
     "build": "npm run sy-pre-build && ng build --base-href /contactdatabase/ && npm run sy-post-build",
     "sy-pre-test": "node hooks/pre-test.js",
     "sy-pre-start": "node hooks/pre-start.js",
+    "sy-pre-local": "node hooks/pre-local.js",
     "sy-pre-build": "node hooks/pre-build.js",
     "sy-post-build": "node hooks/post-build.js",
     "sy-build": "npm run sy-pre-build && ng build --base-href /contactdatabase/ --prod --aot && npm run sy-post-build",
diff --git a/src/app/shared/asyncServices/http/httpResponseHandler.service.ts b/src/app/shared/asyncServices/http/httpResponseHandler.service.ts
index de77226..4a3e527 100644
--- a/src/app/shared/asyncServices/http/httpResponseHandler.service.ts
+++ b/src/app/shared/asyncServices/http/httpResponseHandler.service.ts
@@ -16,6 +16,9 @@
 import { Router } from '@angular/router';
 import { Observable } from 'rxjs';
 import { ConfigService } from 'app/app-config.service';
+import { Store } from '@ngrx/store';
+import * as store from '@shared/store';
+import * as settingsActions from '@shared/store/actions/settings.action';
 
 @Injectable()
 export class HttpResponseHandler {
@@ -23,7 +26,8 @@
     private router: Router,
     private translateService: TranslateService,
     private notificationsService: NotificationsService,
-    private configService: ConfigService
+    private configService: ConfigService,
+    protected appState$: Store<store.State>
   ) {}
 
   /**
@@ -95,9 +99,17 @@
   private handleUnauthorized(responseBody: any): void {
     // Read configuration in order to see if we need to display 401 notification message
     let unauthorizedEndpoints: Array<string> = this.configService.get('notifications').unauthorizedEndpoints;
+    let portalLoginUrl: string = this.configService.get('paths').portalLoginUrl;
 
     unauthorizedEndpoints = unauthorizedEndpoints.filter(endpoint => this.getRelativeUrl(responseBody.url) === endpoint);
-    this.router.navigate(['/loggedout']);
+    localStorage.clear();
+    if (portalLoginUrl) {
+      this.appState$.dispatch(settingsActions.setUser(null));
+      window.location.href= portalLoginUrl;
+    } else {
+      this.appState$.dispatch(settingsActions.setUser(null));
+      this.router.navigate(['/loggedout']);
+    }
 
     if (unauthorizedEndpoints.length) {
       this.notificationsService.info('Info', this.translateService.instant('ServerError401'), this.configService.get('notifications').options);
diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html
index d590b12..7bbba7e 100644
--- a/src/app/shared/components/header/header.component.html
+++ b/src/app/shared/components/header/header.component.html
@@ -10,7 +10,7 @@
 *
 * SPDX-License-Identifier: EPL-2.0
 ********************************************************************************/ -->
-<nav class="navbar navbar-default navbar-fixed-top masthead overview-navbar" role="banner">
+<nav *ngIf="userName" class="navbar navbar-default navbar-fixed-top masthead overview-navbar" role="banner">
   <div class="container-fluid">
     <div class="navbar-header" (click)="navigateToOverview()">
       <a class="navbar-brand">