diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-07 17:19:44 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-07 17:19:44 +0900 |
| commit | b3cb4c7d94c7b9a2900db7042dd2971362f8de88 (patch) | |
| tree | fa3c3588cb376b2464fd8f4691e89238581d1192 /src/server/api | |
| parent | fix(package): update webpack-cli to version 2.0.14 (diff) | |
| parent | Merge pull request #1401 from syuilo/greenkeeper/webpack-4.5.0 (diff) | |
| download | sharkey-b3cb4c7d94c7b9a2900db7042dd2971362f8de88.tar.gz sharkey-b3cb4c7d94c7b9a2900db7042dd2971362f8de88.tar.bz2 sharkey-b3cb4c7d94c7b9a2900db7042dd2971362f8de88.zip | |
Merge branch 'master' into greenkeeper/webpack-cli-2.0.14
Diffstat (limited to 'src/server/api')
| -rw-r--r-- | src/server/api/bot/core.ts | 7 | ||||
| -rw-r--r-- | src/server/api/bot/interfaces/line.ts | 5 | ||||
| -rw-r--r-- | src/server/api/endpoints/following/create.ts | 11 | ||||
| -rw-r--r-- | src/server/api/endpoints/posts/create.ts | 88 | ||||
| -rw-r--r-- | src/server/api/endpoints/posts/reactions/create.ts | 88 | ||||
| -rw-r--r-- | src/server/api/endpoints/users/show.ts | 3 | ||||
| -rw-r--r-- | src/server/api/private/signup.ts | 3 |
7 files changed, 30 insertions, 175 deletions
diff --git a/src/server/api/bot/core.ts b/src/server/api/bot/core.ts index 7e80f31e5e..a44aa9d7bc 100644 --- a/src/server/api/bot/core.ts +++ b/src/server/api/bot/core.ts @@ -4,6 +4,7 @@ import * as bcrypt from 'bcryptjs'; import User, { IUser, init as initUser, ILocalUser } from '../../../models/user'; import getPostSummary from '../../../renderers/get-post-summary'; +import getUserName from '../../../renderers/get-user-name'; import getUserSummary from '../../../renderers/get-user-summary'; import parseAcct from '../../../acct/parse'; import getNotificationSummary from '../../../renderers/get-notification-summary'; @@ -90,7 +91,7 @@ export default class BotCore extends EventEmitter { 'タイムラインや通知を見た後、「次」というとさらに遡ることができます。'; case 'me': - return this.user ? `${this.user.name}としてサインインしています。\n\n${getUserSummary(this.user)}` : 'サインインしていません'; + return this.user ? `${getUserName(this.user)}としてサインインしています。\n\n${getUserSummary(this.user)}` : 'サインインしていません'; case 'login': case 'signin': @@ -230,7 +231,7 @@ class SigninContext extends Context { if (same) { this.bot.signin(this.temporaryUser); this.bot.clearContext(); - return `${this.temporaryUser.name}さん、おかえりなさい!`; + return `${getUserName(this.temporaryUser)}さん、おかえりなさい!`; } else { return `パスワードが違います... もう一度教えてください:`; } @@ -305,7 +306,7 @@ class TlContext extends Context { this.emit('updated'); const text = tl - .map(post => `${post.user.name}\n「${getPostSummary(post)}」`) + .map(post => `${getUserName(post.user)}\n「${getPostSummary(post)}」`) .join('\n-----\n'); return text; diff --git a/src/server/api/bot/interfaces/line.ts b/src/server/api/bot/interfaces/line.ts index 7847cbdeaa..1191aaf391 100644 --- a/src/server/api/bot/interfaces/line.ts +++ b/src/server/api/bot/interfaces/line.ts @@ -10,6 +10,7 @@ import prominence = require('prominence'); import getAcct from '../../../../acct/render'; import parseAcct from '../../../../acct/parse'; import getPostSummary from '../../../../renderers/get-post-summary'; +import getUserName from '../../../../renderers/get-user-name'; const redis = prominence(_redis); @@ -131,7 +132,7 @@ class LineBot extends BotCore { template: { type: 'buttons', thumbnailImageUrl: `${user.avatarUrl}?thumbnail&size=1024`, - title: `${user.name} (@${acct})`, + title: `${getUserName(user)} (@${acct})`, text: user.description || '(no description)', actions: actions } @@ -146,7 +147,7 @@ class LineBot extends BotCore { limit: 5 }, this.user); - const text = `${tl[0].user.name}さんのタイムラインはこちらです:\n\n` + tl + const text = `${getUserName(tl[0].user)}さんのタイムラインはこちらです:\n\n` + tl .map(post => getPostSummary(post)) .join('\n-----\n'); diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts index 9ccbe20171..0ccac8d83d 100644 --- a/src/server/api/endpoints/following/create.ts +++ b/src/server/api/endpoints/following/create.ts @@ -4,7 +4,7 @@ import $ from 'cafy'; import User from '../../../../models/user'; import Following from '../../../../models/following'; -import { createHttp } from '../../../../queue'; +import create from '../../../../services/following/create'; /** * Follow a user @@ -50,15 +50,8 @@ module.exports = (params, user) => new Promise(async (res, rej) => { } // Create following - const { _id } = await Following.insert({ - createdAt: new Date(), - followerId: follower._id, - followeeId: followee._id - }); - - createHttp({ type: 'follow', following: _id }).save(); + create(follower, followee); // Send response res(); - }); diff --git a/src/server/api/endpoints/posts/create.ts b/src/server/api/endpoints/posts/create.ts index 47897626f1..003a892bc0 100644 --- a/src/server/api/endpoints/posts/create.ts +++ b/src/server/api/endpoints/posts/create.ts @@ -3,17 +3,12 @@ */ import $ from 'cafy'; import deepEqual = require('deep-equal'); -import parseAcct from '../../../../acct/parse'; -import renderAcct from '../../../../acct/render'; -import config from '../../../../config'; -import html from '../../../../text/html'; -import parse from '../../../../text/parse'; -import Post, { IPost, isValidText, isValidCw } from '../../../../models/post'; -import User, { ILocalUser } from '../../../../models/user'; +import Post, { IPost, isValidText, isValidCw, pack } from '../../../../models/post'; +import { ILocalUser } from '../../../../models/user'; import Channel, { IChannel } from '../../../../models/channel'; import DriveFile from '../../../../models/drive-file'; -import create from '../../../../post/create'; -import distribute from '../../../../post/distribute'; +import create from '../../../../services/post/create'; +import { IApp } from '../../../../models/app'; /** * Create a post @@ -23,7 +18,7 @@ import distribute from '../../../../post/distribute'; * @param {any} app * @return {Promise<any>} */ -module.exports = (params, user: ILocalUser, app) => new Promise(async (res, rej) => { +module.exports = (params, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => { // Get 'visibility' parameter const [visibility = 'public', visibilityErr] = $(params.visibility).optional.string().or(['public', 'unlisted', 'private', 'direct']).$; if (visibilityErr) return rej('invalid visibility'); @@ -231,85 +226,26 @@ module.exports = (params, user: ILocalUser, app) => new Promise(async (res, rej) } } - let tokens = null; - if (text) { - // Analyze - tokens = parse(text); - - // Extract hashtags - const hashtags = tokens - .filter(t => t.type == 'hashtag') - .map(t => t.hashtag); - - hashtags.forEach(tag => { - if (tags.indexOf(tag) == -1) { - tags.push(tag); - } - }); - } - - let atMentions = []; - - // If has text content - if (text) { - /* - // Extract a hashtags - const hashtags = tokens - .filter(t => t.type == 'hashtag') - .map(t => t.hashtag) - // Drop dupulicates - .filter((v, i, s) => s.indexOf(v) == i); - - // ハッシュタグをデータベースに登録 - registerHashtags(user, hashtags); - */ - // Extract an '@' mentions - atMentions = tokens - .filter(t => t.type == 'mention') - .map(renderAcct) - // Drop dupulicates - .filter((v, i, s) => s.indexOf(v) == i) - // Fetch mentioned user - // SELECT _id - .map(mention => User.findOne(parseAcct(mention), { _id: true })); - } - // 投稿を作成 - const post = await create({ + const post = await create(user, { createdAt: new Date(), - channelId: channel ? channel._id : undefined, - index: channel ? channel.index + 1 : undefined, - mediaIds: files ? files.map(file => file._id) : [], + media: files, poll: poll, text: text, - textHtml: tokens === null ? null : html(tokens), + reply, + repost, cw: cw, tags: tags, - userId: user._id, - appId: app ? app._id : null, + app: app, viaMobile: viaMobile, visibility, geo - }, reply, repost, await Promise.all(atMentions)); + }); - const postObj = await distribute(user, post.mentions, post); + const postObj = await pack(post, user); // Reponse res({ createdPost: postObj }); - - // Register to search database - if (post.text && config.elasticsearch.enable) { - const es = require('../../../db/elasticsearch'); - - es.index({ - index: 'misskey', - type: 'post', - id: post._id.toString(), - body: { - text: post.text - } - }); - } }); diff --git a/src/server/api/endpoints/posts/reactions/create.ts b/src/server/api/endpoints/posts/reactions/create.ts index f1b0c7dd29..71fa6a2955 100644 --- a/src/server/api/endpoints/posts/reactions/create.ts +++ b/src/server/api/endpoints/posts/reactions/create.ts @@ -3,20 +3,11 @@ */ import $ from 'cafy'; import Reaction from '../../../../../models/post-reaction'; -import Post, { pack as packPost } from '../../../../../models/post'; -import { pack as packUser } from '../../../../../models/user'; -import Watching from '../../../../../models/post-watching'; -import watch from '../../../../../post/watch'; -import { publishPostStream } from '../../../../../publishers/stream'; -import notify from '../../../../../publishers/notify'; -import pushSw from '../../../../../publishers/push-sw'; +import Post from '../../../../../models/post'; +import create from '../../../../../services/post/reaction/create'; /** * React to a post - * - * @param {any} params - * @param {any} user - * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { // Get 'postId' parameter @@ -46,78 +37,11 @@ module.exports = (params, user) => new Promise(async (res, rej) => { return rej('post not found'); } - // Myself - if (post.userId.equals(user._id)) { - return rej('cannot react to my post'); + try { + await create(user, post, reaction); + } catch (e) { + rej(e); } - // if already reacted - const exist = await Reaction.findOne({ - postId: post._id, - userId: user._id, - deletedAt: { $exists: false } - }); - - if (exist !== null) { - return rej('already reacted'); - } - - // Create reaction - await Reaction.insert({ - createdAt: new Date(), - postId: post._id, - userId: user._id, - reaction: reaction - }); - - // Send response res(); - - const inc = {}; - inc[`reactionCounts.${reaction}`] = 1; - - // Increment reactions count - await Post.update({ _id: post._id }, { - $inc: inc - }); - - publishPostStream(post._id, 'reacted'); - - // Notify - notify(post.userId, user._id, 'reaction', { - postId: post._id, - reaction: reaction - }); - - pushSw(post.userId, 'reaction', { - user: await packUser(user, post.userId), - post: await packPost(post, post.userId), - reaction: reaction - }); - - // Fetch watchers - Watching - .find({ - postId: post._id, - userId: { $ne: user._id }, - // 削除されたドキュメントは除く - deletedAt: { $exists: false } - }, { - fields: { - userId: true - } - }) - .then(watchers => { - watchers.forEach(watcher => { - notify(watcher.userId, user._id, 'reaction', { - postId: post._id, - reaction: reaction - }); - }); - }); - - // この投稿をWatchする - if (user.account.settings.autoWatch !== false) { - watch(user._id, post); - } }); diff --git a/src/server/api/endpoints/users/show.ts b/src/server/api/endpoints/users/show.ts index 2b02799378..d272ce4639 100644 --- a/src/server/api/endpoints/users/show.ts +++ b/src/server/api/endpoints/users/show.ts @@ -37,7 +37,8 @@ module.exports = (params, me) => new Promise(async (res, rej) => { if (typeof host === 'string') { try { user = await resolveRemoteUser(username, host, cursorOption); - } catch (exception) { + } catch (e) { + console.warn(`failed to resolve remote user: ${e}`); return rej('failed to resolve remote user'); } } else { diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts index 4203ce526d..c54d6f1a1b 100644 --- a/src/server/api/private/signup.ts +++ b/src/server/api/private/signup.ts @@ -47,7 +47,6 @@ export default async (req: express.Request, res: express.Response) => { const username = req.body['username']; const password = req.body['password']; - const name = '名無し'; // Validate username if (!validateUsername(username)) { @@ -113,7 +112,7 @@ export default async (req: express.Request, res: express.Response) => { description: null, followersCount: 0, followingCount: 0, - name: name, + name: null, postsCount: 0, driveCapacity: 1024 * 1024 * 128, // 128MiB username: username, |