Server push subscription registrations working

This commit is contained in:
Fergal Moran
2018-03-21 20:36:09 +00:00
parent 0fda21912f
commit 58d915a0e0
29 changed files with 556 additions and 93 deletions

View File

@@ -0,0 +1,44 @@
using System.Threading.Tasks;
using Lib.Net.Http.WebPush;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using PodNoms.Api.Services.Push;
using PodNoms.Api.Services.Push.Models;
namespace PodNoms.Api.Controllers {
[Authorize]
[Route("[controller]")]
public class WebPushController : Controller {
private readonly IPushSubscriptionStore _subscriptionStore;
public readonly IPushNotificationService _notificationService;
public WebPushController(IPushSubscriptionStore subscriptionStore, IPushNotificationService notificationService) {
this._subscriptionStore = subscriptionStore;
this._notificationService = notificationService;
}
[HttpPost("subscribe")]
public async Task<IActionResult> StoreSubscription([FromBody]PushSubscription subscription) {
await _subscriptionStore.StoreSubscriptionAsync(subscription);
return NoContent();
}
// POST push-notifications-api/notifications
[HttpPost("notifications")]
public async Task<IActionResult> SendNotification([FromBody]PushMessageViewModel message) {
PushMessage pushMessage = new PushMessage(message.Notification) {
Topic = message.Topic,
Urgency = message.Urgency
};
// TODO: This should be scheduled in background
await _subscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) => {
// Fire-and-forget
_notificationService.SendNotificationAsync(subscription, pushMessage);
});
return NoContent();
}
}
}