parent
							
								
									165d272552
								
							
						
					
					
						commit
						9ea7d75aa4
					
				
					 4 changed files with 82 additions and 10 deletions
				
			
		|  | @ -14,6 +14,7 @@ | ||||||
| - インスタンスプロフィールレンダリング ready | - インスタンスプロフィールレンダリング ready | ||||||
| - 通知のリアクションアイコンをホバーで拡大できるように | - 通知のリアクションアイコンをホバーで拡大できるように | ||||||
| - 返信の際にメンションを含めるように | - 返信の際にメンションを含めるように | ||||||
|  | - 通報があったときに管理者へEメールで通知されるように | ||||||
| - メールアドレスのバリデーションを強化 | - メールアドレスのバリデーションを強化 | ||||||
| 
 | 
 | ||||||
| ### Bugfixes | ### Bugfixes | ||||||
|  |  | ||||||
|  | @ -59,6 +59,7 @@ | ||||||
| 		"@types/redis": "2.8.32", | 		"@types/redis": "2.8.32", | ||||||
| 		"@types/rename": "1.0.4", | 		"@types/rename": "1.0.4", | ||||||
| 		"@types/request-stats": "3.0.0", | 		"@types/request-stats": "3.0.0", | ||||||
|  | 		"@types/sanitize-html": "2.5.0", | ||||||
| 		"@types/seedrandom": "2.4.28", | 		"@types/seedrandom": "2.4.28", | ||||||
| 		"@types/sharp": "0.29.3", | 		"@types/sharp": "0.29.3", | ||||||
| 		"@types/sinonjs__fake-timers": "6.0.4", | 		"@types/sinonjs__fake-timers": "6.0.4", | ||||||
|  | @ -163,6 +164,7 @@ | ||||||
| 		"require-all": "3.0.0", | 		"require-all": "3.0.0", | ||||||
| 		"rndstr": "1.0.0", | 		"rndstr": "1.0.0", | ||||||
| 		"s-age": "1.1.2", | 		"s-age": "1.1.2", | ||||||
|  | 		"sanitize-html": "2.5.3", | ||||||
| 		"seedrandom": "3.0.5", | 		"seedrandom": "3.0.5", | ||||||
| 		"sharp": "0.29.2", | 		"sharp": "0.29.2", | ||||||
| 		"speakeasy": "2.0.0", | 		"speakeasy": "2.0.0", | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| import $ from 'cafy'; | import $ from 'cafy'; | ||||||
|  | import * as sanitizeHtml from 'sanitize-html'; | ||||||
| import { ID } from '@/misc/cafy-id'; | import { ID } from '@/misc/cafy-id'; | ||||||
| import define from '../../define'; | import define from '../../define'; | ||||||
| import { publishAdminStream } from '@/services/stream'; | import { publishAdminStream } from '@/services/stream'; | ||||||
|  | @ -6,6 +7,8 @@ import { ApiError } from '../../error'; | ||||||
| import { getUser } from '../../common/getters'; | import { getUser } from '../../common/getters'; | ||||||
| import { AbuseUserReports, Users } from '@/models/index'; | import { AbuseUserReports, Users } from '@/models/index'; | ||||||
| import { genId } from '@/misc/gen-id'; | import { genId } from '@/misc/gen-id'; | ||||||
|  | import { sendEmail } from '@/services/send-email'; | ||||||
|  | import { fetchMeta } from '@/misc/fetch-meta'; | ||||||
| 
 | 
 | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['users'], | 	tags: ['users'], | ||||||
|  | @ -26,23 +29,24 @@ export const meta = { | ||||||
| 		noSuchUser: { | 		noSuchUser: { | ||||||
| 			message: 'No such user.', | 			message: 'No such user.', | ||||||
| 			code: 'NO_SUCH_USER', | 			code: 'NO_SUCH_USER', | ||||||
| 			id: '1acefcb5-0959-43fd-9685-b48305736cb5' | 			id: '1acefcb5-0959-43fd-9685-b48305736cb5', | ||||||
| 		}, | 		}, | ||||||
| 
 | 
 | ||||||
| 		cannotReportYourself: { | 		cannotReportYourself: { | ||||||
| 			message: 'Cannot report yourself.', | 			message: 'Cannot report yourself.', | ||||||
| 			code: 'CANNOT_REPORT_YOURSELF', | 			code: 'CANNOT_REPORT_YOURSELF', | ||||||
| 			id: '1e13149e-b1e8-43cf-902e-c01dbfcb202f' | 			id: '1e13149e-b1e8-43cf-902e-c01dbfcb202f', | ||||||
| 		}, | 		}, | ||||||
| 
 | 
 | ||||||
| 		cannotReportAdmin: { | 		cannotReportAdmin: { | ||||||
| 			message: 'Cannot report the admin.', | 			message: 'Cannot report the admin.', | ||||||
| 			code: 'CANNOT_REPORT_THE_ADMIN', | 			code: 'CANNOT_REPORT_THE_ADMIN', | ||||||
| 			id: '35e166f5-05fb-4f87-a2d5-adb42676d48f' | 			id: '35e166f5-05fb-4f87-a2d5-adb42676d48f', | ||||||
| 		} | 		}, | ||||||
| 	} | 	}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | // eslint-disable-next-line import/no-default-export
 | ||||||
