예제 #1
0
        internal Task UpgradeToRevocableSessionAsync(Task toAwait, CancellationToken cancellationToken)
        {
            string sessionToken = SessionToken;

            return(toAwait.OnSuccess(_ => {
                return AVSession.UpgradeToRevocableSessionAsync(sessionToken, cancellationToken);
            }).Unwrap().OnSuccess(t => {
                return SetSessionTokenAsync(t.Result);
            }).Unwrap());
        }
예제 #2
0
        internal static Task <string> UpgradeToRevocableSessionAsync(string sessionToken, CancellationToken cancellationToken)
        {
            if (sessionToken == null || SessionController.IsRevocableSessionToken(sessionToken))
            {
                return(Task <string> .FromResult(sessionToken));
            }

            return(SessionController.UpgradeToRevocableSessionAsync(sessionToken, cancellationToken).OnSuccess(t =>
            {
                AVSession session = AVObject.FromState <AVSession>(t.Result, "_Session");
                return session.SessionToken;
            }));
        }
예제 #3
0
        internal Task LogOutAsync(Task toAwait, CancellationToken cancellationToken)
        {
            string oldSessionToken = SessionToken;

            if (oldSessionToken == null)
            {
                return(Task.FromResult(0));
            }

            // Cleanup in-memory session.
            MutateState(mutableClone => {
                mutableClone.ServerData.Remove("sessionToken");
            });
            var revokeSessionTask = AVSession.RevokeAsync(oldSessionToken, cancellationToken);

            return(Task.WhenAll(revokeSessionTask, CurrentUserController.LogOutAsync(cancellationToken)));
        }
예제 #4
0
        /// <summary>
        /// Gets the current <see cref="AVSession"/> object related to the current user.
        /// </summary>
        /// <param name="cancellationToken">The cancellation token</param>
        public static Task <AVSession> GetCurrentSessionAsync(CancellationToken cancellationToken)
        {
            return(AVUser.GetCurrentUserAsync().OnSuccess(t1 => {
                AVUser user = t1.Result;
                if (user == null)
                {
                    return Task <AVSession> .FromResult((AVSession)null);
                }

                string sessionToken = user.SessionToken;
                if (sessionToken == null)
                {
                    return Task <AVSession> .FromResult((AVSession)null);
                }

                return SessionController.GetSessionAsync(sessionToken, cancellationToken).OnSuccess(t => {
                    AVSession session = (AVSession)AVObject.CreateWithoutData <AVSession>(null);
                    session.HandleFetchResult(t.Result);
                    return session;
                });
            }).Unwrap());
        }
예제 #5
0
        /// <summary>
        /// Gets the current <see cref="AVSession"/> object related to the current user.
        /// </summary>
        /// <param name="cancellationToken">The cancellation token</param>
        public static Task <AVSession> GetCurrentSessionAsync(CancellationToken cancellationToken)
        {
            return(AVUser.GetCurrentUserAsync().OnSuccess(t1 =>
            {
                AVUser user = t1.Result;
                if (user == null)
                {
                    return Task <AVSession> .FromResult((AVSession)null);
                }

                string sessionToken = user.SessionToken;
                if (sessionToken == null)
                {
                    return Task <AVSession> .FromResult((AVSession)null);
                }

                return SessionController.GetSessionAsync(sessionToken, cancellationToken).OnSuccess(t =>
                {
                    AVSession session = AVObject.FromState <AVSession>(t.Result, "_Session");
                    return session;
                });
            }).Unwrap());
        }