Skip to content

Instantly share code, notes, and snippets.

@markus2610
Created April 17, 2021 17:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markus2610/5ac7bea9f9d503919d778fa60e01e42f to your computer and use it in GitHub Desktop.
Save markus2610/5ac7bea9f9d503919d778fa60e01e42f to your computer and use it in GitHub Desktop.
Http Intercepter with CryptoJS
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