mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/647 Closes #686 and #696 Approved-by: Marie <github@yuugi.dev> Approved-by: dakkar <dakkar@thenautilus.net>
This commit is contained in:
		
						commit
						a90b4d487a
					
				
					 11 changed files with 57 additions and 10 deletions
				
			
		| 
						 | 
					@ -167,7 +167,7 @@ id: 'aidx'
 | 
				
			||||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
					# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
				
			||||||
#outgoingAddressFamily: ipv4
 | 
					#outgoingAddressFamily: ipv4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Amount of characters that can be used when writing notes (maximum: 8192, minimum: 1)
 | 
					# Amount of characters that can be used when writing notes (maximum: 100000, minimum: 1)
 | 
				
			||||||
maxNoteLength: 3000
 | 
					maxNoteLength: 3000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Proxy for HTTP/HTTPS
 | 
					# Proxy for HTTP/HTTPS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -242,7 +242,7 @@ id: 'aidx'
 | 
				
			||||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
					# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
				
			||||||
#outgoingAddressFamily: ipv4
 | 
					#outgoingAddressFamily: ipv4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Amount of characters that can be used when writing notes (maximum: 8192, minimum: 1)
 | 
					# Amount of characters that can be used when writing notes (maximum: 100000, minimum: 1)
 | 
				
			||||||
maxNoteLength: 3000
 | 
					maxNoteLength: 3000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Proxy for HTTP/HTTPS
 | 
					# Proxy for HTTP/HTTPS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -251,7 +251,7 @@ id: 'aidx'
 | 
				
			||||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
					# IP address family used for outgoing request (ipv4, ipv6 or dual)
 | 
				
			||||||
#outgoingAddressFamily: ipv4
 | 
					#outgoingAddressFamily: ipv4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Amount of characters that can be used when writing notes (maximum: 8192, minimum: 1)
 | 
					# Amount of characters that can be used when writing notes (maximum: 100000, minimum: 1)
 | 
				
			||||||
