public async Task SendNotification(BrowserSubscription subscription, Notification notification) { if (_vapid.PrivateKey == null) { _logger.Error("WebPush config is missing keys for accountId " + subscription.AccountId); return; } var json = JsonConvert.SerializeObject(notification); var dto = new PushSubscription(subscription.Endpoint, subscription.PublicKey, subscription.AuthenticationSecret); try { await _client.SendNotificationAsync(dto, json, _vapid); } catch (WebPushException ex) { if (ex.Message == "Subscription no longer valid") { throw new InvalidSubscriptionException( $"Subscription for {subscription.Endpoint} is no longer valid.", ex); } throw; } }
public async Task HandleAsync(IMessageContext context, StoreBrowserSubscription message) { var subscription = new BrowserSubscription { AccountId = context.Principal.GetAccountId(), AuthenticationSecret = message.AuthenticationSecret, Endpoint = message.Endpoint, PublicKey = message.PublicKey, ExpiresAtUtc = message.ExpirationTime == null ? (DateTime?)null : new DateTime(1970, 1, 1).AddMilliseconds(message.ExpirationTime.Value) }; await _notificationsRepository.Save(subscription); }
public async Task Save(BrowserSubscription message) { var existing = await _unitOfWork.FirstOrDefaultAsync <BrowserSubscription>(new { message.Endpoint, message.AccountId }); if (existing != null) { existing.PublicKey = message.PublicKey; existing.AuthenticationSecret = message.AuthenticationSecret; existing.ExpiresAtUtc = message.ExpiresAtUtc; await _unitOfWork.UpdateAsync(existing); } else { await _unitOfWork.InsertAsync(message); } }
public async Task Delete(BrowserSubscription subscription) { await _unitOfWork.DeleteAsync(subscription); }