예제 #1
0
        public async Task <IActionResult> Subscription([FromBody] Lib.Net.Http.WebPush.PushSubscription subscription)
        {
            if (subscription != null && !string.IsNullOrEmpty(subscription.Endpoint))
            {
                var tenantId = _tenantIdResolver.GetTenantId();;
                var existing = await _subscriptionStore.GetSubscriptionByEndpoint(tenantId, subscription.Endpoint);

                if (existing != null)
                {
                    //the user could subscribe while not authenticated, if they are later authenticated add the userid to the subscription
                    if (string.IsNullOrEmpty(existing.UserId) && User.Identity.IsAuthenticated)
                    {
                        existing.UserId = _userIdResolver.GetCurrentUserId();
                        await _subscriptionStore.UpdateSubscription(existing);
                    }
                }
                else
                {
                    var newSub = new PushDeviceSubscription(subscription);
                    newSub.TenantId             = _tenantIdResolver.GetTenantId();
                    newSub.UserId               = _userIdResolver.GetCurrentUserId();
                    newSub.UserAgent            = Request.Headers["User-Agent"].ToString();
                    newSub.CreatedFromIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();

                    await _subscriptionStore.CreateSubscription(newSub);
                }
            }

            return(NoContent());
        }
예제 #2
0
 public async Task UpdateSubscription(PushDeviceSubscription subscription)
 {
     await _commands.UpdateAsync(
         _NoDbProjectId,
         subscription.Key.ToString(),
         subscription
         ).ConfigureAwait(false);
 }
예제 #3
0
        public async Task CreateSubscription(PushDeviceSubscription subscription)
        {
            using (var db = _contextFactory.CreateContext())
            {
                db.PushSubscriptions.Add(subscription);

                int rowsAffected = await db.SaveChangesAsync().ConfigureAwait(false);
            }
        }
예제 #4
0
        public async Task UpdateSubscription(PushDeviceSubscription subscription)
        {
            using (var db = _contextFactory.CreateContext())
            {
                bool tracking = db.ChangeTracker.Entries <PushDeviceSubscription>().Any(x => x.Entity.Key == subscription.Key);
                if (!tracking)
                {
                    db.PushSubscriptions.Update(subscription);
                }

                int rowsAffected = await db.SaveChangesAsync().ConfigureAwait(false);
            }
        }