-
-
Notifications
You must be signed in to change notification settings - Fork 261
/
Copy pathSessionsServiceExtensions.cs
69 lines (56 loc) · 2.77 KB
/
SessionsServiceExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Threading;
using System.Threading.Tasks;
using Parse.Abstractions.Infrastructure;
namespace Parse;
public static class SessionsServiceExtensions
{
/// <summary>
/// Constructs a <see cref="ParseQuery{ParseSession}"/> for ParseSession.
/// </summary>
public static ParseQuery<ParseSession> GetSessionQuery(this IServiceHub serviceHub)
{
return serviceHub.GetQuery<ParseSession>();
}
/// <summary>
/// Gets the current <see cref="ParseSession"/> object related to the current user.
/// </summary>
public static Task<ParseSession> GetCurrentSessionAsync(this IServiceHub serviceHub)
{
return GetCurrentSessionAsync(serviceHub, CancellationToken.None);
}
/// <summary>
/// Gets the current <see cref="ParseSession"/> object related to the current user.
/// </summary>
/// <param name="cancellationToken">The cancellation token</param>
public static async Task<ParseSession> GetCurrentSessionAsync(this IServiceHub serviceHub, CancellationToken cancellationToken)
{
var currentUser = await serviceHub.GetCurrentUserAsync().ConfigureAwait(false);
if (currentUser == null || currentUser.SessionToken == null)
{
// Return null if there is no current user or session token
return null;
}
// Fetch the session using the session token
var sessionState = await serviceHub.SessionController
.GetSessionAsync(currentUser.SessionToken, serviceHub, cancellationToken)
.ConfigureAwait(false);
// Generate and return the ParseSession object
return serviceHub.GenerateObjectFromState<ParseSession>(sessionState, "_Session");
}
public static Task RevokeSessionAsync(this IServiceHub serviceHub, string sessionToken, CancellationToken cancellationToken)
{
return sessionToken is null || !serviceHub.SessionController.IsRevocableSessionToken(sessionToken) ? Task.CompletedTask : serviceHub.SessionController.RevokeAsync(sessionToken, cancellationToken);
}
public static async Task<string> UpgradeToRevocableSessionAsync(this IServiceHub serviceHub, string sessionToken, CancellationToken cancellationToken)
{
if (sessionToken is null || serviceHub.SessionController.IsRevocableSessionToken(sessionToken))
{
return sessionToken;
}
// Perform the upgrade asynchronously
var upgradeResult = await serviceHub.SessionController.UpgradeToRevocableSessionAsync(sessionToken, serviceHub, cancellationToken).ConfigureAwait(false);
// Generate the session object from the result and return the session token
var session = serviceHub.GenerateObjectFromState<ParseSession>(upgradeResult, "_Session");
return session.SessionToken;
}
}