[Server] Introduce admin stream channel
This commit is contained in:
		| @@ -2,6 +2,7 @@ import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; | |||||||
| import define from '../../define'; | import define from '../../define'; | ||||||
| import User from '../../../../models/user'; | import User from '../../../../models/user'; | ||||||
| import AbuseUserReport from '../../../../models/abuse-user-report'; | import AbuseUserReport from '../../../../models/abuse-user-report'; | ||||||
|  | import { publishAdminStream } from '../../../../stream'; | ||||||
|  |  | ||||||
| export const meta = { | export const meta = { | ||||||
| 	desc: { | 	desc: { | ||||||
| @@ -47,12 +48,31 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { | |||||||
| 		return rej('cannot report admin'); | 		return rej('cannot report admin'); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	await AbuseUserReport.insert({ | 	const report = await AbuseUserReport.insert({ | ||||||
| 		createdAt: new Date(), | 		createdAt: new Date(), | ||||||
| 		userId: user._id, | 		userId: user._id, | ||||||
| 		reporterId: me._id, | 		reporterId: me._id, | ||||||
| 		comment: ps.comment | 		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(); | 	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 drive from './drive'; | ||||||
| import hashtag from './hashtag'; | import hashtag from './hashtag'; | ||||||
| import apLog from './ap-log'; | import apLog from './ap-log'; | ||||||
|  | import admin from './admin'; | ||||||
| import gamesReversi from './games/reversi'; | import gamesReversi from './games/reversi'; | ||||||
| import gamesReversiGame from './games/reversi-game'; | import gamesReversiGame from './games/reversi-game'; | ||||||
|  |  | ||||||
| @@ -28,6 +29,7 @@ export default { | |||||||
| 	drive, | 	drive, | ||||||
| 	hashtag, | 	hashtag, | ||||||
| 	apLog, | 	apLog, | ||||||
|  | 	admin, | ||||||
| 	gamesReversi, | 	gamesReversi, | ||||||
| 	gamesReversiGame | 	gamesReversiGame | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -87,6 +87,10 @@ class Publisher { | |||||||
| 	public publishApLogStream = (log: any): void => { | 	public publishApLogStream = (log: any): void => { | ||||||
| 		this.publish('apLog', null, log); | 		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(); | const publisher = new Publisher(); | ||||||
| @@ -107,3 +111,4 @@ export const publishHybridTimelineStream = publisher.publishHybridTimelineStream | |||||||
| export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream; | export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream; | ||||||
| export const publishHashtagStream = publisher.publishHashtagStream; | export const publishHashtagStream = publisher.publishHashtagStream; | ||||||
| export const publishApLogStream = publisher.publishApLogStream; | export const publishApLogStream = publisher.publishApLogStream; | ||||||
|  | export const publishAdminStream = publisher.publishAdminStream; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo