overleaf/services/web/frontend/js/modules/errorCatcher.js
Jakob Ackermann e959529828 Merge pull request #15129 from overleaf/mj-jpa-angular-parameters
[web] Explicitly name angular parameters

GitOrigin-RevId: 91beae68989d6c8122132b531a4338b116d87424
2023-10-16 08:04:25 +00:00

84 lines
2.4 KiB
JavaScript

/* eslint-disable
max-len,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
import { captureException } from '../infrastructure/error-reporter'
const app = angular.module('ErrorCatcher', [])
const UNHANDLED_REJECTION_ERR_MSG = 'Possibly unhandled rejection: canceled'
app.config([
'$provide',
function ($provide) {
return $provide.decorator('$exceptionHandler', [
'$log',
'$delegate',
($log, $delegate) =>
function (exception, cause) {
if (
exception === UNHANDLED_REJECTION_ERR_MSG &&
cause === undefined
) {
return
}
captureException(exception, {
tags: {
handler: 'angular-exception-handler',
},
})
return $delegate(exception, cause)
},
])
},
])
// Interceptor to check auth failures in all $http requests
// http://bahmutov.calepin.co/catch-all-errors-in-angular-app.html
app.factory('unAuthHttpResponseInterceptor', [
'$q',
function ($q) {
return {
responseError(response) {
// redirect any unauthorised or forbidden responses back to /login
//
// set disableAutoLoginRedirect:true in the http request config
// to disable this behaviour
if (
[401, 403].includes(response.status) &&
!(response.config != null
? response.config.disableAutoLoginRedirect
: undefined)
) {
// for /project urls set the ?redir parameter to come back here
// otherwise just go to the login page
if (window.location.pathname.match(/^\/project/)) {
window.location = `/login?redir=${encodeURI(
window.location.pathname
)}`
} else {
window.location = '/login'
}
}
// pass the response back to the original requester
return $q.reject(response)
},
}
},
])
app.config([
'$httpProvider',
function ($httpProvider) {
return $httpProvider.interceptors.push('unAuthHttpResponseInterceptor')
},
])