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()); }
public async Task UpdateSubscription(PushDeviceSubscription subscription) { await _commands.UpdateAsync( _NoDbProjectId, subscription.Key.ToString(), subscription ).ConfigureAwait(false); }
public async Task CreateSubscription(PushDeviceSubscription subscription) { using (var db = _contextFactory.CreateContext()) { db.PushSubscriptions.Add(subscription); int rowsAffected = await db.SaveChangesAsync().ConfigureAwait(false); } }
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); } }