[Server] Introduce admin stream channel
This commit is contained in:
		
							parent
							
								
									b836528b51
								
							
						
					
					
						commit
						d906d90010
					
				|  | @ -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(); | ||||
| })); | ||||
|  |  | |||
|  | @ -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…
	
		Reference in New Issue