private async Task GetSubscriptions() { try { IGraphServiceSubscriptionsCollectionPage subscriptionCollectionPage = await this.Client.Subscriptions.Request().GetAsync().ConfigureAwait(false); IGraphServiceSubscriptionsCollectionRequest subscriptionsNextpageRequest = subscriptionCollectionPage.NextPageRequest; foreach (Subscription subscription in subscriptionCollectionPage.CurrentPage) { this.TeamsSubscriptions.TryAdd(subscription.Id, subscription); } while (subscriptionsNextpageRequest != null) { IGraphServiceSubscriptionsCollectionPage subscriptionsNextPage = await subscriptionsNextpageRequest.GetAsync().ConfigureAwait(false); subscriptionsNextpageRequest = subscriptionsNextPage.NextPageRequest; foreach (Subscription subscription in subscriptionsNextPage.CurrentPage) { this.TeamsSubscriptions.TryAdd(subscription.Id, subscription); } } await this.RenewSubscriptions().ConfigureAwait(false); } catch (Exception ex) { Console.WriteLine($"Exception while getting exisiting subscriptions: {ex}"); } }
private static string GetSubscriptionToUpdate(string notificationUrl, IGraphServiceSubscriptionsCollectionPage subscriptions) { foreach (var subscription in subscriptions) { if (subscription.NotificationUrl == notificationUrl) { return(subscription.Id); } } return(null); }
public async Task <ActionResult> GetSubscriptions() { try { var startDateTime = DateTime.Now; var token = string.Empty; if (Request.Headers.ContainsKey("Authorization")) { token = Request.Headers["Authorization"].ToString()?.Split(" ")?[1]; } _graphService = _graphServiceProvider.GetService(token); IGraphServiceSubscriptionsCollectionPage subscriptions = await _graphService.GetListSubscriptionsAsync(); var sdkQueryBuilder = new StringBuilder(); var restQueryBuilder = new StringBuilder(); sdkQueryBuilder.Append("graphClient.Subscriptions.Request().GetAsync()"); restQueryBuilder.Append($"<a href=\"https://developer.microsoft.com/en-us/graph/graph-explorer?request=subscriptions&&method=GET&version={_graphService.GraphUrlVersion}&GraphUrl=https://graph.microsoft.com\" target=\"_blank\">https://graph.microsoft.com/{_graphService.GraphUrlVersion}/subscriptions</a>"); var subscriptionResultModels = subscriptions?.ToList()?.Select(sa => new SubscriptionResultModel { Id = sa.Id, Resource = sa.Resource, ExpirationDateTime = sa.ExpirationDateTime, ClientState = sa.ClientState, NotificationUrl = sa.NotificationUrl }) ?? Enumerable.Empty <SubscriptionResultModel>(); // Save queries to session var resultQueries = new ResultQueriesViewModel(sdkQueryBuilder.ToString(), restQueryBuilder.ToString()); SubscriptionResponse subscriptionResponse = new SubscriptionResponse(subscriptionResultModels, resultQueries); Debug.WriteLine($"SubscriptionController GetSubscriptions execution time: {DateTime.Now - startDateTime}"); return(Ok(subscriptionResponse)); } catch (Exception exception) { return(BadRequest(exception.Message)); } }
private async Task <Subscription> CreateSubscriptionWithResource(string resource) { if (string.IsNullOrEmpty(resource)) { return(null); } var graphServiceClient = GetGraphClient(); if (Subscriptions.Any(s => s.Value.Resource == resource)) { return(null); } IGraphServiceSubscriptionsCollectionPage existingSubscriptions = null; try { existingSubscriptions = await graphServiceClient .Subscriptions .Request(). GetAsync(); } catch (Exception ex) { _logger.LogError(ex, $"CreateNewSubscription-ExistingSubscriptions-Failed: {resource}"); return(null); } var notificationUrl = _config["BaseUrl"] + "/api/notifications"; var existingSubscription = existingSubscriptions.FirstOrDefault(s => s.Resource == resource); if (existingSubscription != null && existingSubscription.NotificationUrl != notificationUrl) { _logger.LogWarning($"CreateNewSubscription-ExistingSubscriptionFound: {resource}"); DeleteSubscription(existingSubscription); existingSubscription = null; } if (existingSubscription == null) { var sub = new Subscription { Resource = resource, ChangeType = "created", NotificationUrl = notificationUrl, ClientState = Guid.NewGuid().ToString(), ExpirationDateTime = DateTime.UtcNow + new TimeSpan(days: 0, hours: 0, minutes: 10, seconds: 0), IncludeProperties = false, LifecycleNotificationUrl = _config["BaseUrl"] + "/api/webhookLifecyle", AdditionalData = new Dictionary <string, object>() { ["includeResourceData"] = true, ["encryptionCertificate"] = _config["SelfSignedCert"], ["encryptionCertificateId"] = "readchannelmessage", } }; try { existingSubscription = await graphServiceClient .Subscriptions .Request() .AddAsync(sub); } catch (Exception ex) { _logger.LogError(ex, $"CreateNewSubscription-Failed: {resource}"); return(null); } } Subscriptions[existingSubscription.Id] = existingSubscription; _logger.LogWarning($"Subscription Created for TeamId: {resource}"); return(existingSubscription); }
private async Task <Subscription> CreateSubscriptionWithResource(string resource) { if (string.IsNullOrEmpty(resource)) { return(null); } var graphServiceClient = GetGraphClient(); if (Subscriptions.Any(s => s.Value.Resource == resource && s.Value.ExpirationDateTime < DateTime.UtcNow)) { return(null); } IGraphServiceSubscriptionsCollectionPage existingSubscriptions = null; try { existingSubscriptions = await graphServiceClient .Subscriptions .Request(). GetAsync(); } catch (Exception ex) { _logger.LogError(ex, $"CreateNewSubscription-ExistingSubscriptions-Failed: {resource}"); return(null); } var notificationUrl = _config["BaseUrl"] + "/api/notifications"; var existingSubscription = existingSubscriptions.FirstOrDefault(s => s.Resource == resource); if (existingSubscription != null && existingSubscription.NotificationUrl != notificationUrl) { _logger.LogWarning($"CreateNewSubscription-ExistingSubscriptionFound: {resource}"); await DeleteSubscription(existingSubscription); existingSubscription = null; } if (existingSubscription == null) { var sub = new Subscription { Resource = resource, ChangeType = "updated", NotificationUrl = notificationUrl, ClientState = "ClientState", ExpirationDateTime = DateTime.UtcNow + new TimeSpan(days: 0, hours: 0, minutes: SubscriptionExpirationTimeInMinutes, seconds: 0), LatestSupportedTlsVersion = "v1_2", }; try { existingSubscription = await graphServiceClient .Subscriptions .Request() .AddAsync(sub); } catch (Exception ex) { _logger.LogError(ex, $"CreateNewSubscription-Failed: {resource}"); return(null); } } Subscriptions[existingSubscription.Id] = existingSubscription; _logger.LogWarning($"Subscription Created for TeamId: {resource}"); return(existingSubscription); }