/// <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); }
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; } }
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); } }
private void EndSessionRequestHandler(EndSessionRequest request) { if (clientPublicKey.ContainsKey(request.ClientName)) { clientPublicKey.Remove(request.ClientName); } OnSessionEndedByTheRemoteClient(); }
/// <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); }
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}'."); } }
/// <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); }
/// <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()); }
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)); } }
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)); } }
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"); } }); }
/// <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) { }