summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/ci.yml4
-rw-r--r--.config/cypress-devcontainer.yml4
-rw-r--r--.config/docker_example.yml4
-rw-r--r--.config/example.yml4
-rw-r--r--locales/index.d.ts36
-rw-r--r--packages/backend/src/config.ts6
-rw-r--r--packages/backend/src/core/NoteCreateService.ts8
-rw-r--r--packages/backend/src/core/NoteEditService.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/notes/create.ts12
-rw-r--r--packages/backend/src/server/api/endpoints/notes/edit.ts14
10 files changed, 91 insertions, 9 deletions
diff --git a/.config/ci.yml b/.config/ci.yml
index f29ac392d9..d20ede8d35 100644
--- a/.config/ci.yml
+++ b/.config/ci.yml
@@ -171,6 +171,10 @@ id: 'aidx'
#maxNoteLength: 3000
# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1)
#maxRemoteNoteLength: 100000
+# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1)
+#maxCwLength: 500
+# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1)
+#maxRemoteCwLength: 5000
# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1)
#maxAltTextLength: 20000
# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1)
diff --git a/.config/cypress-devcontainer.yml b/.config/cypress-devcontainer.yml
index 66b5dceac8..d8013a1c95 100644
--- a/.config/cypress-devcontainer.yml
+++ b/.config/cypress-devcontainer.yml
@@ -183,6 +183,10 @@ id: 'aidx'
#maxNoteLength: 3000
# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1)
#maxRemoteNoteLength: 100000
+# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1)
+#maxCwLength: 500
+# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1)
+#maxRemoteCwLength: 5000
# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1)
#maxAltTextLength: 20000
# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1)
diff --git a/.config/docker_example.yml b/.config/docker_example.yml
index dd8ea1727a..5fac3dc41e 100644
--- a/.config/docker_example.yml
+++ b/.config/docker_example.yml
@@ -254,6 +254,10 @@ id: 'aidx'
#maxNoteLength: 3000
# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1)
#maxRemoteNoteLength: 100000
+# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1)
+#maxCwLength: 500
+# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1)
+#maxRemoteCwLength: 5000
# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1)
#maxAltTextLength: 20000
# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1)
diff --git a/.config/example.yml b/.config/example.yml
index 8794a25ffb..0062b6670c 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -265,6 +265,10 @@ id: 'aidx'
#maxNoteLength: 3000
# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1)
#maxRemoteNoteLength: 100000
+# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1)
+#maxCwLength: 500
+# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1)
+#maxRemoteCwLength: 5000
# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1)
#maxAltTextLength: 20000
# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1)
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 535e88f7c7..d1cb1f97ea 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -5353,6 +5353,10 @@ export interface Locale extends ILocale {
* オンにすると、このお知らせは通知されず、既読にする必要もなくなります。
*/
"silenceDescription": string;
+ /**
+ * New
+ */
+ "new": string;
};
"_initialAccountSetting": {
/**
@@ -8442,6 +8446,10 @@ export interface Locale extends ILocale {
* アプリケーションにアクセス許可を与えるには、ログインが必要です。
*/
"pleaseLogin": string;
+ /**
+ * Allowed
+ */
+ "allowed": string;
};
"_antennaSources": {
/**
@@ -10604,6 +10612,30 @@ export interface Locale extends ILocale {
*/
"mutuals": string;
/**
+ * Private account
+ */
+ "isLocked": string;
+ /**
+ * Administrator
+ */
+ "isAdmin": string;
+ /**
+ * Bot user
+ */
+ "isBot": string;
+ /**
+ * Open
+ */
+ "open": string;
+ /**
+ * Destination address
+ */
+ "emailDestination": string;
+ /**
+ * Date
+ */
+ "date": string;
+ /**
* Quoted.
*/
"quoted": string;
@@ -10964,6 +10996,10 @@ export interface Locale extends ILocale {
* Blocking you
*/
"blockingYou": string;
+ /**
+ * Show warning when opening external URLs
+ */
+ "warnExternalUrl": string;
"_mfm": {
/**
* This is not a widespread feature, it may not display properly on most other fedi software, including other Misskey forks
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index 19f1d6c066..3dc49c7eb6 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -73,6 +73,8 @@ type Source = {
maxFileSize?: number;
maxNoteLength?: number;
+ maxCwLength?: number;
+ maxRemoteCwLength?: number;
maxRemoteNoteLength?: number;
maxAltTextLength?: number;
maxRemoteAltTextLength?: number;
@@ -153,6 +155,8 @@ export type Config = {
maxFileSize: number;
maxNoteLength: number;
maxRemoteNoteLength: number;
+ maxCwLength: number;
+ maxRemoteCwLength: number;
maxAltTextLength: number;
maxRemoteAltTextLength: number;
clusterLimit: number | undefined;
@@ -308,6 +312,8 @@ export function loadConfig(): Config {
maxFileSize: config.maxFileSize ?? 262144000,
maxNoteLength: config.maxNoteLength ?? 3000,
maxRemoteNoteLength: config.maxRemoteNoteLength ?? 100000,
+ maxCwLength: config.maxCwLength ?? 500,
+ maxRemoteCwLength: config.maxRemoteCwLength ?? 5000,
maxAltTextLength: config.maxAltTextLength ?? 20000,
maxRemoteAltTextLength: config.maxRemoteAltTextLength ?? 100000,
clusterLimit: config.clusterLimit,
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 25286992d6..1bc4599a60 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -350,9 +350,13 @@ export class NoteCreateService implements OnApplicationShutdown {
data.text = null;
}
+ const maxCwLength = user.host == null
+ ? this.config.maxCwLength
+ : this.config.maxRemoteCwLength;
+
if (data.cw) {
- if (data.cw.length > maxTextLength) {
- data.cw = data.cw.slice(0, maxTextLength);
+ if (data.cw.length > maxCwLength) {
+ data.cw = data.cw.slice(0, maxCwLength);
}
data.cw = data.cw.trim();
if (data.cw === '') {
diff --git a/packages/backend/src/core/NoteEditService.ts b/packages/backend/src/core/NoteEditService.ts
index b1dd32aef8..d31958e5d4 100644
--- a/packages/backend/src/core/NoteEditService.ts
+++ b/packages/backend/src/core/NoteEditService.ts
@@ -380,9 +380,13 @@ export class NoteEditService implements OnApplicationShutdown {
data.text = null;
}
+ const maxCwLength = user.host == null
+ ? this.config.maxCwLength
+ : this.config.maxRemoteCwLength;
+
if (data.cw) {
- if (data.cw.length > maxTextLength) {
- data.cw = data.cw.slice(0, maxTextLength);
+ if (data.cw.length > maxCwLength) {
+ data.cw = data.cw.slice(0, maxCwLength);
}
data.cw = data.cw.trim();
if (data.cw === '') {
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index a66395f25c..d1cf0123dc 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -90,6 +90,12 @@ export const meta = {
id: '3ac74a84-8fd5-4bb0-870f-01804f82ce16',
},
+ maxCwLength: {
+ message: 'You tried posting a content warning which is too long.',
+ code: 'MAX_CW_LENGTH',
+ id: '7004c478-bda3-4b4f-acb2-4316398c9d52',
+ },
+
cannotReplyToSpecifiedVisibilityNoteWithExtendedVisibility: {
message: 'You cannot reply to a specified visibility note with extended visibility.',
code: 'CANNOT_REPLY_TO_SPECIFIED_VISIBILITY_NOTE_WITH_EXTENDED_VISIBILITY',
@@ -250,10 +256,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private noteCreateService: NoteCreateService,
) {
super(meta, paramDef, async (ps, me) => {
- const contentLength = (ps.text?.length ?? 0) + (ps.cw?.length ?? 0);
- if (contentLength > this.config.maxNoteLength) {
+ if (ps.text && ps.text.length > this.config.maxNoteLength) {
throw new ApiError(meta.errors.maxLength);
}
+ if (ps.cw && ps.cw.length > this.config.maxCwLength) {
+ throw new ApiError(meta.errors.maxCwLength);
+ }
let visibleUsers: MiUser[] = [];
if (ps.visibleUserIds) {
diff --git a/packages/backend/src/server/api/endpoints/notes/edit.ts b/packages/backend/src/server/api/endpoints/notes/edit.ts
index b9be145caf..dc94c78e75 100644
--- a/packages/backend/src/server/api/endpoints/notes/edit.ts
+++ b/packages/backend/src/server/api/endpoints/notes/edit.ts
@@ -86,6 +86,12 @@ export const meta = {
id: '3ac74a84-8fd5-4bb0-870f-01804f82ce16',
},
+ maxCwLength: {
+ message: 'You tried posting a content warning which is too long.',
+ code: 'MAX_CW_LENGTH',
+ id: '7004c478-bda3-4b4f-acb2-4316398c9d52',
+ },
+
cannotReplyToSpecifiedVisibilityNoteWithExtendedVisibility: {
message: 'You cannot reply to a specified visibility note with extended visibility.',
code: 'CANNOT_REPLY_TO_SPECIFIED_VISIBILITY_NOTE_WITH_EXTENDED_VISIBILITY',
@@ -197,7 +203,7 @@ export const paramDef = {
format: 'misskey:id',
},
},
- cw: { type: 'string', nullable: true, minLength: 1, maxLength: 500 },
+ cw: { type: 'string', nullable: true, minLength: 1 },
localOnly: { type: 'boolean', default: false },
reactionAcceptance: { type: 'string', nullable: true, enum: [null, 'likeOnly', 'likeOnlyForRemote', 'nonSensitiveOnly', 'nonSensitiveOnlyForLocalLikeOnlyForRemote'], default: null },
noExtractMentions: { type: 'boolean', default: false },
@@ -297,10 +303,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private noteEditService: NoteEditService,
) {
super(meta, paramDef, async (ps, me) => {
- const contentLength = (ps.text?.length ?? 0) + (ps.cw?.length ?? 0);
- if (contentLength > this.config.maxNoteLength) {
+ if (ps.text && ps.text.length > this.config.maxNoteLength) {
throw new ApiError(meta.errors.maxLength);
}
+ if (ps.cw && ps.cw.length > this.config.maxCwLength) {
+ throw new ApiError(meta.errors.maxCwLength);
+ }
let visibleUsers: MiUser[] = [];
if (ps.visibleUserIds) {