mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
fix(api): 🐛 Don't allow replying to reblogs
Some checks failed
CodeQL Scan / Analyze (javascript-typescript) (push) Failing after 0s
Build Docker Images / lint (push) Failing after 6s
Build Docker Images / check (push) Failing after 6s
Build Docker Images / tests (push) Failing after 6s
Deploy Docs to GitHub Pages / build (push) Failing after 0s
Build Docker Images / build (server, Dockerfile, ${{ github.repository_owner }}/server) (push) Has been skipped
Build Docker Images / build (worker, Worker.Dockerfile, ${{ github.repository_owner }}/worker) (push) Has been skipped
Deploy Docs to GitHub Pages / Deploy (push) Has been skipped
Mirror to Codeberg / Mirror (push) Failing after 0s
Nix Build / check (push) Failing after 0s
Some checks failed
CodeQL Scan / Analyze (javascript-typescript) (push) Failing after 0s
Build Docker Images / lint (push) Failing after 6s
Build Docker Images / check (push) Failing after 6s
Build Docker Images / tests (push) Failing after 6s
Deploy Docs to GitHub Pages / build (push) Failing after 0s
Build Docker Images / build (server, Dockerfile, ${{ github.repository_owner }}/server) (push) Has been skipped
Build Docker Images / build (worker, Worker.Dockerfile, ${{ github.repository_owner }}/worker) (push) Has been skipped
Deploy Docs to GitHub Pages / Deploy (push) Has been skipped
Mirror to Codeberg / Mirror (push) Failing after 0s
Nix Build / check (push) Failing after 0s
This commit is contained in:
parent
2155ca12be
commit
294924fc49
|
|
@ -208,6 +208,44 @@ describe("/api/v1/statuses", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("shouldn't allow replying to a reblog", async () => {
|
||||||
|
await using client = await generateClient(users[0]);
|
||||||
|
await using client2 = await generateClient(users[1]);
|
||||||
|
|
||||||
|
const { data, ok } = await client.postStatus("Hello, world!");
|
||||||
|
|
||||||
|
expect(ok).toBe(true);
|
||||||
|
|
||||||
|
const { data: reblog, ok: ok2 } = await client2.reblogStatus(data.id);
|
||||||
|
|
||||||
|
expect(ok2).toBe(true);
|
||||||
|
|
||||||
|
const { ok: ok3 } = await client.postStatus("Hello, world again!", {
|
||||||
|
in_reply_to_id: reblog.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(ok3).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("shouldn't allow quoting a reblog", async () => {
|
||||||
|
await using client = await generateClient(users[0]);
|
||||||
|
await using client2 = await generateClient(users[1]);
|
||||||
|
|
||||||
|
const { data, ok } = await client.postStatus("Hello, world!");
|
||||||
|
|
||||||
|
expect(ok).toBe(true);
|
||||||
|
|
||||||
|
const { data: reblog, ok: ok2 } = await client2.reblogStatus(data.id);
|
||||||
|
|
||||||
|
expect(ok2).toBe(true);
|
||||||
|
|
||||||
|
const { ok: ok3 } = await client.postStatus("Hello, world again!", {
|
||||||
|
quote_id: reblog.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(ok3).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
describe("mentions testing", () => {
|
describe("mentions testing", () => {
|
||||||
test("should correctly parse @mentions", async () => {
|
test("should correctly parse @mentions", async () => {
|
||||||
await using client = await generateClient(users[0]);
|
await using client = await generateClient(users[0]);
|
||||||
|
|
|
||||||
|
|
@ -163,21 +163,35 @@ export default apiRoute((app) =>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const reply = in_reply_to_id
|
||||||
|
? await Note.fromId(in_reply_to_id)
|
||||||
|
: null;
|
||||||
|
|
||||||
// Check that in_reply_to_id and quote_id are real posts if provided
|
// Check that in_reply_to_id and quote_id are real posts if provided
|
||||||
if (in_reply_to_id && !(await Note.fromId(in_reply_to_id))) {
|
if (in_reply_to_id && !reply) {
|
||||||
throw new ApiError(
|
throw new ApiError(
|
||||||
422,
|
422,
|
||||||
"Note referenced by in_reply_to_id not found",
|
"Note referenced by in_reply_to_id not found",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quote_id && !(await Note.fromId(quote_id))) {
|
if (in_reply_to_id && reply?.data.reblogId) {
|
||||||
|
throw new ApiError(422, "Cannot reply to a reblog");
|
||||||
|
}
|
||||||
|
|
||||||
|
const quote = quote_id ? await Note.fromId(quote_id) : null;
|
||||||
|
|
||||||
|
if (quote_id && !quote) {
|
||||||
throw new ApiError(
|
throw new ApiError(
|
||||||
422,
|
422,
|
||||||
"Note referenced by quote_id not found",
|
"Note referenced by quote_id not found",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quote_id && quote?.data.reblogId) {
|
||||||
|
throw new ApiError(422, "Cannot quote a reblog");
|
||||||
|
}
|
||||||
|
|
||||||
const sanitizedSpoilerText = spoiler_text
|
const sanitizedSpoilerText = spoiler_text
|
||||||
? await sanitizedHtmlStrip(spoiler_text)
|
? await sanitizedHtmlStrip(spoiler_text)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue