summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-04-25 04:07:39 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-04-25 04:07:39 +0900
commitee5720df2c93a852d5429cb3919cdecc8b8051f8 (patch)
tree39a335cfe75dbdc9fac729ecf4de54a075dabaa5 /src
parent11.3.1 (diff)
downloadsharkey-ee5720df2c93a852d5429cb3919cdecc8b8051f8.tar.gz
sharkey-ee5720df2c93a852d5429cb3919cdecc8b8051f8.tar.bz2
sharkey-ee5720df2c93a852d5429cb3919cdecc8b8051f8.zip
Fix #4704 (#4797)
* Fix #4632 * Fix #4795
Diffstat (limited to 'src')
-rw-r--r--src/remote/activitypub/models/note.ts2
-rw-r--r--src/server/api/endpoints/ap/show.ts28
-rw-r--r--src/services/note/create.ts4
3 files changed, 31 insertions, 3 deletions
diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index 850b5e65e6..d7ca625521 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -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) {
diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts
index 1bb15117dd..9724a044b1 100644
--- a/src/server/api/endpoints/ap/show.ts
+++ b/src/server/api/endpoints/ap/show.ts
@@ -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 })
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index ce229d6393..2195ecc55f 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -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 = [];