*  Fix #4632

* Fix #4795
This commit is contained in:
MeiMei 2019-04-25 04:07:39 +09:00 committed by syuilo
parent 878cd18144
commit ee5720df2c
3 changed files with 31 additions and 3 deletions

View file

@ -247,7 +247,7 @@ export async function resolveNote(value: string | IObject, resolver?: Resolver):
// リモートサーバーからフェッチしてきて登録
// ここでuriの代わりに添付されてきたNote Objectが指定されていると、サーバーフェッチを経ずにートが生成されるが
// 添付されてきたNote Objectは偽装されている可能性があるため、常にuriを指定してサーバーフェッチを行う。
return await createNote(uri, resolver).catch(e => {
return await createNote(uri, resolver, true).catch(e => {
if (e.name === 'duplicated') {
return fetchNote(uri).then(note => {
if (note == null) {

View file

@ -101,6 +101,32 @@ async function fetchAny(uri: string) {
// /@user のような正規id以外で取得できるURIが指定されていた場合、ここで初めて正規URIが確定する
// これはDBに存在する可能性があるため再度DB検索
if (uri !== object.id) {
if (object.id.startsWith(config.url + '/')) {
const parts = object.id.split('/');
const id = parts.pop();
const type = parts.pop();
if (type === 'notes') {
const note = await Notes.findOne(id);
if (note) {
return {
type: 'Note',
object: await Notes.pack(note, null, { detail: true })
};
}
} else if (type === 'users') {
const user = await Users.findOne(id);
if (user) {
return {
type: 'User',
object: await Users.pack(user, null, { detail: true })
};
}
}
}
const [user, note] = await Promise.all([
Users.findOne({ uri: object.id }),
Notes.findOne({ uri: object.id })
@ -120,7 +146,7 @@ async function fetchAny(uri: string) {
}
if (['Note', 'Question', 'Article'].includes(object.type)) {
const note = await createNote(object.id);
const note = await createNote(object.id, undefined, true);
return {
type: 'Note',
object: await Notes.pack(note!, null, { detail: true })

View file

@ -240,7 +240,9 @@ export default async (user: User, data: Option, silent = false) => new Promise<N
(noteObj as any).isFirstNote = true;
}
publishNotesStream(noteObj);
if (!silent) {
publishNotesStream(noteObj);
}
const nm = new NotificationManager(user, note);
const nmRelatedPromises = [];