mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 12:23:35 -05:00
Merge pull request #11770 from overleaf/jpa-flag-403
[web] catch unexpected response status codes from user content domain GitOrigin-RevId: 654141e1be8721f92be271733aca70a7bc672973
This commit is contained in:
parent
577a8a3ee2
commit
ed2b96276d
1 changed files with 29 additions and 2 deletions
|
@ -6,6 +6,24 @@ import { postJSON } from '../../../infrastructure/fetch-json'
|
||||||
let useFallbackDomainUntil = performance.now()
|
let useFallbackDomainUntil = performance.now()
|
||||||
const ONE_HOUR_IN_MS = 1000 * 60 * 60
|
const ONE_HOUR_IN_MS = 1000 * 60 * 60
|
||||||
|
|
||||||
|
class MaybeBlockedByProxyError extends OError {}
|
||||||
|
|
||||||
|
function checkForBlockingByProxy(res: Response) {
|
||||||
|
const statusCode = res.status
|
||||||
|
switch (statusCode) {
|
||||||
|
case 200: // full response
|
||||||
|
case 206: // range response
|
||||||
|
case 404: // file not found
|
||||||
|
case 416: // range not found
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
throw new MaybeBlockedByProxyError('request might be blocked by proxy', {
|
||||||
|
res,
|
||||||
|
statusCode,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function fetchFromCompileDomain(url: string, init: RequestInit) {
|
export async function fetchFromCompileDomain(url: string, init: RequestInit) {
|
||||||
const userContentDomain = getMeta('ol-compilesUserContentDomain')
|
const userContentDomain = getMeta('ol-compilesUserContentDomain')
|
||||||
let isUserContentDomain =
|
let isUserContentDomain =
|
||||||
|
@ -17,9 +35,18 @@ export async function fetchFromCompileDomain(url: string, init: RequestInit) {
|
||||||
url = withFallbackCompileDomain(url)
|
url = withFallbackCompileDomain(url)
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return await fetch(url, init)
|
const res = await fetch(url, init)
|
||||||
|
if (isUserContentDomain) {
|
||||||
|
// Only throw a MaybeBlockedByProxyError when the request will be retried
|
||||||
|
// on the fallback domain below.
|
||||||
|
checkForBlockingByProxy(res)
|
||||||
|
}
|
||||||
|
return res
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (isNetworkError(err) && isUserContentDomain) {
|
if (
|
||||||
|
(isNetworkError(err) || err instanceof MaybeBlockedByProxyError) &&
|
||||||
|
isUserContentDomain
|
||||||
|
) {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(withFallbackCompileDomain(url), init)
|
const res = await fetch(withFallbackCompileDomain(url), init)
|
||||||
// Only switch to the fallback when fetch does not throw there as well.
|
// Only switch to the fallback when fetch does not throw there as well.
|
||||||
|
|
Loading…
Reference in a new issue