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