1
0
mirror of https://git.sr.ht/~cadence/bibliogram synced 2024-09-28 23:07:30 +00:00
bibliogram/src/site/api/api.js

108 lines
2.3 KiB
JavaScript
Raw Normal View History

2020-01-14 14:38:33 +00:00
const constants = require("../../lib/constants")
2020-01-28 06:23:53 +00:00
const child_process = require("child_process")
const {history} = require("../../lib/collectors")
const {redirect} = require("pinski/plugins")
2020-01-12 12:50:21 +00:00
function reply(statusCode, content) {
return {
statusCode: statusCode,
contentType: "application/json",
content: JSON.stringify(content)
}
}
2020-01-28 06:23:53 +00:00
let commit = ""
{
const p = child_process.spawn("git", ["rev-parse", "--short", "HEAD"])
p.on("error", console.error)
p.stdout.on("data", data => {
const string = data.toString()
commit = "-" + string.match(/[0-9a-f]+/)[0]
})
}
2020-01-12 12:50:21 +00:00
module.exports = [
2020-01-28 05:39:07 +00:00
{
route: "/.well-known/nodeinfo", methods: ["GET"], code: async ({fill}) => {
return reply(200, {
link: [
{
rel: "http://nodeinfo.diaspora.software/ns/schema/2.0",
href: `${constants.website_origin}/api/stats/2.0`
}
]
})
}
},
{
route: "/api/stats", methods: ["GET"], code: async () => {
return redirect("/api/stats/2.0", 302)
}
},
{
route: "/api/stats/2.0", methods: ["GET"], code: async ({url}) => {
const versions = ["1.0", "1.1", "1.2"]
const features = [
"PAGE_PROFILE",
"PAGE_POST",
"API_STATS",
"PAGE_HOME",
"API_INSTANCES"
]
const inner = (
new Map([
["1.0", {
version: "1.0",
features
}],
["1.1", {
version: "1.1",
availableVersions: versions,
features,
history: history.export()
}],
["1.2", {
version: "1.2",
availableVersions: versions,
features,
history: history.export(),
settings: {
rssEnabled: constants.settings.rss_enabled
}
}]
])
).get(url.searchParams.get("bv") || versions[0])
if (!inner) return reply(400, {
status: "fail",
fields: ["q:bv"],
message: "query parameter `bv` selects version, must be either missing or any of " + versions.map(v => "`"+v+"`").join(", ") + "."
})
2020-01-28 05:39:07 +00:00
return reply(200, {
version: "2.0",
software: {
name: "bibliogram",
2020-01-28 06:23:53 +00:00
version: "1.0.0"+commit
2020-01-28 05:39:07 +00:00
},
protocols: [],
services: {
inbound: [
"instagram"
],
outbound: []
},
openRegistrations: false,
usage: {
users: {
total: 0,
activeHalfyear: 0,
activeMonth: 0
}
},
metadata: {
bibliogram: inner
2020-01-28 05:39:07 +00:00
}
})
}
}
2020-01-12 12:50:21 +00:00
]