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" |   no-users: "No users" | ||||||
| 
 | 
 | ||||||
| desktop/views/pages/user/user.header.vue: | 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. " |   is-remote: "This user is a remote user, so the information is not accurate. " | ||||||
|   view-remote: "See accurate information" |   view-remote: "See accurate information" | ||||||
| 
 | 
 | ||||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | ||||||
|   overview: "Overview" |   overview: "Overview" | ||||||
|   timeline: "Timeline" |   timeline: "Timeline" | ||||||
|   media: "Media" |   media: "Media" | ||||||
|  |   is-suspended: "This account has been suspended." | ||||||
|   is-remote: "This user is a remote user, so the information is not accurate. " |   is-remote: "This user is a remote user, so the information is not accurate. " | ||||||
|   view-remote: "See accurate information" |   view-remote: "See accurate information" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue: | ||||||
|   no-users: "Pas d'utilisateurs" |   no-users: "Pas d'utilisateurs" | ||||||
| 
 | 
 | ||||||
| desktop/views/pages/user/user.header.vue: | 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 " |   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" |   view-remote: "Voir les informations détaillées" | ||||||
| 
 | 
 | ||||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | ||||||
|   overview: "Aperçu" |   overview: "Aperçu" | ||||||
|   timeline: "Fil d'actualité" |   timeline: "Fil d'actualité" | ||||||
|   media: "Media" |   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 " |   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" |   view-remote: "Voir les informations détaillées" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue: | ||||||
|   no-users: "よく話すユーザーはいません" |   no-users: "よく話すユーザーはいません" | ||||||
| 
 | 
 | ||||||
| desktop/views/pages/user/user.header.vue: | desktop/views/pages/user/user.header.vue: | ||||||
|  |   is-suspended: "このユーザーは凍結されています。" | ||||||
|   is-remote: "このユーザーはリモートユーザーです。" |   is-remote: "このユーザーはリモートユーザーです。" | ||||||
|   view-remote: "正確な情報を見る" |   view-remote: "正確な情報を見る" | ||||||
| 
 | 
 | ||||||
|  | @ -594,6 +595,7 @@ mobile/views/pages/user.vue: | ||||||
|   overview: "概要" |   overview: "概要" | ||||||
|   timeline: "タイムライン" |   timeline: "タイムライン" | ||||||
|   media: "メディア" |   media: "メディア" | ||||||
|  |   is-suspended: "このユーザーは凍結されています。" | ||||||
|   is-remote: "このユーザーはリモートユーザーです。" |   is-remote: "このユーザーはリモートユーザーです。" | ||||||
|   view-remote: "正確な情報を見る" |   view-remote: "正確な情報を見る" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| <template> | <template> | ||||||
| <div class="header" :data-is-dark-background="user.bannerUrl != null"> | <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="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-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> | 		<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 | 	background #f7f7f7 | ||||||
| 	box-shadow 0 1px 1px rgba(0, 0, 0, 0.075) | 	box-shadow 0 1px 1px rgba(0, 0, 0, 0.075) | ||||||
| 
 | 
 | ||||||
|  | 	> .is-suspended | ||||||
| 	> .is-remote | 	> .is-remote | ||||||
| 		padding 16px | 		padding 16px | ||||||
| 		color #573c08 | 
 | ||||||
| 		background #fff0db | 		&.is-suspended | ||||||
|  | 			color #570808 | ||||||
|  | 			background #ffdbdb | ||||||
|  | 
 | ||||||
|  | 		&.is-remote | ||||||
|  | 			color #573c08 | ||||||
|  | 			background #fff0db | ||||||
| 
 | 
 | ||||||
| 		> p | 		> p | ||||||
| 			margin 0 auto | 			margin 0 auto | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| <mk-ui> | <mk-ui> | ||||||
| 	<span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span> | 	<span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span> | ||||||
| 	<main v-if="!fetching"> | 	<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> | 		<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> | 		<header> | ||||||
| 			<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''"></div> | 			<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' | @import '~const.styl' | ||||||
| 
 | 
 | ||||||
| main | main | ||||||
|  | 	> .is-suspended | ||||||
| 	> .is-remote | 	> .is-remote | ||||||
| 		padding 16px | 		padding 16px | ||||||
| 		color #573c08 | 
 | ||||||
| 		background #fff0db | 		&.is-suspended | ||||||
|  | 			color #570808 | ||||||
|  | 			background #ffdbdb | ||||||
|  | 
 | ||||||
|  | 		&.is-remote | ||||||
|  | 			color #573c08 | ||||||
|  | 			background #fff0db | ||||||
| 
 | 
 | ||||||
| 		> p | 		> p | ||||||
| 			margin 0 auto | 			margin 0 auto | ||||||
|  |  | ||||||
|  | @ -11,6 +11,11 @@ const log = debug('misskey:activitypub'); | ||||||
|  * Imageを作成します。 |  * Imageを作成します。 | ||||||
|  */ |  */ | ||||||
| export async function createImage(actor: IRemoteUser, value): Promise<IDriveFile> { | export async function createImage(actor: IRemoteUser, value): Promise<IDriveFile> { | ||||||
|  | 	// 投稿者が凍結されていたらスキップ
 | ||||||
|  | 	if (actor.isSuspended) { | ||||||
|  | 		return null; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	const image = await new Resolver().resolve(value); | 	const image = await new Resolver().resolve(value); | ||||||
| 
 | 
 | ||||||
| 	if (image.url == null) { | 	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; | 	const actor = await resolvePerson(note.attributedTo) as IRemoteUser; | ||||||
| 
 | 
 | ||||||
|  | 	// 投稿者が凍結されていたらスキップ
 | ||||||
|  | 	if (actor.isSuspended) { | ||||||
|  | 		return null; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	//#region Visibility
 | 	//#region Visibility
 | ||||||
| 	let visibility = 'public'; | 	let visibility = 'public'; | ||||||
| 	if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted'; | 	if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted'; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue