Created
April 17, 2021 17:34
-
-
Save markus2610/5ac7bea9f9d503919d778fa60e01e42f to your computer and use it in GitHub Desktop.
Http Intercepter with CryptoJS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http'; | |
import { Observable } from 'rxjs/Observable'; | |
import { map } from 'rxjs/operators'; | |
import * as CryptoJS from 'crypto-js'; | |
export class RequestInterceptor implements HttpInterceptor { | |
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { | |
// Encrypt the body. | |
const updatedReq = req.clone({ | |
body: this.updateBody(req), | |
}); | |
// And then send out the request. | |
return next.handle(updatedReq).pipe(map((event: HttpEvent<any>) => { | |
// If the map event is not HttpResponse, ignore it. | |
if (!(event instanceof HttpResponse)) { | |
return event; | |
} | |
// If Http status code is not 200, ignore it. | |
if (event.status !== 200) { | |
return event; | |
} | |
// Decrypt the body of Http response. | |
return this.updateResponse(event); | |
})); | |
} | |
private updateBody(req: HttpRequest<any>) { | |
const dateTime = new Date(); | |
const time = moment(dateTime).format('YYYY-MM-DD HH:mm:ss.SSS'); | |
const serviceName = req.headers.get('serviceName'); | |
let reqBy = '0.0.0.0'; | |
const encryptedRequestBody = JSON.stringify(CryptoJS.AES.encrypt(request.requestBody, 'abc').toString()) | |
const requestHeader = { | |
'reqId': dateTime.getTime(), | |
'reqChannel': 'WEB', | |
'reqDtm': time, | |
'reqBy': reqBy, | |
'serviceName': serviceName, | |
'instance': '00000' | |
}; | |
return { | |
requestHeader: requestHeader, | |
requestBody: encryptedRequestBody, | |
}; | |
} | |
private updateResponse(res: HttpResponse) { | |
const decryptedResponse = JSON.parse(CryptoJS.AES.decrypt(res.body.dataResp, 'abc').toString()); | |
return new HttpResponse({ | |
body: {..res, dataResp: decryptedResponse}, | |
headers: event.headers, | |
status: event.status, | |
statusText: event.statusText, | |
url: event.url | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment