From b4078a9a9243bb68f64a27e3e5456563589d1cc7 Mon Sep 17 00:00:00 2001
From: Helmut Hutzler <helmut.hutzler@th-nuernberg.de>
Date: Tue, 29 Nov 2022 15:28:28 +0100
Subject: [PATCH] Fixing generic Error handler with new style for http error
 handling

---
 package.json                                       |  2 +-
 proxy.conf.dev.json                                | 14 ++++++++++++++
 src/app/account-management/account-management.html |  3 ++-
 src/app/account.service.spec.ts                    |  6 +++---
 src/app/account.service.ts                         | 13 ++++++++-----
 src/app/app.component.spec.ts                      |  2 +-
 src/environments/environment.ts                    |  9 +++++----
 7 files changed, 34 insertions(+), 15 deletions(-)
 create mode 100644 proxy.conf.dev.json

diff --git a/package.json b/package.json
index 45db6b2..5c4a694 100644
--- a/package.json
+++ b/package.json
@@ -48,4 +48,4 @@
     "karma-jasmine-html-reporter": "~1.7.0",
     "typescript": "~4.6.4"
   }
-}
\ No newline at end of file
+}
diff --git a/proxy.conf.dev.json b/proxy.conf.dev.json
new file mode 100644
index 0000000..7db5adc
--- /dev/null
+++ b/proxy.conf.dev.json
@@ -0,0 +1,14 @@
+{
+  "/auth/*": {
+    "target": "https://kube-master-h1.informatik.fh-nuernberg.de",
+    "secure": false,
+    "logLevel": "debug",
+    "changeOrigin": true
+  },
+  "/api/*": {
+    "target": "http://localhost:8080",
+    "secure": false,
+    "logLevel": "debug",
+    "changeOrigin": true
+  }
+}
diff --git a/src/app/account-management/account-management.html b/src/app/account-management/account-management.html
index 6f66a2b..dd307cd 100644
--- a/src/app/account-management/account-management.html
+++ b/src/app/account-management/account-management.html
@@ -114,7 +114,8 @@
 <hr>
   <h4>Keycloak Server Status</h4>
   <pre>
-      Quarkus  Http Code      : {{quarkusCode}}      Quarkus HTTP Message   : {{quarkusMessage}}
+      Quarkus  Http Code      : {{quarkusCode}}
+      Quarkus HTTP Message    : {{quarkusMessage}}
       Keycloak Http Code      : {{keycloakCode}}      Keycloak HTTP Message  : {{keycloakStatus}}
       Keycloak Http Method    : {{keycloakMethod}}      Keycloak User          : {{keycloakUser}}
       Keycloak Url            : {{keycloakUrl}}
diff --git a/src/app/account.service.spec.ts b/src/app/account.service.spec.ts
index 998ead9..c4ee6f5 100644
--- a/src/app/account.service.spec.ts
+++ b/src/app/account.service.spec.ts
@@ -1,13 +1,13 @@
 import { TestBed } from '@angular/core/testing';
 
-import { AccountSvcService } from './account.service';
+import { AccountService } from './account.service';
 
 describe('AccountSvcService', () => {
-  let service: AccountSvcService;
+  let service: AccountService;
 
   beforeEach(() => {
     TestBed.configureTestingModule({});
-    service = TestBed.inject(AccountSvcService);
+    service = TestBed.inject(AccountService);
   });
 
   it('should be created', () => {
diff --git a/src/app/account.service.ts b/src/app/account.service.ts
index 4ff7b03..f0a1135 100644
--- a/src/app/account.service.ts
+++ b/src/app/account.service.ts
@@ -168,23 +168,26 @@ export class AccountService implements  OnInit {
   /*
     *
     * Handle Http operation that failed and log some data
-    * Stop processing by rethrowing the original error
+    * Stop processing by rethrowing a  error object
   *
   * @param operation - name of the operation that failed
   */
   handleError(operation = 'operation' ) {
+    let myError = new Error();
     return (error: any ) => {
       let errorMessage = 'Unknown error!';
       if (error.error instanceof ErrorEvent) {
         // Client-side errors
-        errorMessage = `Error: ${error.error.message}`;
+        errorMessage = `Client-side Error: ${error.error.message}`;
+        Object.assign(myError, { status: -2, message: errorMessage});
       } else {
         // Server-side errors
-        errorMessage = `Error Code: ${error.status} --- Message: ${error.message}`;
+        errorMessage = `Server-side Error: ${error.status} --- Message: ${error.message}`;
+        Object.assign(myError, { status: error.status, message: error.message});
       }
       this.messageService.add(`ERROR: ${operation} failed: ${errorMessage}`);
-      //  rethrow the error caught by catchError - need to return an observable
-      return throwError(() => error);
+
+      throw myError;
     }
   }
 }
diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts
index a22e5f4..6203051 100644
--- a/src/app/app.component.spec.ts
+++ b/src/app/app.component.spec.ts
@@ -16,7 +16,7 @@ describe('AppComponent', () => {
     expect(app).toBeTruthy();
   });
 
-  it(`should have as title 'sample-code-flow-auto-login-all-routes'`, () => {
+  it(`should have as title 'angular-oidc.authorization.sample'`, () => {
     const fixture = TestBed.createComponent(AppComponent);
     const app = fixture.componentInstance;
     expect(app.title).toEqual('sample-code-flow-auto-login-all-routes');
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index b55b37b..d251bc7 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -6,10 +6,11 @@ declare const require: any;
 
 export const environment = {
   production: false,
-   //  keycloakURL: 'http://localhost:8280/auth/',
-  //   keycloakURL: '/auth/',
-     keycloakURL: 'https://kube-master-h1.informatik.fh-nuernberg.de/auth/',
-     apiURL: 'http://localhost:8080/api',
+   //  keycloakURL: 'http://localhost:8280/auth/'
+    keycloakURL: '/auth/',
+    // keycloakURL: 'https://kube-master-h1.informatik.fh-nuernberg.de/auth/',
+    //  apiURL: 'http://localhost:8080/api',
+    apiURL: '/api',
      appVersion: require('../../package.json').version
 
 };
-- 
GitLab