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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 5
0
		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));
		}
Exemplo n.º 7
0
 /// <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);
 }
Exemplo n.º 10
0
 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");
 }
Exemplo n.º 11
0
 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);
        }