|
|
|
@ -7,6 +7,8 @@
|
|
|
|
|
const mongoose = require('mongoose');
|
|
|
|
|
|
|
|
|
|
const UserSubscription = mongoose.model('UserSubscription');
|
|
|
|
|
const UserNotification = mongoose.model('UserSubscription');
|
|
|
|
|
|
|
|
|
|
const KaleidoscopeEvent = mongoose.model('KaleidoscopeEvent');
|
|
|
|
|
|
|
|
|
|
const slug = require('slug');
|
|
|
|
@ -20,6 +22,25 @@ class HiveService extends SiteService {
|
|
|
|
|
super(dtp, module.exports);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async start ( ) {
|
|
|
|
|
const { oauth2: oauth2Service } = this.dtp.services;
|
|
|
|
|
|
|
|
|
|
this.eventHandlers = {
|
|
|
|
|
onOAuth2RemoveClient: this.onOAuth2RemoveClient.bind(this),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
oauth2Service.on(oauth2Service.getEventName('client.remove'), this.eventHandlers.onOAuth2RemoveClient);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async stop ( ) {
|
|
|
|
|
const { oauth2: oauth2Service } = this.dtp.services;
|
|
|
|
|
|
|
|
|
|
oauth2Service.off(oauth2Service.getEventName('client.remove'), this.eventHandlers.onOAuth2RemoveClient);
|
|
|
|
|
delete this.eventHandlers.onOAuth2RemoveClient;
|
|
|
|
|
|
|
|
|
|
delete this.eventHandlers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async subscribe (user, client, emitterId) {
|
|
|
|
|
await UserSubscription.updateOne(
|
|
|
|
|
{ user: user._id },
|
|
|
|
@ -277,6 +298,27 @@ class HiveService extends SiteService {
|
|
|
|
|
.lean();
|
|
|
|
|
return { events, totalEventCount };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* OAuth2 event handlers
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This event fires when an OAuth2Client is being disconnected and removed by a
|
|
|
|
|
* Core, or a client app is being removed from a Service Node. The Hive service
|
|
|
|
|
* will remove all KaleidoscopeEvent records created on behalf of the client.
|
|
|
|
|
* @param {OAuth2Client} client the client being removed
|
|
|
|
|
*/
|
|
|
|
|
async onOAuth2RemoveClient (client) {
|
|
|
|
|
this.log.alert('removing KaleidoscopeEvent records from OAuth2Client', { clientId: client._id, domain: client.site.domain });
|
|
|
|
|
await KaleidoscopeEvent
|
|
|
|
|
.find({ 'source.client': client._id })
|
|
|
|
|
.cursor()
|
|
|
|
|
.eachAsync(async (event) => {
|
|
|
|
|
await UserNotification.deleteMany({ event: event._id });
|
|
|
|
|
await KaleidoscopeEvent.deleteOne({ _id: event._id });
|
|
|
|
|
}, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|