From 1bc52a26b738d08bba08c2b1c17946258f1e9b8b Mon Sep 17 00:00:00 2001 From: "fabio.formosa" Date: Thu, 7 May 2020 23:34:21 +0200 Subject: [PATCH 1/2] minor commit --- .../src/app/services/api.service.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/quartz-manager-frontend/src/app/services/api.service.ts b/quartz-manager-frontend/src/app/services/api.service.ts index 6760f30..bf84c6f 100644 --- a/quartz-manager-frontend/src/app/services/api.service.ts +++ b/quartz-manager-frontend/src/app/services/api.service.ts @@ -41,6 +41,8 @@ export class ApiService { this.jwtToken = token; } + getToken = () => this.jwtToken; + get(path: string, args?: any): Observable { const options = { headers: this.headers, @@ -50,8 +52,8 @@ export class ApiService { if (args) options['params'] = serialize(args); - if(this.jwtToken) - options.headers = options.headers.set('Authorization', `Bearer ${this.jwtToken}`); + // if(this.jwtToken) + // options.headers = options.headers.set('Authorization', `Bearer ${this.jwtToken}`); return this.http.get(path, options) .pipe(catchError(this.checkError.bind(this))); @@ -75,8 +77,8 @@ export class ApiService { withCredentials: true } - if(this.jwtToken) - options.headers = options.headers.append('Authorization', `Bearer ${this.jwtToken}`); + // if(this.jwtToken) + // options.headers = options.headers.append('Authorization', `Bearer ${this.jwtToken}`); const req = new HttpRequest(method, path, body, options); From 25028774d7526e0486c1ea8e22d43251a42d503f Mon Sep 17 00:00:00 2001 From: "fabio.formosa" Date: Fri, 8 May 2020 01:10:10 +0200 Subject: [PATCH 2/2] #6 fixed websocke with jwt token header --- .../security/helpers/impl/JwtTokenHelper.java | 3 +++ .../src/app/model/SocketOption.model.ts | 5 ++++- .../src/app/services/logs.websocket.service.ts | 6 +++--- .../src/app/services/progress.websocket.service.ts | 6 +++--- .../src/app/services/websocket.service.ts | 7 ++++++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java index cc51e3d..b7f24d7 100644 --- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java +++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java @@ -150,6 +150,9 @@ public class JwtTokenHelper { return authHeader.substring(7); } + if(request.getParameter("access_token") != null) + return request.getParameter("access_token"); + return null; } diff --git a/quartz-manager-frontend/src/app/model/SocketOption.model.ts b/quartz-manager-frontend/src/app/model/SocketOption.model.ts index 20d8fe3..529da9d 100644 --- a/quartz-manager-frontend/src/app/model/SocketOption.model.ts +++ b/quartz-manager-frontend/src/app/model/SocketOption.model.ts @@ -4,11 +4,14 @@ export class SocketOption{ brokerName : string; reconnectionTimeout : number = 30000 - constructor(socketUrl : string, topicName : string, brokerName : string = null, reconnectionTimeout : number = 30000){ + getAccessToken: Function = () => null; + + constructor(socketUrl : string, topicName : string, getAccessToken?: Function, brokerName : string = null, reconnectionTimeout : number = 30000){ this.socketUrl = socketUrl; this.topicName = topicName; this.brokerName = brokerName; this.reconnectionTimeout = reconnectionTimeout; + this.getAccessToken = getAccessToken || (() => null); } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts index ce58bfe..fe2cd06 100644 --- a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts @@ -1,12 +1,12 @@ import { Injectable, OnInit } from '@angular/core'; -import { WebsocketService } from '.'; +import { WebsocketService, ApiService } from '.'; import { SocketOption } from '../model/SocketOption.model'; @Injectable() export class LogsWebsocketService extends WebsocketService { - constructor(){ - super(new SocketOption('/quartz-manager/logs', '/topic/logs')) + constructor(private apiService: ApiService){ + super(new SocketOption('/quartz-manager/logs', '/topic/logs', apiService.getToken)) } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts index abe41fe..173428b 100644 --- a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts @@ -1,12 +1,12 @@ import { Injectable, OnInit } from '@angular/core'; -import { WebsocketService } from '.'; +import { WebsocketService, ApiService } from '.'; import { SocketOption } from '../model/SocketOption.model'; @Injectable() export class ProgressWebsocketService extends WebsocketService { - constructor(){ - super(new SocketOption('/quartz-manager/progress', '/topic/progress')) + constructor(private apiService: ApiService){ + super(new SocketOption('/quartz-manager/progress', '/topic/progress', apiService.getToken)) } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/websocket.service.ts b/quartz-manager-frontend/src/app/services/websocket.service.ts index f4a213b..e1eda64 100644 --- a/quartz-manager-frontend/src/app/services/websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/websocket.service.ts @@ -109,7 +109,12 @@ export class WebsocketService { connect = () => { const headers = {}; - this._socket.client = new SockJS(this._options.socketUrl); + + let socketUrl = this._options.socketUrl; + if(this._options.getAccessToken()) + socketUrl += `?access_token=${this._options.getAccessToken()}` + + this._socket.client = new SockJS(socketUrl); this._socket.stomp = Stomp.over(this._socket.client); this._socket.stomp.connect(headers, this._socketListener, this._onSocketError); this._socket.stomp.onclose = this.scheduleReconnection;