mirror of
https://git.sr.ht/~cadence/bibliogram
synced 2024-11-22 16:17:29 +00:00
Blocked by Instagram.
This commit is contained in:
parent
a5ab771969
commit
e2fba3bbd0
@ -55,7 +55,7 @@ class TtlCache {
|
|||||||
*/
|
*/
|
||||||
getTtl(key, factor = 1) {
|
getTtl(key, factor = 1) {
|
||||||
if (this.has(key)) {
|
if (this.has(key)) {
|
||||||
return Math.max((Math.floor(Date.now() - this.cache.get(key).time) / factor), 0)
|
return Math.max(Math.ceil((this.cache.get(key).time + this.ttl - Date.now()) / factor), 0)
|
||||||
} else {
|
} else {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,8 @@ const timelineEntryCache = new TtlCache(constants.caching.resource_cache_time)
|
|||||||
function fetchUser(username) {
|
function fetchUser(username) {
|
||||||
return requestCache.getOrFetch("user/"+username, () => {
|
return requestCache.getOrFetch("user/"+username, () => {
|
||||||
return request(`https://www.instagram.com/${username}/`).then(res => {
|
return request(`https://www.instagram.com/${username}/`).then(res => {
|
||||||
if (res.status === 404) throw constants.symbols.NOT_FOUND
|
if (res.status === 302) throw constants.symbols.INSTAGRAM_DEMANDS_LOGIN
|
||||||
|
else if (res.status === 404) throw constants.symbols.NOT_FOUND
|
||||||
else return res.text().then(text => {
|
else return res.text().then(text => {
|
||||||
// require down here or have to deal with require loop. require cache will take care of it anyway.
|
// require down here or have to deal with require loop. require cache will take care of it anyway.
|
||||||
// User -> Timeline -> TimelineImage -> collectors -/> User
|
// User -> Timeline -> TimelineImage -> collectors -/> User
|
||||||
|
@ -37,7 +37,8 @@ let constants = {
|
|||||||
TYPE_GALLERY_IMAGE: Symbol("TYPE_GALLERY_IMAGE"),
|
TYPE_GALLERY_IMAGE: Symbol("TYPE_GALLERY_IMAGE"),
|
||||||
TYPE_GALLERY_VIDEO: Symbol("TYPE_GALLERY_VIDEO"),
|
TYPE_GALLERY_VIDEO: Symbol("TYPE_GALLERY_VIDEO"),
|
||||||
NOT_FOUND: Symbol("NOT_FOUND"),
|
NOT_FOUND: Symbol("NOT_FOUND"),
|
||||||
NO_SHARED_DATA: Symbol("NO_SHARED_DATA")
|
NO_SHARED_DATA: Symbol("NO_SHARED_DATA"),
|
||||||
|
INSTAGRAM_DEMANDS_LOGIN: Symbol("INSTAGRAM_DEMANDS_LOGIN")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,8 @@ function request(url) {
|
|||||||
return fetch(url, {
|
return fetch(url, {
|
||||||
headers: {
|
headers: {
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
||||||
}
|
},
|
||||||
|
redirect: "manual"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const constants = require("../../lib/constants")
|
const constants = require("../../lib/constants")
|
||||||
const {fetchUser, getOrFetchShortcode} = require("../../lib/collectors")
|
const {fetchUser, getOrFetchShortcode, requestCache} = require("../../lib/collectors")
|
||||||
const {render, redirect} = require("pinski/plugins")
|
const {render, redirect} = require("pinski/plugins")
|
||||||
|
const {pugCache} = require("../passthrough")
|
||||||
|
|
||||||
module.exports = [
|
module.exports = [
|
||||||
{
|
{
|
||||||
@ -37,6 +38,17 @@ module.exports = [
|
|||||||
title: "Not found",
|
title: "Not found",
|
||||||
message: "This user doesn't exist."
|
message: "This user doesn't exist."
|
||||||
})
|
})
|
||||||
|
} else if (error === constants.symbols.INSTAGRAM_DEMANDS_LOGIN) {
|
||||||
|
return {
|
||||||
|
statusCode: 503,
|
||||||
|
contentType: "text/html",
|
||||||
|
headers: {
|
||||||
|
"Retry-After": requestCache.getTtl("user/"+fill[0], 1000)
|
||||||
|
},
|
||||||
|
content: pugCache.get("pug/blocked.pug").web({
|
||||||
|
expiresMinutes: requestCache.getTtl("user/"+fill[0], 1000*60)
|
||||||
|
})
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
|
19
src/site/pug/blocked.pug
Normal file
19
src/site/pug/blocked.pug
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//- Needs expiresMinutes, instancesURL
|
||||||
|
|
||||||
|
include includes/error.pug
|
||||||
|
|
||||||
|
- const numberFormat = new Intl.NumberFormat().format
|
||||||
|
|
||||||
|
doctype html
|
||||||
|
html
|
||||||
|
head
|
||||||
|
meta(charset="utf-8")
|
||||||
|
meta(name="viewport" content="width=device-width, initial-scale=1")
|
||||||
|
title= `Blocked | Bibliogram`
|
||||||
|
link(rel="stylesheet" type="text/css" href="/static/css/main.css")
|
||||||
|
body.error-page
|
||||||
|
+error(503, "Blocked by Instagram")
|
||||||
|
| Instagram is refusing to provide data to this server. Try again later to see if the block has been lifted.
|
||||||
|
| This error has been cached. The internal cache will expire in #{expiresMinutes} minutes.
|
||||||
|
|
|
||||||
|
a(href="https://github.com/cloudrac3r/bibliogram/wiki/Instances") You could try browsing Bibliogram on another instance.
|
@ -1,7 +1,6 @@
|
|||||||
//- Needs title, message, statusCode
|
//- Needs title, message, statusCode ?explanation
|
||||||
|
|
||||||
include includes/timeline_page.pug
|
include includes/error.pug
|
||||||
include includes/next_page_button.pug
|
|
||||||
|
|
||||||
- const numberFormat = new Intl.NumberFormat().format
|
- const numberFormat = new Intl.NumberFormat().format
|
||||||
|
|
||||||
@ -13,8 +12,6 @@ html
|
|||||||
title= `${title} | Bibliogram`
|
title= `${title} | Bibliogram`
|
||||||
link(rel="stylesheet" type="text/css" href="/static/css/main.css")
|
link(rel="stylesheet" type="text/css" href="/static/css/main.css")
|
||||||
body.error-page
|
body.error-page
|
||||||
h1.code= statusCode
|
+error(statusCode, message)
|
||||||
p.message= message
|
if explanation
|
||||||
if explanation
|
=explanation
|
||||||
p.explanation= explanation
|
|
||||||
a(href="javascript:history.back()").back ← Go back?
|
|
||||||
|
7
src/site/pug/includes/error.pug
Normal file
7
src/site/pug/includes/error.pug
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
mixin error(statusCode, message)
|
||||||
|
h1.code= statusCode
|
||||||
|
p.message= message
|
||||||
|
if block
|
||||||
|
p.explanation
|
||||||
|
block
|
||||||
|
a(href="javascript:history.back()").back ← Go back?
|
@ -295,6 +295,9 @@ body
|
|||||||
justify-content: center
|
justify-content: center
|
||||||
align-items: center
|
align-items: center
|
||||||
|
|
||||||
|
a, a:visited
|
||||||
|
color: #4a93d2
|
||||||
|
|
||||||
.code, .message, .explanation, .back-link
|
.code, .message, .explanation, .back-link
|
||||||
line-height: 1.2
|
line-height: 1.2
|
||||||
margin: 0px
|
margin: 0px
|
||||||
@ -309,13 +312,14 @@ body
|
|||||||
color: #ccc
|
color: #ccc
|
||||||
|
|
||||||
.explanation
|
.explanation
|
||||||
|
line-height: 1.3
|
||||||
margin-top: 10px
|
margin-top: 10px
|
||||||
font-size: 20px
|
font-size: 20px
|
||||||
color: #bbb
|
color: #bbb
|
||||||
|
white-space: pre-line
|
||||||
|
|
||||||
.back
|
.back
|
||||||
margin-top: 15vh
|
margin-top: 15vh
|
||||||
color: #4a93d2
|
|
||||||
font-size: 25px
|
font-size: 25px
|
||||||
|
|
||||||
.homepage
|
.homepage
|
||||||
|
Loading…
Reference in New Issue
Block a user