Skip to content

Commit 3519d5d

Browse files
authored
Merge pull request #26 from microsoftgraph/feature/sdk-payload-support
Feature/sdk payload support
2 parents 1767d92 + 21d3425 commit 3519d5d

File tree

8 files changed

+20
-147
lines changed

8 files changed

+20
-147
lines changed

src/GraphWebhooks-Core/Controllers/NotificationController.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
using System;
77
using System.Collections.Generic;
8-
using Newtonsoft.Json;
98
using System.Threading.Tasks;
109
using Microsoft.AspNetCore.Authorization;
1110
using Microsoft.AspNetCore.Mvc;
@@ -21,6 +20,8 @@
2120
using Microsoft.Extensions.Options;
2221
using System.IO;
2322
using GraphWebhooks_Core.Infrastructure;
23+
using System.Text.Json;
24+
using System.Text.Json.Serialization;
2425

2526
namespace GraphWebhooks_Core.Controllers
2627
{
@@ -78,11 +79,15 @@ public async Task<IActionResult> Listen([FromQuery]string validationToken = null
7879
{
7980
// Parse the received notifications.
8081
var plainNotifications = new Dictionary<string, ChangeNotification>();
81-
using var inputStream = new StreamReader(Request.Body);
82-
var collection = JsonConvert.DeserializeObject<NotificationCollection>(await inputStream.ReadToEndAsync());
82+
var options = new JsonSerializerOptions
83+
{
84+
PropertyNameCaseInsensitive = true
85+
};
86+
options.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase));
87+
var collection = await JsonSerializer.DeserializeAsync<ChangeNotificationCollection>(Request.Body, options);
8388
foreach (var notification in collection.Value.Where(x => x.EncryptedContent == null))
8489
{
85-
SubscriptionStore subscription = subscriptionStore.GetSubscriptionInfo(notification.SubscriptionId);
90+
SubscriptionStore subscription = subscriptionStore.GetSubscriptionInfo(notification.SubscriptionId.Value);
8691

8792
// Verify the current client state matches the one that was sent.
8893
if (notification.ClientState == subscription.ClientState)
@@ -151,7 +156,7 @@ private async Task GetChangedMessagesAsync(IEnumerable<ChangeNotification> notif
151156
List<NotificationViewModel> notificationsToDisplay = new List<NotificationViewModel>();
152157
foreach (var notification in notifications)
153158
{
154-
SubscriptionStore subscription = subscriptionStore.GetSubscriptionInfo(notification.SubscriptionId);
159+
SubscriptionStore subscription = subscriptionStore.GetSubscriptionInfo(notification.SubscriptionId.Value);
155160

156161
// Set the claims for ObjectIdentifier and TenantId, and
157162
// use the above claims for the current HttpContext

src/GraphWebhooks-Core/Controllers/SubscriptionController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ private async Task<Subscription> CreateSubscription(string userId, string tenant
118118
// This sample temporarily stores the subscription data, but production apps will likely use some method of persistent storage.
119119
// This sample stores the client state to validate the subscription, the tenant ID to reuse tokens, and the user ID to filter
120120
// messages to display by user.
121-
subscriptionStore.SaveSubscriptionInfo(newSubscription.Id,
121+
subscriptionStore.SaveSubscriptionInfo(Guid.Parse(newSubscription.Id),
122122
newSubscription.ClientState,
123123
userId,
124124
tenantId);

src/GraphWebhooks-Core/GraphWebhooks-Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="3.1.3" />
3333
<PackageReference Include="Microsoft.AspNetCore.SignalR.Core" Version="1.1.0" />
3434
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.3" />
35-
<PackageReference Include="Microsoft.Graph.Beta" Version="0.14.0-preview" />
35+
<PackageReference Include="Microsoft.Graph.Beta" Version="0.17.0-preview" />
3636
<PackageReference Include="Microsoft.Identity.Web" Version="0.1.0-preview" />
3737
<PackageReference Include="Microsoft.Identity.Web.UI" Version="0.1.0-preview" />
3838
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />

src/GraphWebhooks-Core/Helpers/Interfaces/ISubscriptionStore.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
* See LICENSE in the source repository root for complete license information.
44
*/
55

6+
using System;
7+
68
namespace GraphWebhooks_Core.Helpers.Interfaces
79
{
810
public interface ISubscriptionStore
911
{
10-
void SaveSubscriptionInfo(string subscriptionId, string clientState, string userId, string tenantId);
12+
void SaveSubscriptionInfo(Guid subscriptionId, string clientState, string userId, string tenantId);
1113

12-
SubscriptionStore GetSubscriptionInfo(string subscriptionId);
14+
SubscriptionStore GetSubscriptionInfo(Guid subscriptionId);
1315
}
1416
}

src/GraphWebhooks-Core/Helpers/SubscriptionStore.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class SubscriptionStore : ISubscriptionStore
1313
{
1414
private readonly IMemoryCache memoryCache;
1515

16-
public string SubscriptionId { get; set; }
16+
public Guid SubscriptionId { get; set; }
1717
public string ClientState { get; set; }
1818
public string UserId { get; set; }
1919
public string TenantId { get; set; }
@@ -24,7 +24,7 @@ public SubscriptionStore(IMemoryCache memoryCache)
2424
this.memoryCache = memoryCache;
2525
}
2626

27-
private SubscriptionStore(string subscriptionId, Tuple<string, string, string> parameters)
27+
private SubscriptionStore(Guid subscriptionId, Tuple<string, string, string> parameters)
2828
{
2929
SubscriptionId = subscriptionId;
3030
ClientState = parameters.Item1;
@@ -36,14 +36,14 @@ private SubscriptionStore(string subscriptionId, Tuple<string, string, string> p
3636
// This info is required so the NotificationController can validate the subscription, retrieve an access token from the cache, and filter
3737
// the messages this sample displays to the user.
3838
// Production apps typically use some method of persistent storage.
39-
public void SaveSubscriptionInfo(string subscriptionId, string clientState, string userId, string tenantId)
39+
public void SaveSubscriptionInfo(Guid subscriptionId, string clientState, string userId, string tenantId)
4040
{
4141
memoryCache.Set("subscriptionId_" + subscriptionId,
4242
Tuple.Create(clientState, userId, tenantId),
4343
new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(24)));
4444
}
4545

46-
public SubscriptionStore GetSubscriptionInfo(string subscriptionId)
46+
public SubscriptionStore GetSubscriptionInfo(Guid subscriptionId)
4747
{
4848
Tuple<string, string, string> subscriptionParams = memoryCache.Get("subscriptionId_" + subscriptionId) as Tuple<string, string, string>;
4949
return new SubscriptionStore(subscriptionId, subscriptionParams);

src/GraphWebhooks-Core/Models/ChangeNotification.cs

Lines changed: 0 additions & 68 deletions
This file was deleted.

src/GraphWebhooks-Core/Models/EncryptedContent.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/GraphWebhooks-Core/Models/NotificationCollection.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)