maxNoteLength: 3000
 | 
					maxNoteLength: 3000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Proxy for HTTP/HTTPS
 | 
					# Proxy for HTTP/HTTPS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
 | 
				
			||||||
 | 
					 * SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class IncreaseCharacterLimits1727998351561 {
 | 
				
			||||||
 | 
						name = 'IncreaseCharacterLimits1727998351561'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						async up(queryRunner) {
 | 
				
			||||||
 | 
							await queryRunner.query(`ALTER TABLE "drive_file" ALTER COLUMN "comment" TYPE varchar(100000)`);
 | 
				
			||||||
 | 
							await queryRunner.query(`ALTER TABLE "note" ALTER COLUMN "cw" TYPE text`);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						async down(queryRunner) {
 | 
				
			||||||
 | 
							await queryRunner.query(`ALTER TABLE "note" ALTER COLUMN "cw" TYPE varchar(512)`);
 | 
				
			||||||
 | 
							await queryRunner.query(`ALTER TABLE "drive_file" ALTER COLUMN "comment" TYPE varchar(8192)`);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -13,15 +13,16 @@ export const USER_ACTIVE_THRESHOLD = 1000 * 60 * 60 * 24 * 3; // 3days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Maximum note text length that can be stored in DB.
 | 
					 * Maximum note text length that can be stored in DB.
 | 
				
			||||||
 | 
					 * Content Warnings are included in this limit.
 | 
				
			||||||
 * Surrogate pairs count as one
 | 
					 * Surrogate pairs count as one
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
 | 
					export const DB_MAX_NOTE_TEXT_LENGTH = 100000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Maximum image description length that can be stored in DB.
 | 
					 * Maximum image description length that can be stored in DB.
 | 
				
			||||||
 * Surrogate pairs count as one
 | 
					 * Surrogate pairs count as one
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export const DB_MAX_IMAGE_COMMENT_LENGTH = 8192;
 | 
					export const DB_MAX_IMAGE_COMMENT_LENGTH = 100000;
 | 
				
			||||||
//#endregion
 | 
					//#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ブラウザで直接表示することを許可するファイルの種類のリスト
 | 
					// ブラウザで直接表示することを許可するファイルの種類のリスト
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -351,6 +351,18 @@ export class NoteCreateService implements OnApplicationShutdown {
 | 
				
			||||||
			data.text = null;
 | 
								data.text = null;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (data.cw) {
 | 
				
			||||||
 | 
								if (data.cw.length > DB_MAX_NOTE_TEXT_LENGTH) {
 | 
				
			||||||
 | 
									data.cw = data.cw.slice(0, DB_MAX_NOTE_TEXT_LENGTH);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								data.cw = data.cw.trim();
 | 
				
			||||||
 | 
								if (data.cw === '') {
 | 
				
			||||||
 | 
									data.cw = null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								data.cw = null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let tags = data.apHashtags;
 | 
							let tags = data.apHashtags;
 | 
				
			||||||
		let emojis = data.apEmojis;
 | 
							let emojis = data.apEmojis;
 | 
				
			||||||
		let mentionedUsers = data.apMentions;
 | 
							let mentionedUsers = data.apMentions;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -371,6 +371,18 @@ export class NoteEditService implements OnApplicationShutdown {
 | 
				
			||||||
			data.text = null;
 | 
								data.text = null;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (data.cw) {
 | 
				
			||||||
 | 
								if (data.cw.length > DB_MAX_NOTE_TEXT_LENGTH) {
 | 
				
			||||||
 | 
									data.cw = data.cw.slice(0, DB_MAX_NOTE_TEXT_LENGTH);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								data.cw = data.cw.trim();
 | 
				
			||||||
 | 
								if (data.cw === '') {
 | 
				
			||||||
 | 
									data.cw = null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								data.cw = null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let tags = data.apHashtags;
 | 
							let tags = data.apHashtags;
 | 
				
			||||||
		let emojis = data.apEmojis;
 | 
							let emojis = data.apEmojis;
 | 
				
			||||||
		let mentionedUsers = data.apMentions;
 | 
							let mentionedUsers = data.apMentions;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
 | 
					import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
 | 
				
			||||||
 | 
					import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/const.js';
 | 
				
			||||||
import { id } from './util/id.js';
 | 
					import { id } from './util/id.js';
 | 
				
			||||||
import { MiUser } from './User.js';
 | 
					import { MiUser } from './User.js';
 | 
				
			||||||
import { MiDriveFolder } from './DriveFolder.js';
 | 
					import { MiDriveFolder } from './DriveFolder.js';
 | 
				
			||||||
| 
						 | 
					@ -61,7 +62,7 @@ export class MiDriveFile {
 | 
				
			||||||
	public size: number;
 | 
						public size: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Column('varchar', {
 | 
						@Column('varchar', {
 | 
				
			||||||
		length: 8192,
 | 
							length: DB_MAX_IMAGE_COMMENT_LENGTH,
 | 
				
			||||||
		nullable: true,
 | 
							nullable: true,
 | 
				
			||||||
		comment: 'The comment of the DriveFile.',
 | 
							comment: 'The comment of the DriveFile.',
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,8 +66,8 @@ export class MiNote {
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	public name: string | null;
 | 
						public name: string | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Column('varchar', {
 | 
						@Column('text', {
 | 
				
			||||||
		length: 512, nullable: true,
 | 
							nullable: true,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	public cw: string | null;
 | 
						public cw: string | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -252,7 +252,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
				
			||||||
		private noteCreateService: NoteCreateService,
 | 
							private noteCreateService: NoteCreateService,
 | 
				
			||||||
	) {
 | 
						) {
 | 
				
			||||||
		super(meta, paramDef, async (ps, me) => {
 | 
							super(meta, paramDef, async (ps, me) => {
 | 
				
			||||||
			if (ps.text && (ps.text.length > this.config.maxNoteLength)) {
 | 
								const contentLength = (ps.text?.length ?? 0) + (ps.cw?.length ?? 0);
 | 
				
			||||||
 | 
								if (contentLength > this.config.maxNoteLength) {
 | 
				
			||||||
				throw new ApiError(meta.errors.maxLength);
 | 
									throw new ApiError(meta.errors.maxLength);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,9 +297,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
				
			||||||
		private noteEditService: NoteEditService,
 | 
							private noteEditService: NoteEditService,
 | 
				
			||||||
	) {
 | 
						) {
 | 
				
			||||||
		super(meta, paramDef, async (ps, me) => {
 | 
							super(meta, paramDef, async (ps, me) => {
 | 
				
			||||||
			if (ps.text && (ps.text.length > this.config.maxNoteLength)) {
 | 
								const contentLength = (ps.text?.length ?? 0) + (ps.cw?.length ?? 0);
 | 
				
			||||||
 | 
								if (contentLength > this.config.maxNoteLength) {
 | 
				
			||||||
				throw new ApiError(meta.errors.maxLength);
 | 
									throw new ApiError(meta.errors.maxLength);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			let visibleUsers: MiUser[] = [];
 | 
								let visibleUsers: MiUser[] = [];
 | 
				
			||||||
			if (ps.visibleUserIds) {
 | 
								if (ps.visibleUserIds) {
 | 
				
			||||||
				visibleUsers = await this.usersRepository.findBy({
 | 
									visibleUsers = await this.usersRepository.findBy({
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue