Adding muting and deletion of subcriptions
This commit is contained in:
BIN
push_server
BIN
push_server
Binary file not shown.
@@ -14,4 +14,7 @@ export class Subscription {
|
|||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
keys_auth: string;
|
keys_auth: string;
|
||||||
|
|
||||||
|
@Column({ type: 'boolean', default: false })
|
||||||
|
muted: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
32
src/db.ts
32
src/db.ts
@@ -41,7 +41,37 @@ class DBService {
|
|||||||
subscription.endpoint = endpoint;
|
subscription.endpoint = endpoint;
|
||||||
subscription.keys_auth = keys_auth;
|
subscription.keys_auth = keys_auth;
|
||||||
subscription.keys_p256dh = keys_p256dh;
|
subscription.keys_p256dh = keys_p256dh;
|
||||||
return await this.dataSource.manager.save(subscription);
|
return await this.dataSource.manager.save(Subscription, subscription);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async muteSubscription(endpoint: string, state: boolean): Promise<boolean> {
|
||||||
|
let result = false;
|
||||||
|
if (this.isReady) {
|
||||||
|
let result = await this.dataSource.manager.findOne(Subscription, { where: { endpoint: endpoint } });
|
||||||
|
result.muted = state;
|
||||||
|
await this.dataSource.manager.save(Subscription, result);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log(__filename, "Database not ready.")
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async removeSubscription(endpoint: string): Promise<boolean> {
|
||||||
|
let result = null;
|
||||||
|
if (this.isReady) {
|
||||||
|
let subscription = await this.dataSource.manager.findOne(Subscription, { where: { endpoint: endpoint } });
|
||||||
|
await this.dataSource.manager.save(Subscription, subscription);
|
||||||
|
result = true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log(__filename, "Database not ready.")
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,16 @@ export class NotificationService {
|
|||||||
private subscriptionService: SubscriptionService = SubscriptionService.getInstance();
|
private subscriptionService: SubscriptionService = SubscriptionService.getInstance();
|
||||||
private vapidService: VapidService = VapidService.getInstance();
|
private vapidService: VapidService = VapidService.getInstance();
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private generateSalt(length = 16): Buffer {
|
private generateSalt(length = 16): Buffer {
|
||||||
return crypto.randomBytes(length);
|
return crypto.randomBytes(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async broadcast(message: Message): Promise<void> {
|
async broadcast(message: Message): Promise<void> {
|
||||||
const subscriptions = await this.subscriptionService.fetchSubscriptions();
|
const subscriptions = await this.subscriptionService.fetchSubscriptions();
|
||||||
|
|
||||||
@@ -32,10 +35,12 @@ export class NotificationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async sendNotification(subscription: Subscription, message: Message) {
|
async sendNotification(subscription: Subscription, message: Message) {
|
||||||
await this.pushToEndpoint(subscription, message);
|
await this.pushToEndpoint(subscription, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async pushToEndpoint(subscription: Subscription, message: Message): Promise<void> {
|
private async pushToEndpoint(subscription: Subscription, message: Message): Promise<void> {
|
||||||
const payload = JSON.stringify(message);
|
const payload = JSON.stringify(message);
|
||||||
|
|
||||||
@@ -77,6 +82,7 @@ export class NotificationService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private encrypt(publicKey: string, auth: string, payload: string): Buffer {
|
private encrypt(publicKey: string, auth: string, payload: string): Buffer {
|
||||||
http_ece.keys = {
|
http_ece.keys = {
|
||||||
'p256dh': publicKey,
|
'p256dh': publicKey,
|
||||||
|
|||||||
@@ -34,6 +34,16 @@ class SubscriptionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async muteSubscription(endpoint: string, state: boolean): Promise<void> {
|
||||||
|
await this.dbService.muteSubscription(endpoint, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async removeSubscription(endpoint: string): Promise<void> {
|
||||||
|
await this.dbService.removeSubscription(endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async fetchSubscriptions(): Promise<Subscription[]> {
|
async fetchSubscriptions(): Promise<Subscription[]> {
|
||||||
return this.dbService.getSubscriptions();
|
return this.dbService.getSubscriptions();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user