intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authenticatedHttpCall = request.headers.get('No-Auth') !== 'True';
// Se a chamada necessita de autenticação, os headers do gateway são adicionados
if (authenticatedHttpCall) {
const defaultHeaders = {
'Accept': '*/*'
};
return this.asgardeoAuthService.getAccessToken().pipe(
switchMap(accessToken => {
if (accessToken) {
defaultHeaders['Authorization'] = 'Bearer ' + accessToken;
}
if (localStorage.idEmpresaLogada !== null && localStorage.idEmpresaLogada !== undefined) {
defaultHeaders['api-company-id'] = localStorage.idEmpresaLogada;
}
if (request.headers.get('Content-Type') !== 'application/json') {
if (request.body?.constructor?.name !== 'FormData') {
defaultHeaders['Content-type'] = 'application/x-www-form-urlencoded, multipart/form-data';
}
}
const headers = Object.entries(defaultHeaders)
.reduce((headers, [key, value]) => {
if (headers.has(key)) {
return headers.append(key, value);
}
return headers.set(key, value);
}, request.headers);
request = request.clone({
setHeaders: headers.keys().reduce((acc, key) => {
acc[key] = headers.getAll(key);
return acc;
}, {})
});
return next.handle(request).pipe(
map((response: HttpResponse<any>) => {
// Qualquer requisição via API que é chamada vai passar por essa Arrow function (resposta da API)
if (response.headers?.get('www-authenticate')) {
response.headers.delete('www-authenticate');
}
if (response.status > 399) {
throw response;
}
// Para interceptar qualquer API basta criar uma lógica dentro desta camada, e caso seja necessário utilizar o RESPONSE
return response;
}),
catchError(error => {
CustomErrorHandler.handleError(error);
return this.showError(error);
})
);
})
);
}
return next.handle(request);
}