1
0
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:
Cadence Fish 2020-01-30 16:05:43 +13:00
parent a5ab771969
commit e2fba3bbd0
No known key found for this signature in database
GPG Key ID: 81015DF9AA8607E1
9 changed files with 56 additions and 14 deletions

View File

@ -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
} }

View File

@ -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

View File

@ -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")
} }
} }

View File

@ -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"
}) })
} }

View File

@ -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
View 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.

View File

@ -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?

View 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?

View File

@ -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