diff options
| author | Acid Chicken (硫酸鶏) <root@acid-chicken.com> | 2019-02-05 17:42:55 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-05 17:42:55 +0900 |
| commit | 9dd06a7621d1745b30ed1c2b1d94d34143dd638e (patch) | |
| tree | 7531db8f03407cc4b9106c36b2b5ab3dadf7672a /src/server/nodeinfo.ts | |
| parent | Merge branch 'develop' of https://github.com/syuilo/misskey into develop (diff) | |
| download | sharkey-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.ts | 73 |
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; |