特定インスタンスからのフォローを全解除できるように
This commit is contained in:
		
							parent
							
								
									15cac10d7b
								
							
						
					
					
						commit
						e43c9c0e21
					
				
					 3 changed files with 58 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -39,6 +39,10 @@
 | 
			
		|||
				<ui-input :value="instance.latestRequestReceivedAt" type="text" readonly>
 | 
			
		||||
					<span>{{ $t('latest-request-received-at') }}</span>
 | 
			
		||||
				</ui-input>
 | 
			
		||||
				<section>
 | 
			
		||||
					<ui-button @click="removeAllFollowing()">{{ $t('remove-all-following') }}</ui-button>
 | 
			
		||||
					<ui-info warn>{{ $t('remove-all-following-info', { host: instance.host }) }}</ui-info>
 | 
			
		||||
				</section>
 | 
			
		||||
			</div>
 | 
			
		||||
		</section>
 | 
			
		||||
	</ui-card>
 | 
			
		||||
| 
						 | 
				
			
			@ -138,6 +142,17 @@ export default Vue.extend({
 | 
			
		|||
			}).then(instances => {
 | 
			
		||||
				this.instances = instances;
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		removeAllFollowing() {
 | 
			
		||||
			this.$root.api('admin/federation/remove-all-following', {
 | 
			
		||||
				host: this.instance.host
 | 
			
		||||
			}).then(() => {
 | 
			
		||||
				this.$root.dialog({
 | 
			
		||||
					type: 'success',
 | 
			
		||||
					splash: true
 | 
			
		||||
				});
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import $ from 'cafy';
 | 
			
		||||
import define from '../../../define';
 | 
			
		||||
import Instance from '../../../../../models/instance';
 | 
			
		||||
import Following from '../../../../../models/following';
 | 
			
		||||
import User from '../../../../../models/user';
 | 
			
		||||
import deleteFollowing from '../../../../../services/following/delete';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	requireCredential: true,
 | 
			
		||||
	requireModerator: true,
 | 
			
		||||
 | 
			
		||||
	params: {
 | 
			
		||||
		host: {
 | 
			
		||||
			validator: $.str
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
 | 
			
		||||
	const instance = await Instance
 | 
			
		||||
		.findOne({ host: ps.host });
 | 
			
		||||
 | 
			
		||||
	if (instance == null) {
 | 
			
		||||
		return rej('instance not found');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const followings = await Following.find({
 | 
			
		||||
		'_follower.host': { $ne: null }
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	const pairs = await Promise.all(followings.map(f => Promise.all([
 | 
			
		||||
		User.findOne({ _id: f.followerId }),
 | 
			
		||||
		User.findOne({ _id: f.followeeId })
 | 
			
		||||
	])));
 | 
			
		||||
 | 
			
		||||
	for (const pair of pairs) {
 | 
			
		||||
		deleteFollowing(pair[0], pair[1]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	res();
 | 
			
		||||
}));
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue