From 39dc1460e915d4009fb32237b9287e83d9d94a9b Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 1 Apr 2020 02:02:10 +0200 Subject: [PATCH] Adding auth pipe for images but not using it --- src/app/app.module.ts | 4 +++- src/app/misc/auth.pipe.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/app/misc/auth.pipe.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 79e81b36..e7e88f55 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -45,6 +45,7 @@ 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"; +import { AuthPipe } from './misc/auth.pipe'; export function loadConfig(oidcConfigService: OidcConfigService) { @@ -69,7 +70,8 @@ export function loadConfig(oidcConfigService: OidcConfigService) UnauthorizedComponent, LogoutComponent, FallbackDirective, - AutologinComponent + AutologinComponent, + AuthPipe ], imports: [ BrowserModule, diff --git a/src/app/misc/auth.pipe.ts b/src/app/misc/auth.pipe.ts new file mode 100644 index 00000000..46584cd1 --- /dev/null +++ b/src/app/misc/auth.pipe.ts @@ -0,0 +1,30 @@ +import {Injector, Pipe, PipeTransform} from '@angular/core'; +import {AuthService} from "../services/auth.service"; +import {HttpClient, HttpHeaders} from "@angular/common/http"; +import {OidcSecurityService} from "angular-auth-oidc-client"; + +@Pipe({ + name: 'auth' +}) +export class AuthPipe implements PipeTransform +{ + private oidcSecurity: OidcSecurityService + + constructor(private injector: Injector, private http: HttpClient) {} + + async transform(uri: string): Promise + { + if (this.oidcSecurity === undefined) + this.oidcSecurity = this.injector.get(OidcSecurityService); + let token = this.oidcSecurity.getToken(); + if (!token) + return uri; + const headers = new HttpHeaders({"Authorization": "Bearer " + token}); + const img = await this.http.get(uri, {headers, responseType: 'blob'}).toPromise(); + const reader = new FileReader(); + return new Promise((resolve, reject) => { + reader.onloadend = () => resolve(reader.result as string); + reader.readAsDataURL(img); + }); + } +}