internal static async Task <Subscription> CreateSubscription(string baseUrl, string userId = null)
        {
            var graphClient = GraphHelper.GetAuthenticatedClient(string.IsNullOrEmpty(userId) ? CurrentUserId : userId, baseUrl);

            var subscription = new Subscription
            {
                Resource           = "me/mailFolders('Inbox')/messages",
                ChangeType         = "created",
                NotificationUrl    = ConfigurationManager.AppSettings["ida:NotificationUrl"],
                ClientState        = Guid.NewGuid().ToString(),
                ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 15, 0) // shorter duration useful for testing
            };

            var newSubscription = await graphClient.Subscriptions.Request().AddAsync(subscription);

            // This sample temporarily stores the current subscription ID, client state, and user object ID.
            // This info is required so the NotificationController, which is not authenticated, can retrieve
            // an access token from the cache and validate the subscription.
            // Production apps typically use some method of persistent storage.
            var subscriptionDetails = new SubscriptionDetails(
                newSubscription.Id,
                newSubscription.ClientState,
                CurrentUserId,
                baseUrl);

            SubscriptionCache.GetSubscriptionCache().SaveSubscriptionInfo(subscriptionDetails);

            return(newSubscription);
        }
        internal static async Task <Subscription> RenewSubscription(string subscriptionId, string userId, string baseUrl)
        {
            var graphClient = GraphHelper.GetAuthenticatedClient(userId, baseUrl);

            Subscription subscription = new Subscription
            {
                ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 15, 0) // shorter duration useful for testing
            };

            return(await graphClient.Subscriptions[subscriptionId].Request().UpdateAsync(subscription));
        }
 internal static async Task DeleteSubscription(string subscriptionId, string baseUrl)
 {
     var graphClient = GraphHelper.GetAuthenticatedClient(CurrentUserId, baseUrl);
     await graphClient.Subscriptions[subscriptionId].Request().DeleteAsync();
 }
        internal static async Task <Subscription> CheckSubscription(string subscriptionId, string userId, string baseUrl)
        {
            var graphClient = GraphHelper.GetAuthenticatedClient(userId, baseUrl);

            return(await graphClient.Subscriptions[subscriptionId].Request().GetAsync());
        }