Exemplo n.º 1
0
        /// <summary>
        /// Ends the current session with the remote user.
        /// </summary>
        /// <param name="callback">Will be invoked when an EndSession response was received from the server.</param>
        public void EndCurrentSession(Action <Client, EndSessionResponse> callback)
        {
            EndSessionRequest request = new EndSessionRequest();

            AddCallback(callback, request);
            SendMessage(request);
        }
Exemplo n.º 2
0
            protected override void OnExecute(HttpContext ctx)
            {
                Module.EnsureRegistered();

                // Wait for all currently executing ASP requests to complete so we're in a clean state
                // before messing around with transactions.  Being extra careful here
                // should also prevent bleed over from any prior sessions into this one.
                using (Session.Tracker.Exclusive(WebServerLockTimeoutMS, Response.Log))
                {
                    Session.AsyncLog.CopyInto(Response.AsyncLog);
                    Session.AsyncLog = new SerializableLog();

                    // If there is currently an open session, end it before starting a new one
                    if (Session.IsActive)
                    {
                        Response.Log.Write("Ending prior session ({0})", Session.ID);
                        EndSessionRequest.EndSession(Response.Log);
                    }

                    sessionId           = Session.ID = Guid.NewGuid();
                    Session.Transaction = Transaction;
                    Response.Log.Write("Session started ({0})", sessionId);
                    Session.AsyncLog = new SerializableLog();

                    Module.PersistSessionState();

                    // Watch for when the transaction ends unexpectedly so some cleanup can occur.
                    // This event handler will run on the thread that is causing the rollback which is likely a
                    // different thread than is registering the event handler.
                    Transaction.TransactionCompleted += Transaction_TransactionCompleted;
                }
            }
Exemplo n.º 3
0
        public async Task LogoutAsync(OpenidConnectPkceSettings openidClientPkceSettings = null)
        {
            try
            {
                openidClientPkceSettings = openidClientPkceSettings ?? globalOpenidClientPkceSettings;

                var logoutCallBackUri = new Uri(new Uri(navigationManager.BaseUri), openidClientPkceSettings.LogoutCallBackPath).OriginalString;
                var state             = await SaveStateAsync(openidClientPkceSettings.OidcDiscoveryUri, openidClientPkceSettings.ClientId, logoutCallBackUri, navigationManager.Uri);

                var endSessionRequest = new EndSessionRequest
                {
                    IdTokenHint           = await(authenticationStateProvider as OidcAuthenticationStateProvider).GetIdToken(),
                    PostLogoutRedirectUri = logoutCallBackUri,
                    State = state
                };

                var nameValueCollection = endSessionRequest.ToDictionary();
                var oidcDiscovery       = await GetOidcDiscoveryAsync(openidClientPkceSettings.OidcDiscoveryUri);

                var endSessionEndpointUri = QueryHelpers.AddQueryString(oidcDiscovery.EndSessionEndpoint, nameValueCollection);
                navigationManager.NavigateTo(endSessionEndpointUri);
            }
            catch (Exception ex)
            {
                throw new SecurityException($"Failed to end session, Authority '{openidClientPkceSettings.Authority}'.", ex);
            }
        }
Exemplo n.º 4
0
 private void EndSessionRequestHandler(EndSessionRequest request)
 {
     if (clientPublicKey.ContainsKey(request.ClientName))
     {
         clientPublicKey.Remove(request.ClientName);
     }
     OnSessionEndedByTheRemoteClient();
 }
Exemplo n.º 5
0
        /// <summary>
        /// Ends the current session with the remote user.
        /// </summary>
        /// <param name="callback">Will be invoked when an EndSession response was received from the server.</param>
        public void EndCurrentSession(String clientName, Action <Client, EndSessionResponse> callback)
        {
            checkReceiver(clientName);
            EndSessionRequest request = new EndSessionRequest();

            request.ClientName = clientName;
            AddCallback(callback, request);
            SendMessage(request);
        }