| export default define(meta, async (ps, me) => { | export default define(meta, async (ps, me) => { | ||||||
| 	// Lookup user
 | 	// Lookup user
 | ||||||
| 	const user = await getUser(ps.userId).catch(e => { | 	const user = await getUser(ps.userId).catch(e => { | ||||||
|  | @ -72,10 +76,10 @@ export default define(meta, async (ps, me) => { | ||||||
| 	setTimeout(async () => { | 	setTimeout(async () => { | ||||||
| 		const moderators = await Users.find({ | 		const moderators = await Users.find({ | ||||||
| 			where: [{ | 			where: [{ | ||||||
| 				isAdmin: true | 				isAdmin: true, | ||||||
| 			}, { | 			}, { | ||||||
| 				isModerator: true | 				isModerator: true, | ||||||
| 			}] | 			}], | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		for (const moderator of moderators) { | 		for (const moderator of moderators) { | ||||||
|  | @ -83,8 +87,15 @@ export default define(meta, async (ps, me) => { | ||||||
| 				id: report.id, | 				id: report.id, | ||||||
| 				targetUserId: report.targetUserId, | 				targetUserId: report.targetUserId, | ||||||
| 				reporterId: report.reporterId, | 				reporterId: report.reporterId, | ||||||
| 				comment: report.comment | 				comment: report.comment, | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		const meta = await fetchMeta(); | ||||||
|  | 		if (meta.email) { | ||||||
|  | 			sendEmail(meta.email, 'New abuse report', | ||||||
|  | 				sanitizeHtml(ps.comment), | ||||||
|  | 				sanitizeHtml(ps.comment)); | ||||||
|  | 		} | ||||||
| 	}, 1); | 	}, 1); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -769,6 +769,13 @@ | ||||||
|   resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.4.tgz#55e93e7054027f1ad4b4ebc1e60e59eb091e2d32" |   resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.4.tgz#55e93e7054027f1ad4b4ebc1e60e59eb091e2d32" | ||||||
|   integrity sha512-J3Ol++HCC7/hwZhanDvggFYU/GtxHxE/e7cGRWxR04BF7Tt3TqJZ84BkzQgDxmX0uu8IagiyfmfoUlBACh2Ilg== |   integrity sha512-J3Ol++HCC7/hwZhanDvggFYU/GtxHxE/e7cGRWxR04BF7Tt3TqJZ84BkzQgDxmX0uu8IagiyfmfoUlBACh2Ilg== | ||||||
| 
 | 
 | ||||||
|  | "@types/sanitize-html@2.5.0": | ||||||
|  |   version "2.5.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.5.0.tgz#bfef58fbcf2674b20ffcc23c3506faa68c3a13e3" | ||||||
|  |   integrity sha512-PeFIEZsO9m1+ACJlXUaimgrR+5DEDiIXhz7Hso307jmq5Yz0lb5kDp8LiTr5dMMMliC/jNNx/qds7Zoxa4zexw== | ||||||
|  |   dependencies: | ||||||
|  |     htmlparser2 "^6.0.0" | ||||||
|  | 
 | ||||||
| "@types/seedrandom@2.4.28": | "@types/seedrandom@2.4.28": | ||||||
|   version "2.4.28" |   version "2.4.28" | ||||||
|   resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" |   resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" | ||||||
|  | @ -2631,6 +2638,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: | ||||||
|   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" |   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" | ||||||
|   integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= |   integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= | ||||||
| 
 | 
 | ||||||
|  | deepmerge@^4.2.2: | ||||||
|  |   version "4.2.2" | ||||||
|  |   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" | ||||||
|  |   integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== | ||||||
|  | 
 | ||||||
| defer-to-connect@^2.0.0: | defer-to-connect@^2.0.0: | ||||||
|   version "2.0.0" |   version "2.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" |   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" | ||||||
|  | @ -2831,7 +2843,7 @@ domutils@^1.5.1: | ||||||
|     dom-serializer "0" |     dom-serializer "0" | ||||||
|     domelementtype "1" |     domelementtype "1" | ||||||
| 
 | 
 | ||||||
| domutils@^2.6.0: | domutils@^2.5.2, domutils@^2.6.0: | ||||||
|   version "2.8.0" |   version "2.8.0" | ||||||
|   resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" |   resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" | ||||||
|   integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== |   integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== | ||||||
|  | @ -3889,6 +3901,16 @@ htmlparser2@^3.9.1: | ||||||
|     inherits "^2.0.1" |     inherits "^2.0.1" | ||||||
|     readable-stream "^3.1.1" |     readable-stream "^3.1.1" | ||||||
| 
 | 
 | ||||||
|  | htmlparser2@^6.0.0: | ||||||
|  |   version "6.1.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" | ||||||
|  |   integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== | ||||||
|  |   dependencies: | ||||||
|  |     domelementtype "^2.0.1" | ||||||
|  |     domhandler "^4.0.0" | ||||||
|  |     domutils "^2.5.2" | ||||||
|  |     entities "^2.0.0" | ||||||
|  | 
 | ||||||
| http-assert@^1.3.0: | http-assert@^1.3.0: | ||||||
|   version "1.4.1" |   version "1.4.1" | ||||||
|   resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" |   resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" | ||||||
|  | @ -4358,6 +4380,11 @@ is-plain-obj@^2.1.0: | ||||||
|   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" |   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" | ||||||
|   integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== |   integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== | ||||||
| 
 | 
 | ||||||
|  | is-plain-object@^5.0.0: | ||||||
|  |   version "5.0.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" | ||||||
|  |   integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== | ||||||
|  | 
 | ||||||
| is-potential-custom-element-name@^1.0.1: | is-potential-custom-element-name@^1.0.1: | ||||||
|   version "1.0.1" |   version "1.0.1" | ||||||
|   resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" |   resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" | ||||||
|  | @ -5471,6 +5498,11 @@ nanoid@^3.1.23: | ||||||
|   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" |   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" | ||||||
|   integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== |   integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== | ||||||
| 
 | 
 | ||||||
|  | nanoid@^3.1.30: | ||||||
|  |   version "3.1.30" | ||||||
|  |   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" | ||||||
|  |   integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== | ||||||
|  | 
 | ||||||
| napi-build-utils@^1.0.1: | napi-build-utils@^1.0.1: | ||||||
|   version "1.0.2" |   version "1.0.2" | ||||||
|   resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" |   resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" | ||||||
|  | @ -5940,6 +5972,11 @@ parse-passwd@^1.0.0: | ||||||
|   resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" |   resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" | ||||||
|   integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= |   integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= | ||||||
| 
 | 
 | ||||||
|  | parse-srcset@^1.0.2: | ||||||
|  |   version "1.0.2" | ||||||
|  |   resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" | ||||||
|  |   integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= | ||||||
|  | 
 | ||||||
| parse5-htmlparser2-tree-adapter@^6.0.0: | parse5-htmlparser2-tree-adapter@^6.0.0: | ||||||
|   version "6.0.1" |   version "6.0.1" | ||||||
|   resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" |   resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" | ||||||
|  | @ -6371,6 +6408,15 @@ postcss@^8.2.15: | ||||||
|     nanoid "^3.1.23" |     nanoid "^3.1.23" | ||||||
|     source-map-js "^0.6.2" |     source-map-js "^0.6.2" | ||||||
| 
 | 
 | ||||||
|  | postcss@^8.3.11: | ||||||
|  |   version "8.3.11" | ||||||
|  |   resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858" | ||||||
|  |   integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA== | ||||||
|  |   dependencies: | ||||||
|  |     nanoid "^3.1.30" | ||||||
|  |     picocolors "^1.0.0" | ||||||
|  |     source-map-js "^0.6.2" | ||||||
|  | 
 | ||||||
| postgres-array@~2.0.0: | postgres-array@~2.0.0: | ||||||
|   version "2.0.0" |   version "2.0.0" | ||||||
|   resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" |   resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" | ||||||
|  | @ -7049,6 +7095,18 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: | ||||||
|   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" |   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" | ||||||
|   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== |   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== | ||||||
| 
 | 
 | ||||||
|  | sanitize-html@2.5.3: | ||||||
|  |   version "2.5.3" | ||||||
|  |   resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.5.3.tgz#91aa3dc760b072cdf92f9c6973747569b1ba1cd8" | ||||||
|  |   integrity sha512-DGATXd1fs/Rm287/i5FBKVYSBBUL0iAaztOA1/RFhEs4yqo39/X52i/q/CwsfCUG5cilmXSBmnQmyWfnKhBlOg== | ||||||
|  |   dependencies: | ||||||
|  |     deepmerge "^4.2.2" | ||||||
|  |     escape-string-regexp "^4.0.0" | ||||||
|  |     htmlparser2 "^6.0.0" | ||||||
|  |     is-plain-object "^5.0.0" | ||||||
|  |     parse-srcset "^1.0.2" | ||||||
|  |     postcss "^8.3.11" | ||||||
|  | 
 | ||||||
| sax@1.2.1: | sax@1.2.1: | ||||||
|   version "1.2.1" |   version "1.2.1" | ||||||
|   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" |   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue