Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / WebControls / loginstatus.cs / 1305376 / loginstatus.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System.Collections; using System.ComponentModel; using System.Drawing.Design; using System.Security.Permissions; using System.Web.Security; using System.Web.UI; ////// Displays a link or button that allows the user to login or logout of the site. /// Shows whether the user is currently logged in. /// [ Bindable(false), DefaultEvent("LoggingOut"), Designer("System.Web.UI.Design.WebControls.LoginStatusDesigner, " + AssemblyRef.SystemDesign), ] public class LoginStatus : CompositeControl { private static readonly object EventLoggingOut = new object(); private static readonly object EventLoggedOut = new object(); private LinkButton _logInLinkButton; private ImageButton _logInImageButton; private LinkButton _logOutLinkButton; private ImageButton _logOutImageButton; private bool _loggedIn; ////// Whether a user is currently logged in. /// NOTE: We should not need to save this in ControlState or ViewState. At one point, we /// were using server controls with event handlers to control logging in and logging out. /// In that scenario, we needed to save the LoggedIn boolean in ViewState to hookup the /// correct event listener on postback. Currently, we use a hyperlink for logging in and server /// controls for logging out, so we should not need to persist this property. The property is /// always set in OnPreRender, and is only used after that point in the lifecycle. /// (VSWhidbey 81266) /// private bool LoggedIn { get { return _loggedIn; } set { _loggedIn = value; } } ////// The URL of the image to be shown for the login button. /// [ WebCategory("Appearance"), DefaultValue(""), WebSysDescription(SR.LoginStatus_LoginImageUrl), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty() ] public virtual string LoginImageUrl { get { object obj = ViewState["LoginImageUrl"]; return (obj == null) ? String.Empty : (string) obj; } set { ViewState["LoginImageUrl"] = value; } } ////// The text to be shown for the login button. /// [ Localizable(true), WebCategory("Appearance"), WebSysDefaultValue(SR.LoginStatus_DefaultLoginText), WebSysDescription(SR.LoginStatus_LoginText) ] public virtual string LoginText { get { object obj = ViewState["LoginText"]; return (obj == null) ? SR.GetString(SR.LoginStatus_DefaultLoginText) : (string) obj; } set { ViewState["LoginText"] = value; } } ////// The action to perform after logging out. /// [ WebCategory("Behavior"), DefaultValue(LogoutAction.Refresh), Themeable(false), WebSysDescription(SR.LoginStatus_LogoutAction) ] public virtual LogoutAction LogoutAction { get { object obj = ViewState["LogoutAction"]; return (obj == null) ? LogoutAction.Refresh : (LogoutAction) obj; } set { if (value < LogoutAction.Refresh || value > LogoutAction.RedirectToLoginPage) { throw new ArgumentOutOfRangeException("value"); } ViewState["LogoutAction"] = value; } } ////// The URL of the image to be shown for the logout button. /// [ WebCategory("Appearance"), DefaultValue(""), WebSysDescription(SR.LoginStatus_LogoutImageUrl), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty() ] public virtual string LogoutImageUrl { get { object obj = ViewState["LogoutImageUrl"]; return (obj == null) ? String.Empty : (string) obj; } set { ViewState["LogoutImageUrl"] = value; } } ////// The URL redirected to after logging out. /// [ WebCategory("Behavior"), DefaultValue(""), WebSysDescription(SR.LoginStatus_LogoutPageUrl), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), Themeable(false), UrlProperty() ] public virtual string LogoutPageUrl { get { object obj = ViewState["LogoutPageUrl"]; return (obj == null) ? String.Empty : (string) obj; } set { ViewState["LogoutPageUrl"] = value; } } ////// The text to be shown for the logout button. /// [ Localizable(true), WebCategory("Appearance"), WebSysDefaultValue(SR.LoginStatus_DefaultLogoutText), WebSysDescription(SR.LoginStatus_LogoutText) ] public virtual string LogoutText { get { object obj = ViewState["LogoutText"]; return (obj == null) ? SR.GetString(SR.LoginStatus_DefaultLogoutText) : (string) obj; } set { ViewState["LogoutText"] = value; } } private string NavigateUrl { get { if (!DesignMode) { return FormsAuthentication.GetLoginPage(null, true); } // For the designer to render a hyperlink return "url"; } } protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.A; } } ////// Raised after the user is logged out. /// [ WebCategory("Action"), WebSysDescription(SR.LoginStatus_LoggedOut) ] public event EventHandler LoggedOut { add { Events.AddHandler(EventLoggedOut, value); } remove { Events.RemoveHandler(EventLoggedOut, value); } } ////// Raised before the user is logged out. /// [ WebCategory("Action"), WebSysDescription(SR.LoginStatus_LoggingOut) ] public event LoginCancelEventHandler LoggingOut { add { Events.AddHandler(EventLoggingOut, value); } remove { Events.RemoveHandler(EventLoggingOut, value); } } ////// Creates all the child controls that may be rendered. /// protected internal override void CreateChildControls() { Controls.Clear(); _logInLinkButton = new LinkButton(); _logInImageButton = new ImageButton(); _logOutLinkButton = new LinkButton(); _logOutImageButton = new ImageButton(); _logInLinkButton.EnableViewState = false; _logInImageButton.EnableViewState = false; _logOutLinkButton.EnableViewState = false; _logOutImageButton.EnableViewState = false; // Disable theming of child controls (VSWhidbey 86010) _logInLinkButton.EnableTheming = false; _logInImageButton.EnableTheming = false; _logInLinkButton.CausesValidation = false; _logInImageButton.CausesValidation = false; _logOutLinkButton.EnableTheming = false; _logOutImageButton.EnableTheming = false; _logOutLinkButton.CausesValidation = false; _logOutImageButton.CausesValidation = false; CommandEventHandler handler = new CommandEventHandler(LogoutClicked); _logOutLinkButton.Command += handler; _logOutImageButton.Command += handler; handler = new CommandEventHandler(LoginClicked); _logInLinkButton.Command += handler; _logInImageButton.Command += handler; Controls.Add(_logOutLinkButton); Controls.Add(_logOutImageButton); Controls.Add(_logInLinkButton); Controls.Add(_logInImageButton); } ////// Logs out and redirects the user when the logout button is clicked. /// private void LogoutClicked(object Source, CommandEventArgs e) { LoginCancelEventArgs cancelEventArgs = new LoginCancelEventArgs(); OnLoggingOut(cancelEventArgs); if (cancelEventArgs.Cancel) { return; } FormsAuthentication.SignOut(); // BugBug: revert to old behavior after SignOut. Page.Response.Clear(); Page.Response.StatusCode = 200; OnLoggedOut(EventArgs.Empty); // Redirect the user as appropriate switch (LogoutAction) { case LogoutAction.RedirectToLoginPage: // We do not want the ReturnUrl in the query string, since this is an information // disclosure. So we must use this instead of FormsAuthentication.RedirectToLoginPage(). // (VSWhidbey 438091) Page.Response.Redirect(FormsAuthentication.LoginUrl, false); break; case LogoutAction.Refresh: // If the form method is GET, then we must not include the query string, since // it will cause an infinite redirect loop. If the form method is POST (or there // is no form), then we must include the query string, since the developer could // be using the query string to drive the logic of their page. (VSWhidbey 304531) if (Page.Form != null && String.Equals(Page.Form.Method, "get", StringComparison.OrdinalIgnoreCase)) { Page.Response.Redirect(Page.Request.ClientFilePath.VirtualPathString, false); } else { Page.Response.Redirect(Page.Request.RawUrl, false); } break; case LogoutAction.Redirect: string url = LogoutPageUrl; if (!String.IsNullOrEmpty(url)) { url = ResolveClientUrl(url); } else { // Use FormsAuthentication.LoginUrl as a fallback url = FormsAuthentication.LoginUrl; } Page.Response.Redirect(url, false); break; } } private void LoginClicked(object Source, CommandEventArgs e) { Page.Response.Redirect(ResolveClientUrl(NavigateUrl), false); } ////// Raises the LoggedOut event. /// protected virtual void OnLoggedOut(EventArgs e) { EventHandler handler = (EventHandler)Events[EventLoggedOut]; if (handler != null) { handler(this, e); } } ////// Raises the LoggingOut event. /// protected virtual void OnLoggingOut(LoginCancelEventArgs e) { LoginCancelEventHandler handler = (LoginCancelEventHandler)Events[EventLoggingOut]; if (handler != null) { handler(this, e); } } ////// Determines whether a user is logged in, and gets the URL of the login page. /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Must be set in PreRender instead of Render, because Page.Request.IsAuthenticated is not // valid at design time. LoggedIn = Page.Request.IsAuthenticated; } protected internal override void Render(HtmlTextWriter writer) { RenderContents(writer); } protected internal override void RenderContents(HtmlTextWriter writer) { if (Page != null) { Page.VerifyRenderingInServerForm(this); } SetChildProperties(); if ((ID != null) && (ID.Length != 0)) { // NOTE: Adding the attribute here is somewhat hacky... we're assuming // the next tag that gets rendered is the one that needs to // have the id on it. writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID); } base.RenderContents(writer); } ////// Sets the visiblity, style, and other properties of child controls. /// private void SetChildProperties() { EnsureChildControls(); // Set all buttons to nonvisible, then later set the selected button to visible _logInLinkButton.Visible = false; _logInImageButton.Visible = false; _logOutLinkButton.Visible = false; _logOutImageButton.Visible = false; WebControl visibleControl = null; bool loggedIn = LoggedIn; if (loggedIn) { string logoutImageUrl = LogoutImageUrl; if (logoutImageUrl.Length > 0) { _logOutImageButton.AlternateText = LogoutText; _logOutImageButton.ImageUrl = logoutImageUrl; visibleControl = _logOutImageButton; } else { _logOutLinkButton.Text = LogoutText; visibleControl = _logOutLinkButton; } } else { string loginImageUrl = LoginImageUrl; if (loginImageUrl.Length > 0) { _logInImageButton.AlternateText = LoginText; _logInImageButton.ImageUrl = loginImageUrl; visibleControl = _logInImageButton; } else { _logInLinkButton.Text = LoginText; visibleControl = _logInLinkButton; } } visibleControl.CopyBaseAttributes(this); visibleControl.ApplyStyle(ControlStyle); visibleControl.Visible = true; } ////// /// Allows the designer to set the LoggedIn and NavigateUrl properties for proper rendering in the designer. /// [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] protected override void SetDesignModeState(IDictionary data) { if (data != null) { object o = data["LoggedIn"]; if (o != null) { LoggedIn = (bool)o; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Compensation.cs
- CalendarAutoFormat.cs
- CheckedListBox.cs
- CroppedBitmap.cs
- RangeBase.cs
- PolicyException.cs
- EventlogProvider.cs
- ViewStateModeByIdAttribute.cs
- DiagnosticSection.cs
- HtmlMeta.cs
- NotCondition.cs
- DataBindingExpressionBuilder.cs
- AssemblyResolver.cs
- PrimitiveSchema.cs
- SessionEndingEventArgs.cs
- XmlWriter.cs
- SqlExpressionNullability.cs
- MachineKeySection.cs
- XmlBoundElement.cs
- LayoutDump.cs
- ListViewGroupItemCollection.cs
- CodeSnippetCompileUnit.cs
- FamilyTypeface.cs
- NavigationProperty.cs
- HMACSHA384.cs
- Gdiplus.cs
- ExpandCollapsePattern.cs
- TrackingProfileDeserializationException.cs
- XdrBuilder.cs
- SHA512Managed.cs
- ListBox.cs
- Missing.cs
- FixedSOMLineCollection.cs
- ComplexTypeEmitter.cs
- RecognizeCompletedEventArgs.cs
- CodeCastExpression.cs
- XmlExtensionFunction.cs
- WebEventCodes.cs
- Command.cs
- QilXmlWriter.cs
- PresentationAppDomainManager.cs
- TrailingSpaceComparer.cs
- HiddenField.cs
- NativeRecognizer.cs
- TreeBuilder.cs
- TargetParameterCountException.cs
- ConsumerConnectionPointCollection.cs
- BitFlagsGenerator.cs
- ImageMapEventArgs.cs
- HttpHandlerAction.cs
- DeviceContext2.cs
- ItemCheckedEvent.cs
- SqlWriter.cs
- IndexOutOfRangeException.cs
- XamlFigureLengthSerializer.cs
- DPCustomTypeDescriptor.cs
- EnvironmentPermission.cs
- HttpListenerRequest.cs
- ResourceWriter.cs
- AssemblyName.cs
- BamlResourceContent.cs
- ReflectionUtil.cs
- Internal.cs
- PrintEvent.cs
- SmtpLoginAuthenticationModule.cs
- HttpCachePolicyElement.cs
- OdbcTransaction.cs
- ServiceMemoryGates.cs
- HashCryptoHandle.cs
- ObjectToken.cs
- NativeMethods.cs
- DataObjectFieldAttribute.cs
- DrawingAttributeSerializer.cs
- SafeCryptoHandles.cs
- DefaultClaimSet.cs
- SafeHandles.cs
- ItemChangedEventArgs.cs
- LogWriteRestartAreaAsyncResult.cs
- MSAAEventDispatcher.cs
- DomainUpDown.cs
- RegistryDataKey.cs
- Condition.cs
- SequenceDesigner.xaml.cs
- AggregateNode.cs
- Point3DAnimation.cs
- NullToBooleanConverter.cs
- GenerateScriptTypeAttribute.cs
- DATA_BLOB.cs
- NameTable.cs
- RsaSecurityToken.cs
- ImportStoreException.cs
- RequestCacheValidator.cs
- Control.cs
- CountdownEvent.cs
- UserControlParser.cs
- HandlerMappingMemo.cs
- UnsafeNativeMethods.cs
- OdbcParameterCollection.cs
- Validator.cs
- ArgumentException.cs