diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 0dd80f74..8a44d1ba 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,4 @@ -import { HttpClientModule } from '@angular/common/http'; +import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http'; import {APP_INITIALIZER, ChangeDetectorRef, NgModule} from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; @@ -44,6 +44,7 @@ import {MatDialogModule} from '@angular/material/dialog'; import {FallbackDirective} from "./misc/fallback.directive"; import {AuthGuard} from "./misc/guards/authenticated-guard.service"; import { AutologinComponent } from './autologin/autologin.component'; +import {AuthorizerInterceptor} from "./misc/authorizer-interceptor.service"; export function loadConfig(oidcConfigService: OidcConfigService) { @@ -105,7 +106,12 @@ export function loadConfig(oidcConfigService: OidcConfigService) deps: [OidcConfigService], multi: true }, - AuthGuard + AuthGuard, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthorizerInterceptor, + multi: true + } ], bootstrap: [AppComponent] }) diff --git a/src/app/misc/authorizer-interceptor.service.ts b/src/app/misc/authorizer-interceptor.service.ts new file mode 100644 index 00000000..c3002e55 --- /dev/null +++ b/src/app/misc/authorizer-interceptor.service.ts @@ -0,0 +1,28 @@ +import {Injectable, Injector} from '@angular/core'; +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor +} from '@angular/common/http'; +import { Observable } from 'rxjs'; +import {OidcSecurityService} from "angular-auth-oidc-client"; + +@Injectable() +export class AuthorizerInterceptor implements HttpInterceptor +{ + private oidcSecurity: OidcSecurityService; + + + constructor(private injector: Injector) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> + { + if (this.oidcSecurity === undefined) + this.oidcSecurity = this.injector.get(OidcSecurityService); + let token = this.oidcSecurity.getToken(); + if (token) + request = request.clone({setHeaders: {Authorization: "Bearer " + token}}); + return next.handle(request); + } +}