Implement suspend account
This commit is contained in:
		
							parent
							
								
									38b9ed3f27
								
							
						
					
					
						commit
						bd207b5012
					
				
					 8 changed files with 54 additions and 4 deletions
				
			
		
							
								
								
									
										18
									
								
								cli/suspend.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								cli/suspend.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| const mongo = require('mongodb'); | ||||
| const User = require('../built/models/user').default; | ||||
| 
 | ||||
| const args = process.argv.slice(2); | ||||
| 
 | ||||
| const userId = new mongo.ObjectID(args[0]); | ||||
| 
 | ||||
| console.log(`Suspending ${userId}...`); | ||||
| 
 | ||||
| User.update({ _id: userId }, { | ||||
| 	$set: { | ||||
| 		isSuspended: true | ||||
| 	} | ||||
| }).then(() => { | ||||
| 	console.log(`Suspended ${userId}`); | ||||
| }, e => { | ||||
| 	console.error(e); | ||||
| }); | ||||
|  | @ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue: | |||
|   no-users: "No users" | ||||
| 
 | ||||
| desktop/views/pages/user/user.header.vue: | ||||
|   is-suspended: "This account has been suspended." | ||||
|   is-remote: "This user is a remote user, so the information is not accurate. " | ||||
|   view-remote: "See accurate information" | ||||
| 
 | ||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | |||
|   overview: "Overview" | ||||
|   timeline: "Timeline" | ||||
|   media: "Media" | ||||
|   is-suspended: "This account has been suspended." | ||||
|   is-remote: "This user is a remote user, so the information is not accurate. " | ||||
|   view-remote: "See accurate information" | ||||
| 
 | ||||
|  |  | |||
|  | @ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue: | |||
|   no-users: "Pas d'utilisateurs" | ||||
| 
 | ||||
| desktop/views/pages/user/user.header.vue: | ||||
|   is-suspended: "This account has been suspended." | ||||
|   is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées " | ||||
|   view-remote: "Voir les informations détaillées" | ||||
| 
 | ||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | |||
|   overview: "Aperçu" | ||||
|   timeline: "Fil d'actualité" | ||||
|   media: "Media" | ||||
|   is-suspended: "This account has been suspended." | ||||
|   is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées " | ||||
|   view-remote: "Voir les informations détaillées" | ||||
| 
 | ||||
|  |  | |||
|  | @ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue: | |||
|   no-users: "よく話すユーザーはいません" | ||||
| 
 | ||||
| desktop/views/pages/user/user.header.vue: | ||||
|   is-suspended: "このユーザーは凍結されています。" | ||||
|   is-remote: "このユーザーはリモートユーザーです。" | ||||
|   view-remote: "正確な情報を見る" | ||||
| 
 | ||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | |||
|   overview: "概要" | ||||
|   timeline: "タイムライン" | ||||
|   media: "メディア" | ||||
|   is-suspended: "このユーザーは凍結されています。" | ||||
|   is-remote: "このユーザーはリモートユーザーです。" | ||||
|   view-remote: "正確な情報を見る" | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| <template> | ||||
| <div class="header" :data-is-dark-background="user.bannerUrl != null"> | ||||
| 	<div class="is-suspended" v-if="user.isSuspended"><p>%fa:exclamation-triangle% %i18n:@is-suspended%</p></div> | ||||
| 	<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div> | ||||
| 	<div class="banner-container" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''"> | ||||
| 		<div class="banner" ref="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''" @click="onBannerClick"></div> | ||||
|  | @ -73,10 +74,17 @@ export default Vue.extend({ | |||
| 	background #f7f7f7 | ||||
| 	box-shadow 0 1px 1px rgba(0, 0, 0, 0.075) | ||||
| 
 | ||||
| 	> .is-suspended | ||||
| 	> .is-remote | ||||
| 		padding 16px | ||||
| 		color #573c08 | ||||
| 		background #fff0db | ||||
| 
 | ||||
| 		&.is-suspended | ||||
| 			color #570808 | ||||
| 			background #ffdbdb | ||||
| 
 | ||||
| 		&.is-remote | ||||
| 			color #573c08 | ||||
| 			background #fff0db | ||||
| 
 | ||||
| 		> p | ||||
| 			margin 0 auto | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| <mk-ui> | ||||
| 	<span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span> | ||||
| 	<main v-if="!fetching"> | ||||
| 		<div class="is-suspended" v-if="user.isSuspended"><p>%fa:exclamation-triangle% %i18n:@is-suspended%</p></div> | ||||
| 		<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div> | ||||
| 		<header> | ||||
| 			<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''"></div> | ||||
|  | @ -110,10 +111,17 @@ export default Vue.extend({ | |||
| @import '~const.styl' | ||||
| 
 | ||||
| main | ||||
| 	> .is-suspended | ||||
| 	> .is-remote | ||||
| 		padding 16px | ||||
| 		color #573c08 | ||||
| 		background #fff0db | ||||
| 
 | ||||
| 		&.is-suspended | ||||
| 			color #570808 | ||||
| 			background #ffdbdb | ||||
| 
 | ||||
| 		&.is-remote | ||||
| 			color #573c08 | ||||
| 			background #fff0db | ||||
| 
 | ||||
| 		> p | ||||
| 			margin 0 auto | ||||
|  |  | |||
|  | @ -11,6 +11,11 @@ const log = debug('misskey:activitypub'); | |||
|  * Imageを作成します。 | ||||
|  */ | ||||
| export async function createImage(actor: IRemoteUser, value): Promise<IDriveFile> { | ||||
| 	// 投稿者が凍結されていたらスキップ
 | ||||
| 	if (actor.isSuspended) { | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	const image = await new Resolver().resolve(value); | ||||
| 
 | ||||
| 	if (image.url == null) { | ||||
|  |  | |||
|  | @ -58,6 +58,11 @@ export async function createNote(value: any, resolver?: Resolver, silent = false | |||
| 	// 投稿者をフェッチ
 | ||||
| 	const actor = await resolvePerson(note.attributedTo) as IRemoteUser; | ||||
| 
 | ||||
| 	// 投稿者が凍結されていたらスキップ
 | ||||
| 	if (actor.isSuspended) { | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	//#region Visibility
 | ||||
| 	let visibility = 'public'; | ||||
| 	if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted'; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue