summaryrefslogtreecommitdiff
path: root/src/server/nodeinfo.ts
diff options
context:
space:
mode:
authorAcid Chicken (硫酸鶏) <root@acid-chicken.com>2019-02-05 17:42:55 +0900
committerGitHub <noreply@github.com>2019-02-05 17:42:55 +0900
commit9dd06a7621d1745b30ed1c2b1d94d34143dd638e (patch)
tree7531db8f03407cc4b9106c36b2b5ab3dadf7672a /src/server/nodeinfo.ts
parentMerge branch 'develop' of https://github.com/syuilo/misskey into develop (diff)
downloadsharkey-9dd06a7621d1745b30ed1c2b1d94d34143dd638e.tar.gz
sharkey-9dd06a7621d1745b30ed1c2b1d94d34143dd638e.tar.bz2
sharkey-9dd06a7621d1745b30ed1c2b1d94d34143dd638e.zip
/.well-known 周りをいい感じに (#4141)
* Enhance /.well-known and their friends * Fix bug
Diffstat (limited to 'src/server/nodeinfo.ts')
-rw-r--r--src/server/nodeinfo.ts73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/server/nodeinfo.ts b/src/server/nodeinfo.ts
new file mode 100644
index 0000000000..5abb2e4973
--- /dev/null
+++ b/src/server/nodeinfo.ts
@@ -0,0 +1,73 @@
+import * as Router from 'koa-router';
+import config from '../config';
+import fetchMeta from '../misc/fetch-meta';
+import User from '../models/user';
+import { name as softwareName, version, repository } from '../../package.json';
+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 [
+ { name, description, maintainer, langs, broadcasts, disableRegistration, disableLocalTimeline, disableGlobalTimeline, enableRecaptcha, maxNoteTextLength, enableTwitterIntegration, enableGithubIntegration, enableDiscordIntegration, enableEmail, enableServiceWorker },
+ total,
+ activeHalfyear,
+ activeMonth,
+ localPosts,
+ localComments
+ ] = await Promise.all([
+ fetchMeta(),
+ 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 } })
+ ]);
+
+ return {
+ software: {
+ name: softwareName,
+ version,
+ repository: repository.url
+ },
+ protocols: ['activitypub'],
+ services: {
+ inbound: [] as string[],
+ outbound: ['atom1.0', 'rss2.0']
+ },
+ openRegistrations: !disableRegistration,
+ usage: {
+ users: { total, activeHalfyear, activeMonth },
+ localPosts,
+ localComments
+ },
+ metadata: { name, description, maintainer, langs, broadcasts, disableRegistration, disableLocalTimeline, disableGlobalTimeline, enableRecaptcha, maxNoteTextLength, enableTwitterIntegration, enableGithubIntegration, enableDiscordIntegration, enableEmail, enableServiceWorker }
+ };
+};
+
+router.get(nodeinfo2_1path, async ctx => {
+ const base = await nodeinfo2();
+
+ ctx.body = { version: '2.1', ...base };
+});
+
+router.get(nodeinfo2_0path, async ctx => {
+ const base = await nodeinfo2();
+
+ delete base.software.repository;
+
+ ctx.body = { version: '2.0', ...base };
+});
+
+export default router;