summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorAcid Chicken (硫酸鶏) <root@acid-chicken.com>2018-10-31 02:17:54 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-10-31 02:17:54 +0900
commit50cd6a036ebe2cb75ddbeebc25f3d25b52ad1c3b (patch)
treeca97f482c012ea2193bc2231cd95e3e8d2c46ef2 /src/server/api
parentFix: can't recognize rebirthed instance user (#3046) (diff)
downloadsharkey-50cd6a036ebe2cb75ddbeebc25f3d25b52ad1c3b.tar.gz
sharkey-50cd6a036ebe2cb75ddbeebc25f3d25b52ad1c3b.tar.bz2
sharkey-50cd6a036ebe2cb75ddbeebc25f3d25b52ad1c3b.zip
Implement /api/v1/instance (#3045)
* Update mastodon.ts * Update types.ts * Update mastodon.ts
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/mastodon.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/server/api/mastodon.ts b/src/server/api/mastodon.ts
index f2ce1c384f..a9253be805 100644
--- a/src/server/api/mastodon.ts
+++ b/src/server/api/mastodon.ts
@@ -1,10 +1,85 @@
import * as Router from 'koa-router';
import User from '../../models/user';
import { toASCII } from 'punycode';
+import config from '../../config';
+import Meta from '../../models/meta';
+import { ObjectID } from 'bson';
+const pkg = require('../../../package.json');
// Init router
const router = new Router();
+router.get('/v1/custom_emojis', async ctx => ctx.body = {});
+
+router.get('/v1/instance', async ctx => { // TODO: This is a temporary implementation. Consider creating helper methods!
+ const meta = await Meta.findOne() || {};
+ const { originalNotesCount, originalUsersCount } = meta.stats || {
+ originalNotesCount: 0,
+ originalUsersCount: 0
+ };
+ const domains = await User.distinct('host', { host: { $ne: null } }) as any as [] || [];
+ const maintainer = await User.findOne({ isAdmin: true }) || {
+ _id: ObjectID.createFromTime(0),
+ username: '', // TODO: Consider making this better!
+ host: config.host,
+ name: '',
+ isLocked: false,
+ isBot: false,
+ createdAt: new Date(0),
+ description: '',
+ avatarUrl: '',
+ bannerUrl: '',
+ followersCount: 0,
+ followingCount: 0,
+ notesCount: 0
+ };
+ const acct = maintainer.host ? `${maintainer.username}@${maintainer.host}` : maintainer.username;
+
+ ctx.body = {
+ uri: config.hostname,
+ title: config.name || 'Misskey',
+ description: config.description || '',
+ email: config.maintainer.email || config.maintainer.url.startsWith('mailto:') ? config.maintainer.url.slice(7) : '',
+ version: `0.0.0:compatible:misskey:${pkg.version}`, // TODO: How to tell about that this is an api for compatibility?
+ thumbnail: meta.bannerUrl,
+ /*
+ urls: {
+ streaming_api: config.ws_url + '/mastodon' // TODO: Implement compatible streaming API
+ }, */
+ stats: {
+ user_count: originalUsersCount,
+ status_count: originalNotesCount,
+ domain_count: domains.length
+ },
+ languages: config.languages || [ 'ja' ],
+ contact_account: {
+ id: maintainer._id,
+ username: maintainer.username,
+ acct: acct,
+ display_name: maintainer.name || '',
+ locked: maintainer.isLocked,
+ bot: maintainer.isBot,
+ created_at: maintainer.createdAt,
+ note: maintainer.description,
+ url: `${config.url}/@${acct}`,
+ avatar: maintainer.avatarUrl || '',
+ /*
+ avatar_static: maintainer.avatarUrl || '', // TODO: Implement static avatar url (ensure non-animated GIF)
+ */
+ header: maintainer.bannerUrl || '',
+ /*
+ header_static: maintainer.bannerUrl || '', // TODO: Implement static header url (ensure non-animated GIF)
+ */
+ followers_count: maintainer.followersCount,
+ following_count: maintainer.followingCount,
+ statuses_count: maintainer.notesCount,
+ emojis: [],
+ moved: null,
+ fields: null
+ }
+ };
+});
+
router.get('/v1/instance/peers', async ctx => {
const peers = await User.distinct('host', { host: { $ne: null } }) as any as string[];
const punyCodes = peers.map(peer => toASCII(peer));