public SignOutMessage CreateSignoutMessage(ValidatedEndSessionRequest request) { var message = new SignOutMessage(); if (request.Client != null) { message.ClientId = request.Client.ClientId; if (request.PostLogOutUri != null) { message.ReturnUrl = request.PostLogOutUri; } else { if (request.Client.PostLogoutRedirectUris.Any()) { message.ReturnUrl = request.Client.PostLogoutRedirectUris.First(); } } if (request.State.IsPresent()) { if (message.ReturnUrl.IsPresent()) { message.ReturnUrl = message.ReturnUrl.AddQueryString("state=" + request.State); } } } return message; }
public static string GetRedirectUrl(SignOutMessage message, IDictionary<string, object> env, IdentityServerOptions options) { var result = new LogoutResult(message, env, options); var response = result.Execute(); return response.Headers.Location.AbsoluteUri; }
public LogoutResult(SignOutMessage message, IDictionary<string, object> env, IdentityServerOptions options) { if (env == null) throw new ArgumentNullException("env"); if (options == null) throw new ArgumentNullException("options"); this.env = env; this.options = options; this.message = message; }
internal static async Task<string> GetClientName(this IClientStore store, SignOutMessage signOutMessage) { if (store == null) throw new ArgumentNullException("store"); if (signOutMessage != null && signOutMessage.ClientId.IsPresent()) { var client = await store.FindClientByIdAsync(signOutMessage.ClientId); if (client != null) { return client.ClientName; } } return null; }
public async Task<Stream> LoggedOut (LoggedOutViewModel model, SignOutMessage message) { return await Render (model, "LoggedOut"); }
public Task<Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return Task.FromResult(RunTemplate("loggedout", model, message?.ClientId)); }
/// <summary> /// Loads the HTML for the logged out page informing the user that they have successfully logged out. /// </summary> /// <param name="model">The model.</param> /// <param name="message">The message.</param> /// <returns> /// Stream for the HTML /// </returns> public virtual Task<Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return Render(model, LoggedOutView); }
/// <summary> /// Creates the sign out request. /// </summary> /// <param name="env">The env.</param> /// <param name="message">The message.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">message</exception> public static string CreateSignOutRequest(this IDictionary<string, object> env, SignOutMessage message) { if (message == null) throw new ArgumentNullException("message"); // if there's no return url, then use current request's URL if (message.ReturnUrl.IsMissing()) { var ctx = new OwinContext(env); message.ReturnUrl = ctx.Request.Uri.AbsoluteUri; } if (message.ReturnUrl.StartsWith("~/")) { message.ReturnUrl = message.ReturnUrl.Substring(1); } if (message.ReturnUrl.StartsWith("/")) { message.ReturnUrl = env.GetIdentityServerBaseUrl().RemoveTrailingSlash() + message.ReturnUrl; } var options = env.ResolveDependency<IdentityServerOptions>(); var cookie = new MessageCookie<SignOutMessage>(env, options); var id = cookie.Write(message); var url = env.GetIdentityServerBaseUrl() + Constants.RoutePaths.Logout; var uri = new Uri(url.AddQueryString("id=" + id)); return uri.AbsoluteUri; }
public void LoggedOut_WithSignOutMessage_ContainsClientNameAndRedirectUrlInPage() { GetLoginPage(); var c = TestClients.Get().First(); var msg = new SignOutMessage { ClientId = c.ClientId, ReturnUrl = "http://foo" }; var id = WriteMessageToCookie(msg); var resp = PostForm(Url(Constants.RoutePaths.Logout + "?id=" + id), null); var model = resp.GetModel<LoggedOutViewModel>(); model.RedirectUrl.Should().Be(msg.ReturnUrl); model.ClientName.Should().Be(c.ClientName); }
public LogoutActionResult(IViewService viewSvc, LogoutViewModel model, SignOutMessage message) : base(async () => await viewSvc.Logout(model, message)) { if (viewSvc == null) throw new ArgumentNullException("viewSvc"); if (model == null) throw new ArgumentNullException("model"); }
public Task<Stream> Logout(LogoutViewModel model, SignOutMessage message) { return Render(model, "Logout"); }
IHttpActionResult RedirectToLogOut(string returnUrl) { var message = new SignOutMessage { ReturnUrl = returnUrl }; var env = Request.GetOwinEnvironment(); var url = env.CreateSignOutRequest(message); return Redirect(url); }