summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-06-03 23:08:18 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-06-03 23:08:18 +0900
commit71c230b7b7407b1d4b0e38f96d3a908a5d30f18a (patch)
tree2e3542574c1a276f749ca008b3bffb7b71ffd34e /packages/backend/src
parentfix(test): reset redis in e2e test (diff)
parentfix(client): correctly handle MiAuth URLs with query string (#8772) (diff)
downloadmisskey-71c230b7b7407b1d4b0e38f96d3a908a5d30f18a.tar.gz
misskey-71c230b7b7407b1d4b0e38f96d3a908a5d30f18a.tar.bz2
misskey-71c230b7b7407b1d4b0e38f96d3a908a5d30f18a.zip
Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/mfm/from-html.ts3
-rw-r--r--packages/backend/src/misc/get-ip-hash.ts9
-rw-r--r--packages/backend/src/queue/index.ts2
-rw-r--r--packages/backend/src/server/api/call.ts11
-rw-r--r--packages/backend/src/server/api/private/signin.ts3
-rw-r--r--packages/backend/src/services/note/create.ts3
6 files changed, 21 insertions, 10 deletions
diff --git a/packages/backend/src/mfm/from-html.ts b/packages/backend/src/mfm/from-html.ts
index 623cb0e71c..15110b6b70 100644
--- a/packages/backend/src/mfm/from-html.ts
+++ b/packages/backend/src/mfm/from-html.ts
@@ -6,6 +6,9 @@ const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/;
const urlRegexFull = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+$/;
export function fromHtml(html: string, hashtagNames?: string[]): string {
+ // some AP servers like Pixelfed use br tags as well as newlines
+ html = html.replace(/<br\s?\/?>\r?\n/gi, '\n');
+
const dom = parse5.parseFragment(html);
let text = '';
diff --git a/packages/backend/src/misc/get-ip-hash.ts b/packages/backend/src/misc/get-ip-hash.ts
new file mode 100644
index 0000000000..379325bb13
--- /dev/null
+++ b/packages/backend/src/misc/get-ip-hash.ts
@@ -0,0 +1,9 @@
+import IPCIDR from 'ip-cidr';
+
+export function getIpHash(ip: string) {
+ // because a single person may control many IPv6 addresses,
+ // only a /64 subnet prefix of any IP will be taken into account.
+ // (this means for IPv4 the entire address is used)
+ const prefix = IPCIDR.createAddress(ip).mask(64);
+ return 'ip-' + BigInt('0b' + prefix).toString(36);
+}
diff --git a/packages/backend/src/queue/index.ts b/packages/backend/src/queue/index.ts
index 67d5f5d248..c5fd7de1cb 100644
--- a/packages/backend/src/queue/index.ts
+++ b/packages/backend/src/queue/index.ts
@@ -305,11 +305,13 @@ export default function() {
systemQueue.add('resyncCharts', {
}, {
repeat: { cron: '0 0 * * *' },
+ removeOnComplete: true,
});
systemQueue.add('cleanCharts', {
}, {
repeat: { cron: '0 0 * * *' },
+ removeOnComplete: true,
});
systemQueue.add('checkExpiredMutings', {
diff --git a/packages/backend/src/server/api/call.ts b/packages/backend/src/server/api/call.ts
index fbe25e1732..cd3e0abc06 100644
--- a/packages/backend/src/server/api/call.ts
+++ b/packages/backend/src/server/api/call.ts
@@ -6,7 +6,7 @@ import endpoints, { IEndpointMeta } from './endpoints.js';
import { ApiError } from './error.js';
import { apiLogger } from './logger.js';
import { AccessToken } from '@/models/entities/access-token.js';
-import IPCIDR from 'ip-cidr';
+import { getIpHash } from '@/misc/get-ip-hash.js';
const accessDenied = {
message: 'Access denied.',
@@ -33,18 +33,13 @@ export default async (endpoint: string, user: CacheableLocalUser | null | undefi
throw new ApiError(accessDenied);
}
- if (ep.meta.requireCredential && ep.meta.limit && !isModerator) {
+ if (ep.meta.limit && !isModerator) {
// koa will automatically load the `X-Forwarded-For` header if `proxy: true` is configured in the app.
let limitActor: string;
if (user) {
limitActor = user.id;
} else {
- // because a single person may control many IPv6 addresses,
- // only a /64 subnet prefix of any IP will be taken into account.
- // (this means for IPv4 the entire address is used)
- const ip = IPCIDR.createAddress(ctx.ip).mask(64);
-
- limitActor = 'ip-' + parseInt(ip, 2).toString(36);
+ limitActor = getIpHash(ctx!.ip);
}
const limit = Object.assign({}, ep.meta.limit);
diff --git a/packages/backend/src/server/api/private/signin.ts b/packages/backend/src/server/api/private/signin.ts
index b304550e29..79b31764fd 100644
--- a/packages/backend/src/server/api/private/signin.ts
+++ b/packages/backend/src/server/api/private/signin.ts
@@ -10,6 +10,7 @@ import { verifyLogin, hash } from '../2fa.js';
import { randomBytes } from 'node:crypto';
import { IsNull } from 'typeorm';
import { limiter } from '../limiter.js';
+import { getIpHash } from '@/misc/get-ip-hash.js';
export default async (ctx: Koa.Context) => {
ctx.set('Access-Control-Allow-Origin', config.url);
@@ -27,7 +28,7 @@ export default async (ctx: Koa.Context) => {
try {
// not more than 1 attempt per second and not more than 10 attempts per hour
- await limiter({ key: 'signin', duration: 60 * 60 * 1000, max: 10, minInterval: 1000 }, ctx.ip);
+ await limiter({ key: 'signin', duration: 60 * 60 * 1000, max: 10, minInterval: 1000 }, getIpHash(ctx.ip));
} catch (err) {
ctx.status = 429;
ctx.body = {
diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts
index ceb5e8cc71..e2bf9d5b59 100644
--- a/packages/backend/src/services/note/create.ts
+++ b/packages/backend/src/services/note/create.ts
@@ -312,7 +312,8 @@ export default async (user: { id: User['id']; username: User['username']; host:
endedPollNotificationQueue.add({
noteId: note.id,
}, {
- delay
+ delay,
+ removeOnComplete: true,
});
}