[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…
Reference in a new issue