summaryrefslogtreecommitdiff
path: root/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-11 17:40:01 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-11 17:40:01 +0900
commitbd3d57a67f6d7c6a01516410d2322e6ffbd2f5ad (patch)
treee5caa46997f78a61fb09a821aa0ac210784500fb /src/server/api/stream
parentv4771 (diff)
downloadmisskey-bd3d57a67f6d7c6a01516410d2322e6ffbd2f5ad.tar.gz
misskey-bd3d57a67f6d7c6a01516410d2322e6ffbd2f5ad.tar.bz2
misskey-bd3d57a67f6d7c6a01516410d2322e6ffbd2f5ad.zip
ストリーム経由でAPIにリクエストできるように
Diffstat (limited to '')
-rw-r--r--src/server/api/stream/home.ts24
-rw-r--r--src/server/api/streaming.ts45
2 files changed, 24 insertions, 45 deletions
diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts
index 359ef74aff..e9c0924f31 100644
--- a/src/server/api/stream/home.ts
+++ b/src/server/api/stream/home.ts
@@ -2,14 +2,22 @@ import * as websocket from 'websocket';
import * as redis from 'redis';
import * as debug from 'debug';
-import User from '../../../models/user';
+import User, { IUser } from '../../../models/user';
import Mute from '../../../models/mute';
import { pack as packNote } from '../../../models/note';
import readNotification from '../common/read-notification';
+import call from '../call';
+import { IApp } from '../../../models/app';
const log = debug('misskey');
-export default async function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any) {
+export default async function(
+ request: websocket.request,
+ connection: websocket.connection,
+ subscriber: redis.RedisClient,
+ user: IUser,
+ app: IApp
+) {
// Subscribe Home stream channel
subscriber.subscribe(`misskey:user-stream:${user._id}`);
@@ -67,7 +75,17 @@ export default async function(request: websocket.request, connection: websocket.
switch (msg.type) {
case 'api':
- // TODO
+ call(msg.endpoint, user, app, msg.data).then(res => {
+ connection.send(JSON.stringify({
+ type: `api-res:${msg.id}`,
+ body: { res }
+ }));
+ }).catch(e => {
+ connection.send(JSON.stringify({
+ type: `api-res:${msg.id}`,
+ body: { e }
+ }));
+ });
break;
case 'alive':
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 26946b524e..d586d7c08f 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -2,9 +2,6 @@ import * as http from 'http';
import * as websocket from 'websocket';
import * as redis from 'redis';
import config from '../../config';
-import { default as User, IUser } from '../../models/user';
-import AccessToken from '../../models/access-token';
-import isNativeToken from './common/is-native-token';
import homeStream from './stream/home';
import driveStream from './stream/drive';
@@ -16,6 +13,7 @@ import serverStream from './stream/server';
import requestsStream from './stream/requests';
import channelStream from './stream/channel';
import { ParsedUrlQuery } from 'querystring';
+import authenticate from './authenticate';
module.exports = (server: http.Server) => {
/**
@@ -53,7 +51,7 @@ module.exports = (server: http.Server) => {
}
const q = request.resourceURL.query as ParsedUrlQuery;
- const user = await authenticate(q.i as string);
+ const [user, app] = await authenticate(q.i as string);
if (request.resourceURL.pathname === '/othello-game') {
othelloGameStream(request, connection, subscriber, user);
@@ -75,46 +73,9 @@ module.exports = (server: http.Server) => {
null;
if (channel !== null) {
- channel(request, connection, subscriber, user);
+ channel(request, connection, subscriber, user, app);
} else {
connection.close();
}
});
};
-
-/**
- * 接続してきたユーザーを取得します
- * @param token 送信されてきたトークン
- */
-function authenticate(token: string): Promise<IUser> {
- if (token == null) {
- return Promise.resolve(null);
- }
-
- return new Promise(async (resolve, reject) => {
- if (isNativeToken(token)) {
- // Fetch user
- const user: IUser = await User
- .findOne({
- host: null,
- 'token': token
- });
-
- resolve(user);
- } else {
- const accessToken = await AccessToken.findOne({
- hash: token
- });
-
- if (accessToken == null) {
- return reject('invalid signature');
- }
-
- // Fetch user
- const user: IUser = await User
- .findOne({ _id: accessToken.userId });
-
- resolve(user);
- }
- });
-}