summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/nodeinfo.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /packages/backend/src/server/nodeinfo.ts
parentupdate deps (diff)
downloadsharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'packages/backend/src/server/nodeinfo.ts')
-rw-r--r--packages/backend/src/server/nodeinfo.ts101
1 files changed, 101 insertions, 0 deletions
diff --git a/packages/backend/src/server/nodeinfo.ts b/packages/backend/src/server/nodeinfo.ts
new file mode 100644
index 0000000000..6a864fcc52
--- /dev/null
+++ b/packages/backend/src/server/nodeinfo.ts
@@ -0,0 +1,101 @@
+import * as Router from '@koa/router';
+import config from '@/config/index';
+import { fetchMeta } from '@/misc/fetch-meta';
+import { Users } from '@/models/index';
+// import User from '../models/user';
+// import Note from '../models/note';
+
+const router = new Router();
+
+const nodeinfo2_1path = '/nodeinfo/2.1';
+const nodeinfo2_0path = '/nodeinfo/2.0';
+
+export const links = [/* (awaiting release) {
+ rel: 'http://nodeinfo.diaspora.software/ns/schema/2.1',
+ href: config.url + nodeinfo2_1path
+}, */{
+ rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0',
+ href: config.url + nodeinfo2_0path
+}];
+
+const nodeinfo2 = async () => {
+ const [
+ meta,
+ // total,
+ // activeHalfyear,
+ // activeMonth,
+ // localPosts,
+ // localComments
+ ] = await Promise.all([
+ fetchMeta(true),
+ // User.count({ host: null }),
+ // User.count({ host: null, updatedAt: { $gt: new Date(Date.now() - 15552000000) } }),
+ // User.count({ host: null, updatedAt: { $gt: new Date(Date.now() - 2592000000) } }),
+ // Note.count({ '_user.host': null, replyId: null }),
+ // Note.count({ '_user.host': null, replyId: { $ne: null } })
+ ]);
+
+ const proxyAccount = meta.proxyAccountId ? await Users.pack(meta.proxyAccountId).catch(() => null) : null;
+
+ return {
+ software: {
+ name: 'misskey',
+ version: config.version,
+ repository: meta.repositoryUrl,
+ },
+ protocols: ['activitypub'],
+ services: {
+ inbound: [] as string[],
+ outbound: ['atom1.0', 'rss2.0']
+ },
+ openRegistrations: !meta.disableRegistration,
+ usage: {
+ users: {} // { total, activeHalfyear, activeMonth },
+ // localPosts,
+ // localComments
+ },
+ metadata: {
+ nodeName: meta.name,
+ nodeDescription: meta.description,
+ maintainer: {
+ name: meta.maintainerName,
+ email: meta.maintainerEmail
+ },
+ langs: meta.langs,
+ tosUrl: meta.ToSUrl,
+ repositoryUrl: meta.repositoryUrl,
+ feedbackUrl: meta.feedbackUrl,
+ disableRegistration: meta.disableRegistration,
+ disableLocalTimeline: meta.disableLocalTimeline,
+ disableGlobalTimeline: meta.disableGlobalTimeline,
+ emailRequiredForSignup: meta.emailRequiredForSignup,
+ enableHcaptcha: meta.enableHcaptcha,
+ enableRecaptcha: meta.enableRecaptcha,
+ maxNoteTextLength: meta.maxNoteTextLength,
+ enableTwitterIntegration: meta.enableTwitterIntegration,
+ enableGithubIntegration: meta.enableGithubIntegration,
+ enableDiscordIntegration: meta.enableDiscordIntegration,
+ enableEmail: meta.enableEmail,
+ enableServiceWorker: meta.enableServiceWorker,
+ proxyAccountName: proxyAccount ? proxyAccount.username : null,
+ }
+ };
+};
+
+router.get(nodeinfo2_1path, async ctx => {
+ const base = await nodeinfo2();
+
+ ctx.body = { version: '2.1', ...base };
+ ctx.set('Cache-Control', 'public, max-age=600');
+});
+
+router.get(nodeinfo2_0path, async ctx => {
+ const base = await nodeinfo2();
+
+ delete base.software.repository;
+
+ ctx.body = { version: '2.0', ...base };
+ ctx.set('Cache-Control', 'public, max-age=600');
+});
+
+export default router;