Exemplo n.º 6
0
        private void ValidateEndSessionRequest(TClient client, EndSessionRequest endSessionRequest)
        {
            endSessionRequest.Validate();

            if (!endSessionRequest.PostLogoutRedirectUri.IsNullOrWhiteSpace() && !client.RedirectUris.Any(u => u.Equals(endSessionRequest.PostLogoutRedirectUri, StringComparison.InvariantCultureIgnoreCase)))
            {
                throw new OAuthRequestException($"Invalid post logout redirect uri '{endSessionRequest.PostLogoutRedirectUri}'.");
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Send an end session request to QLDB, closing all open results and transactions.
        /// </summary>
        ///
        /// <returns>The result of the end session request.</returns>
        internal virtual EndSessionResult EndSession()
        {
            var endSessionRequest = new EndSessionRequest();
            var request           = new SendCommandRequest
            {
                EndSession = endSessionRequest,
            };
            var response = this.SendCommand(request);

            return(response.EndSession);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Send an end session request to QLDB, closing all open results and transactions.
        /// </summary>
        ///
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        ///
        /// <returns>The result of the end session request.</returns>
        internal virtual async Task <EndSessionResult> EndSession(CancellationToken cancellationToken = default)
        {
            var endSessionRequest = new EndSessionRequest();
            var request           = new SendCommandRequest
            {
                EndSession = endSessionRequest,
            };
            var response = await this.SendCommand(request, cancellationToken);

            return(response.EndSession);
        }
        /// <summary>
        /// Is Valid OIDC End Session Request.
        /// </summary>
        public static void Validate(this EndSessionRequest request)
        {
            if (request == null)
            {
                new ArgumentNullException(nameof(request));
            }

            request.IdTokenHint.ValidateMaxLength(IdentityConstants.MessageLength.IdTokenMax, nameof(request.IdTokenHint), request.GetTypeName());
            request.PostLogoutRedirectUri.ValidateMaxLength(IdentityConstants.MessageLength.RedirectUriMax, nameof(request.PostLogoutRedirectUri), request.GetTypeName());
            request.State.ValidateMaxLength(IdentityConstants.MessageLength.StateMax, nameof(request.State), request.GetTypeName());
        }
Exemplo n.º 10
0
        private void EndSessionRequestHandler(EndSessionRequest request)
        {
            if (OtherSideReceiver != null)
            {
                OtherSideReceiver.SendMessage(new EndSessionRequest());
                OtherSideReceiver.Status            = StatusEnum.Validated;
                OtherSideReceiver.OtherSideReceiver = null;

                this.OtherSideReceiver = null;
                this.Status            = StatusEnum.Validated;
                this.SendMessage(new EndSessionResponse(request));
            }
        }
Exemplo n.º 11
0
        private void EndSessionRequestHandler(EndSessionRequest request)
        {
            foreach (var client in Server.Receivers.Where(x => x != this && x.ClientName == request.ClientName))
            {
                var endSessionRequest = new EndSessionRequest();
                endSessionRequest.ClientName = this.ClientName;
                client.SendMessage(endSessionRequest);
                //client.Status = StatusEnum.Validated;
                //OtherSideReceiver.OtherSideReceiver = null;

                //this.OtherSideReceiver = null;
                //this.Status = StatusEnum.Validated;
                this.SendMessage(new EndSessionResponse(request));
            }
        }
Exemplo n.º 12
0
        private static void EndSessionRequest()
        {
            var req = new EndSessionRequest();

            req.Send(r =>
            {
                if (r.HasErrors)
                {
                    Console.WriteLine("EndSessionError: {0}", r.JSONString);
                }
                else
                {
                    Console.WriteLine("EndSessionRequest Successful");
                }
            });
        }
Exemplo n.º 13
0
        /// <summary>
        /// Shutdown and call the onDone callback when the shutdown is complete.
        /// </summary>
        public void ShutDown(System.Action onDone)
        {
            if (Instances.Values.Contains(this))
            {
                Instances.Remove(Name);
            }

            if (GSPlatform == null)
            {
                // If no platform is set, then we were never initialised. We can just return here.
                return;
            }
            // we don't care about the response but to clean up properly we wait for it.
            EndSessionRequest r = new EndSessionRequest(this);

            r.Send((response) =>
            {
                if (_mainLoopTimer != null)
                {
                    _mainLoopTimer.Stop();
                    _mainLoopTimer = null;
                }

                if (_durableWriteTimer != null)
                {
                    _durableWriteTimer.Stop();
                    _durableWriteTimer = null;
                }

                _paused = true;

                Stop(true);

                if (onDone != null)
                {
                    onDone();
                }
            });

            if (Instances.ContainsKey(Name))
            {
                Instances.Remove(Name);
            }
        }
        private void EndSessionRequestHandler(EndSessionRequest request)
        {
            if (OtherSideReceiver != null)
            {
                OtherSideReceiver.SendMessage(new EndSessionRequest());
                ResetPropertiesClientInProcess(OtherSideReceiver);
                OtherSideReceiver.Status = StatusEnum.InProcess;
            }
            ResetPropertiesClient(this);
            this.SendMessage(new EndSessionResponse(request));

            UpdateTablesInProcessRequest processRequest = new UpdateTablesInProcessRequest();

            processRequest.ClientsInProcess = GetListTableInProcess(Server.Receivers);
            foreach (Receiver re in this.Server.Receivers)
            {
                if (re.Status == StatusEnum.Validated)
                {
                    re.SendMessage(processRequest);
                }
            }
        }
        /// <summary>
        /// Begin a new asynchronous EndSessionRequest
        /// </summary>
        /// <param name="requestData"></param>
        /// <returns></returns>
        public async Task <EndSessionResponse> EndSessionRequestAsync(EndSessionRequest requestData)
        {
            var res = await Requestor.PostStringAsync(Urls.AnalyticsRequest, JsonHelper.SerializeData(requestData));

            return(JsonConvert.DeserializeObject <EndSessionResponse>(res.ResponseJson));
        }
 /// <summary>
 /// Begin a new EndSessionRequest
 /// </summary>
 /// <param name="requestData"></param>
 /// <returns></returns>
 public EndSessionResponse EndSessionRequest(EndSessionRequest requestData)
 {
     return(JsonConvert.DeserializeObject <EndSessionResponse>(Requestor.PostString(Urls.EndSessionRequest, JsonHelper.SerializeData(requestData)).ResponseJson));
 }
 public EndSessionResponse(EndSessionRequest request)
     : base(request)
 {
 }