[Server] Introduce admin stream channel
This commit is contained in:
		
							parent
							
								
									b836528b51
								
							
						
					
					
						commit
						d906d90010
					
				
					 4 changed files with 44 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -2,6 +2,7 @@ import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id';
 | 
			
		|||
import define from '../../define';
 | 
			
		||||
import User from '../../../../models/user';
 | 
			
		||||
import AbuseUserReport from '../../../../models/abuse-user-report';
 | 
			
		||||
import { publishAdminStream } from '../../../../stream';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	desc: {
 | 
			
		||||
| 
						 | 
				
			
			@ -47,12 +48,31 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
 | 
			
		|||
		return rej('cannot report admin');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await AbuseUserReport.insert({
 | 
			
		||||
	const report = await AbuseUserReport.insert({
 | 
			
		||||
		createdAt: new Date(),
 | 
			
		||||
		userId: user._id,
 | 
			
		||||
		reporterId: me._id,
 | 
			
		||||
		comment: ps.comment
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	// Publish event to moderators
 | 
			
		||||
	setTimeout(async () => {
 | 
			
		||||
		const moderators = await User.find({
 | 
			
		||||
			$or: [{
 | 
			
		||||
				isAdmin: true
 | 
			
		||||
			}, {
 | 
			
		||||
				isModerator: true
 | 
			
		||||
			}]
 | 
			
		||||
		});
 | 
			
		||||
		for (const moderator of moderators) {
 | 
			
		||||
			publishAdminStream(moderator._id, 'newAbuseUserReport', {
 | 
			
		||||
				id: report._id,
 | 
			
		||||
				userId: report.userId,
 | 
			
		||||
				reporterId: report.reporterId,
 | 
			
		||||
				comment: report.comment
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}, 1);
 | 
			
		||||
 | 
			
		||||
	res();
 | 
			
		||||
}));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								src/server/api/stream/channels/admin.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/server/api/stream/channels/admin.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
import autobind from 'autobind-decorator';
 | 
			
		||||
import Channel from '../channel';
 | 
			
		||||
 | 
			
		||||
export default class extends Channel {
 | 
			
		||||
	public readonly chName = 'admin';
 | 
			
		||||
	public static shouldShare = true;
 | 
			
		||||
	public static requireCredential = true;
 | 
			
		||||
 | 
			
		||||
	@autobind
 | 
			
		||||
	public async init(params: any) {
 | 
			
		||||
		// Subscribe admin stream
 | 
			
		||||
		this.subscriber.on(`adminStream:${this.user._id}`, data => {
 | 
			
		||||
			this.send(data);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ import messagingIndex from './messaging-index';
 | 
			
		|||
import drive from './drive';
 | 
			
		||||
import hashtag from './hashtag';
 | 
			
		||||
import apLog from './ap-log';
 | 
			
		||||
import admin from './admin';
 | 
			
		||||
import gamesReversi from './games/reversi';
 | 
			
		||||
import gamesReversiGame from './games/reversi-game';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +29,7 @@ export default {
 | 
			
		|||
	drive,
 | 
			
		||||
	hashtag,
 | 
			
		||||
	apLog,
 | 
			
		||||
	admin,
 | 
			
		||||
	gamesReversi,
 | 
			
		||||
	gamesReversiGame
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,6 +87,10 @@ class Publisher {
 | 
			
		|||
	public publishApLogStream = (log: any): void => {
 | 
			
		||||
		this.publish('apLog', null, log);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public publishAdminStream = (userId: ID, type: string, value?: any): void => {
 | 
			
		||||
		this.publish(`adminStream:${userId}`, type, typeof value === 'undefined' ? null : value);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const publisher = new Publisher();
 | 
			
		||||
| 
						 | 
				
			
			@ -107,3 +111,4 @@ export const publishHybridTimelineStream = publisher.publishHybridTimelineStream
 | 
			
		|||
export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream;
 | 
			
		||||
export const publishHashtagStream = publisher.publishHashtagStream;
 | 
			
		||||
export const publishApLogStream = publisher.publishApLogStream;
 | 
			
		||||
export const publishAdminStream = publisher.publishAdminStream;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue