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;
            }
        }
Example #2
0
 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);
 }
Example #3
0
        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);
            }
        }
Example #4
0
 public async Task Delete(BrowserSubscription subscription)
 {
     await _unitOfWork.DeleteAsync(subscription);
 }