summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs')
-rw-r--r--src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs708
1 files changed, 0 insertions, 708 deletions
diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs
deleted file mode 100644
index 335b435..0000000
--- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdTextBox.cs
+++ /dev/null
@@ -1,708 +0,0 @@
-//-----------------------------------------------------------------------
-// <copyright file="OpenIdTextBox.cs" company="Andrew Arnott">
-// Copyright (c) Andrew Arnott. All rights reserved.
-// </copyright>
-//-----------------------------------------------------------------------
-
-[assembly: System.Web.UI.WebResource(DotNetOpenAuth.OpenId.RelyingParty.OpenIdTextBox.EmbeddedLogoResourceName, "image/png")]
-
-#pragma warning disable 0809 // marking inherited, unsupported properties as obsolete to discourage their use
-
-namespace DotNetOpenAuth.OpenId.RelyingParty {
- using System;
- using System.Collections.Generic;
- using System.Collections.Specialized;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Diagnostics.CodeAnalysis;
- using System.Diagnostics.Contracts;
- using System.Drawing.Design;
- using System.Globalization;
- using System.Net;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using DotNetOpenAuth.Configuration;
- using DotNetOpenAuth.Messaging;
- using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
- using DotNetOpenAuth.OpenId.Extensions.UI;
-
- /// <summary>
- /// An ASP.NET control that provides a minimal text box that is OpenID-aware.
- /// </summary>
- /// <remarks>
- /// This control offers greater UI flexibility than the <see cref="OpenIdLogin"/>
- /// control, but requires more work to be done by the hosting web site to
- /// assemble a complete login experience.
- /// </remarks>
- [DefaultProperty("Text"), ValidationProperty("Text")]
- [ToolboxData("<{0}:OpenIdTextBox runat=\"server\" />")]
- public class OpenIdTextBox : OpenIdRelyingPartyControlBase, IEditableTextControl, ITextControl, IPostBackDataHandler {
- /// <summary>
- /// The name of the manifest stream containing the
- /// OpenID logo that is placed inside the text box.
- /// </summary>
- internal const string EmbeddedLogoResourceName = Util.DefaultNamespace + ".OpenId.RelyingParty.openid_login.png";
-
- /// <summary>
- /// Default value for <see cref="TabIndex"/> property.
- /// </summary>
- protected const short TabIndexDefault = 0;
-
- #region Property category constants
-
- /// <summary>
- /// The "Simple Registration" category for properties.
- /// </summary>
- private const string ProfileCategory = "Simple Registration";
-
- #endregion
-
- #region Property viewstate keys
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestEmail"/> property.
- /// </summary>
- private const string RequestEmailViewStateKey = "RequestEmail";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestNickname"/> property.
- /// </summary>
- private const string RequestNicknameViewStateKey = "RequestNickname";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestPostalCode"/> property.
- /// </summary>
- private const string RequestPostalCodeViewStateKey = "RequestPostalCode";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestCountry"/> property.
- /// </summary>
- private const string RequestCountryViewStateKey = "RequestCountry";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestLanguage"/> property.
- /// </summary>
- private const string RequestLanguageViewStateKey = "RequestLanguage";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestTimeZone"/> property.
- /// </summary>
- private const string RequestTimeZoneViewStateKey = "RequestTimeZone";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="EnableRequestProfile"/> property.
- /// </summary>
- private const string EnableRequestProfileViewStateKey = "EnableRequestProfile";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="PolicyUrl"/> property.
- /// </summary>
- private const string PolicyUrlViewStateKey = "PolicyUrl";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestFullName"/> property.
- /// </summary>
- private const string RequestFullNameViewStateKey = "RequestFullName";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="PresetBorder"/> property.
- /// </summary>
- private const string PresetBorderViewStateKey = "PresetBorder";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="ShowLogo"/> property.
- /// </summary>
- private const string ShowLogoViewStateKey = "ShowLogo";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestGender"/> property.
- /// </summary>
- private const string RequestGenderViewStateKey = "RequestGender";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="RequestBirthDate"/> property.
- /// </summary>
- private const string RequestBirthDateViewStateKey = "RequestBirthDate";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="CssClass"/> property.
- /// </summary>
- private const string CssClassViewStateKey = "CssClass";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="MaxLength"/> property.
- /// </summary>
- private const string MaxLengthViewStateKey = "MaxLength";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="Columns"/> property.
- /// </summary>
- private const string ColumnsViewStateKey = "Columns";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="TabIndex"/> property.
- /// </summary>
- private const string TabIndexViewStateKey = "TabIndex";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="Enabled"/> property.
- /// </summary>
- private const string EnabledViewStateKey = "Enabled";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="Name"/> property.
- /// </summary>
- private const string NameViewStateKey = "Name";
-
- /// <summary>
- /// The viewstate key to use for the <see cref="Text"/> property.
- /// </summary>
- private const string TextViewStateKey = "Text";
-
- #endregion
-
- #region Property defaults
-
- /// <summary>
- /// The default value for the <see cref="Columns"/> property.
- /// </summary>
- private const int ColumnsDefault = 40;
-
- /// <summary>
- /// The default value for the <see cref="MaxLength"/> property.
- /// </summary>
- private const int MaxLengthDefault = 40;
-
- /// <summary>
- /// The default value for the <see cref="Name"/> property.
- /// </summary>
- private const string NameDefault = "openid_identifier";
-
- /// <summary>
- /// The default value for the <see cref="EnableRequestProfile"/> property.
- /// </summary>
- private const bool EnableRequestProfileDefault = true;
-
- /// <summary>
- /// The default value for the <see cref="ShowLogo"/> property.
- /// </summary>
- private const bool ShowLogoDefault = true;
-
- /// <summary>
- /// The default value for the <see cref="PresetBorder"/> property.
- /// </summary>
- private const bool PresetBorderDefault = true;
-
- /// <summary>
- /// The default value for the <see cref="PolicyUrl"/> property.
- /// </summary>
- private const string PolicyUrlDefault = "";
-
- /// <summary>
- /// The default value for the <see cref="CssClass"/> property.
- /// </summary>
- private const string CssClassDefault = "openid";
-
- /// <summary>
- /// The default value for the <see cref="Text"/> property.
- /// </summary>
- private const string TextDefault = "";
-
- /// <summary>
- /// The default value for the <see cref="RequestEmail"/> property.
- /// </summary>
- private const DemandLevel RequestEmailDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestPostalCode"/> property.
- /// </summary>
- private const DemandLevel RequestPostalCodeDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestCountry"/> property.
- /// </summary>
- private const DemandLevel RequestCountryDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestLanguage"/> property.
- /// </summary>
- private const DemandLevel RequestLanguageDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestTimeZone"/> property.
- /// </summary>
- private const DemandLevel RequestTimeZoneDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestNickname"/> property.
- /// </summary>
- private const DemandLevel RequestNicknameDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestFullName"/> property.
- /// </summary>
- private const DemandLevel RequestFullNameDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestBirthDate"/> property.
- /// </summary>
- private const DemandLevel RequestBirthDateDefault = DemandLevel.NoRequest;
-
- /// <summary>
- /// The default value for the <see cref="RequestGender"/> property.
- /// </summary>
- private const DemandLevel RequestGenderDefault = DemandLevel.NoRequest;
-
- #endregion
-
- /// <summary>
- /// An empty sreg request, used to compare with others to see if they too are empty.
- /// </summary>
- private static readonly ClaimsRequest EmptyClaimsRequest = new ClaimsRequest();
-
- /// <summary>
- /// Initializes a new instance of the <see cref="OpenIdTextBox"/> class.
- /// </summary>
- public OpenIdTextBox() {
- }
-
- #region IEditableTextControl Members
-
- /// <summary>
- /// Occurs when the content of the text changes between posts to the server.
- /// </summary>
- public event EventHandler TextChanged;
-
- #endregion
-
- #region Properties
-
- /// <summary>
- /// Gets or sets the content of the text box.
- /// </summary>
- [Bindable(true), DefaultValue(""), Category(AppearanceCategory)]
- [Description("The content of the text box.")]
- public string Text {
- get {
- return this.Identifier != null ? this.Identifier.OriginalString : (this.ViewState[TextViewStateKey] as string ?? string.Empty);
- }
-
- set {
- // Try to store it as a validated identifier,
- // but failing that at least store the text.
- Identifier id;
- if (Identifier.TryParse(value, out id)) {
- this.Identifier = id;
- } else {
- // Be sure to set the viewstate AFTER setting the Identifier,
- // since setting the Identifier clears the viewstate in OnIdentifierChanged.
- this.Identifier = null;
- this.ViewState[TextViewStateKey] = value;
- }
- }
- }
-
- /// <summary>
- /// Gets or sets the form name to use for this input field.
- /// </summary>
- [Bindable(true), DefaultValue(NameDefault), Category(BehaviorCategory)]
- [Description("The form name of this input field.")]
- public string Name {
- get { return (string)(this.ViewState[NameViewStateKey] ?? NameDefault); }
- set { this.ViewState[NameViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets the CSS class assigned to the text box.
- /// </summary>
- [Bindable(true), DefaultValue(CssClassDefault), Category(AppearanceCategory)]
- [Description("The CSS class assigned to the text box.")]
- public string CssClass {
- get { return (string)this.ViewState[CssClassViewStateKey]; }
- set { this.ViewState[CssClassViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets a value indicating whether to show the OpenID logo in the text box.
- /// </summary>
- [Bindable(true), DefaultValue(ShowLogoDefault), Category(AppearanceCategory)]
- [Description("The visibility of the OpenID logo in the text box.")]
- public bool ShowLogo {
- get { return (bool)(this.ViewState[ShowLogoViewStateKey] ?? ShowLogoDefault); }
- set { this.ViewState[ShowLogoViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets a value indicating whether to use inline styling to force a solid gray border.
- /// </summary>
- [Bindable(true), DefaultValue(PresetBorderDefault), Category(AppearanceCategory)]
- [Description("Whether to use inline styling to force a solid gray border.")]
- public bool PresetBorder {
- get { return (bool)(this.ViewState[PresetBorderViewStateKey] ?? PresetBorderDefault); }
- set { this.ViewState[PresetBorderViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets the width of the text box in characters.
- /// </summary>
- [Bindable(true), DefaultValue(ColumnsDefault), Category(AppearanceCategory)]
- [Description("The width of the text box in characters.")]
- public int Columns {
- get { return (int)(this.ViewState[ColumnsViewStateKey] ?? ColumnsDefault); }
- set { this.ViewState[ColumnsViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets the maximum number of characters the browser should allow
- /// </summary>
- [Bindable(true), DefaultValue(MaxLengthDefault), Category(AppearanceCategory)]
- [Description("The maximum number of characters the browser should allow.")]
- public int MaxLength {
- get { return (int)(this.ViewState[MaxLengthViewStateKey] ?? MaxLengthDefault); }
- set { this.ViewState[MaxLengthViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets the tab index of the Web server control.
- /// </summary>
- /// <value></value>
- /// <returns>
- /// The tab index of the Web server control. The default is 0, which indicates that this property is not set.
- /// </returns>
- /// <exception cref="T:System.ArgumentOutOfRangeException">
- /// The specified tab index is not between -32768 and 32767.
- /// </exception>
- [Bindable(true), DefaultValue(TabIndexDefault), Category(BehaviorCategory)]
- [Description("The tab index of the text box control.")]
- public virtual short TabIndex {
- get { return (short)(this.ViewState[TabIndexViewStateKey] ?? TabIndexDefault); }
- set { this.ViewState[TabIndexViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets a value indicating whether this <see cref="OpenIdTextBox"/> is enabled
- /// in the browser for editing and will respond to incoming OpenID messages.
- /// </summary>
- /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
- [Bindable(true), DefaultValue(true), Category(BehaviorCategory)]
- [Description("Whether the control is editable in the browser and will respond to OpenID messages.")]
- public bool Enabled {
- get { return (bool)(this.ViewState[EnabledViewStateKey] ?? true); }
- set { this.ViewState[EnabledViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's nickname from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestNicknameDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's nickname from the Provider.")]
- public DemandLevel RequestNickname {
- get { return (DemandLevel)(ViewState[RequestNicknameViewStateKey] ?? RequestNicknameDefault); }
- set { ViewState[RequestNicknameViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's email address from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestEmailDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's email address from the Provider.")]
- public DemandLevel RequestEmail {
- get { return (DemandLevel)(ViewState[RequestEmailViewStateKey] ?? RequestEmailDefault); }
- set { ViewState[RequestEmailViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's full name from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestFullNameDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's full name from the Provider")]
- public DemandLevel RequestFullName {
- get { return (DemandLevel)(ViewState[RequestFullNameViewStateKey] ?? RequestFullNameDefault); }
- set { ViewState[RequestFullNameViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's birthdate from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestBirthDateDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's birthdate from the Provider.")]
- public DemandLevel RequestBirthDate {
- get { return (DemandLevel)(ViewState[RequestBirthDateViewStateKey] ?? RequestBirthDateDefault); }
- set { ViewState[RequestBirthDateViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's gender from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestGenderDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's gender from the Provider.")]
- public DemandLevel RequestGender {
- get { return (DemandLevel)(ViewState[RequestGenderViewStateKey] ?? RequestGenderDefault); }
- set { ViewState[RequestGenderViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's postal code from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestPostalCodeDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's postal code from the Provider.")]
- public DemandLevel RequestPostalCode {
- get { return (DemandLevel)(ViewState[RequestPostalCodeViewStateKey] ?? RequestPostalCodeDefault); }
- set { ViewState[RequestPostalCodeViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's country from the Provider.
- /// </summary>
- [Bindable(true)]
- [Category(ProfileCategory)]
- [DefaultValue(RequestCountryDefault)]
- [Description("Your level of interest in receiving the user's country from the Provider.")]
- public DemandLevel RequestCountry {
- get { return (DemandLevel)(ViewState[RequestCountryViewStateKey] ?? RequestCountryDefault); }
- set { ViewState[RequestCountryViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's preferred language from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestLanguageDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's preferred language from the Provider.")]
- public DemandLevel RequestLanguage {
- get { return (DemandLevel)(ViewState[RequestLanguageViewStateKey] ?? RequestLanguageDefault); }
- set { ViewState[RequestLanguageViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets your level of interest in receiving the user's time zone from the Provider.
- /// </summary>
- [Bindable(true), DefaultValue(RequestTimeZoneDefault), Category(ProfileCategory)]
- [Description("Your level of interest in receiving the user's time zone from the Provider.")]
- public DemandLevel RequestTimeZone {
- get { return (DemandLevel)(ViewState[RequestTimeZoneViewStateKey] ?? RequestTimeZoneDefault); }
- set { ViewState[RequestTimeZoneViewStateKey] = value; }
- }
-
- /// <summary>
- /// Gets or sets the URL to your privacy policy page that describes how
- /// claims will be used and/or shared.
- /// </summary>
- [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Bindable property must be simple type")]
- [Bindable(true), DefaultValue(PolicyUrlDefault), Category(ProfileCategory)]
- [Description("The URL to your privacy policy page that describes how claims will be used and/or shared.")]
- [UrlProperty, Editor("System.Web.UI.Design.UrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
- public string PolicyUrl {
- get {
- return (string)ViewState[PolicyUrlViewStateKey] ?? PolicyUrlDefault;
- }
-
- set {
- UriUtil.ValidateResolvableUrl(Page, DesignMode, value);
- ViewState[PolicyUrlViewStateKey] = value;
- }
- }
-
- /// <summary>
- /// Gets or sets a value indicating whether to use OpenID extensions
- /// to retrieve profile data of the authenticating user.
- /// </summary>
- [Bindable(true), DefaultValue(EnableRequestProfileDefault), Category(ProfileCategory)]
- [Description("Turns the entire Simple Registration extension on or off.")]
- public bool EnableRequestProfile {
- get { return (bool)(ViewState[EnableRequestProfileViewStateKey] ?? EnableRequestProfileDefault); }
- set { ViewState[EnableRequestProfileViewStateKey] = value; }
- }
-
- #endregion
-
- #region IPostBackDataHandler Members
-
- /// <summary>
- /// When implemented by a class, processes postback data for an ASP.NET server control.
- /// </summary>
- /// <param name="postDataKey">The key identifier for the control.</param>
- /// <param name="postCollection">The collection of all incoming name values.</param>
- /// <returns>
- /// true if the server control's state changes as a result of the postback; otherwise, false.
- /// </returns>
- bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection) {
- return this.LoadPostData(postDataKey, postCollection);
- }
-
- /// <summary>
- /// When implemented by a class, signals the server control to notify the ASP.NET application that the state of the control has changed.
- /// </summary>
- void IPostBackDataHandler.RaisePostDataChangedEvent() {
- this.RaisePostDataChangedEvent();
- }
-
- #endregion
-
- /// <summary>
- /// Creates the authentication requests for a given user-supplied Identifier.
- /// </summary>
- /// <param name="identifier">The identifier to create a request for.</param>
- /// <returns>
- /// A sequence of authentication requests, any one of which may be
- /// used to determine the user's control of the <see cref="IAuthenticationRequest.ClaimedIdentifier"/>.
- /// </returns>
- protected internal override IEnumerable<IAuthenticationRequest> CreateRequests(Identifier identifier) {
- ErrorUtilities.VerifyArgumentNotNull(identifier, "identifier");
-
- // We delegate all our logic to another method, since invoking base. methods
- // within an iterator method results in unverifiable code.
- return this.CreateRequestsCore(base.CreateRequests(identifier));
- }
-
- /// <summary>
- /// Checks for incoming OpenID authentication responses and fires appropriate events.
- /// </summary>
- /// <param name="e">The <see cref="T:System.EventArgs"/> object that contains the event data.</param>
- protected override void OnLoad(EventArgs e) {
- if (!this.Enabled) {
- return;
- }
-
- this.Page.RegisterRequiresPostBack(this);
- base.OnLoad(e);
- }
-
- /// <summary>
- /// Called when the <see cref="Identifier"/> property is changed.
- /// </summary>
- protected override void OnIdentifierChanged() {
- this.ViewState.Remove(TextViewStateKey);
- base.OnIdentifierChanged();
- }
-
- /// <summary>
- /// Sends server control content to a provided <see cref="T:System.Web.UI.HtmlTextWriter"/> object, which writes the content to be rendered on the client.
- /// </summary>
- /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"/> object that receives the server control content.</param>
- protected override void Render(HtmlTextWriter writer) {
- Contract.Assume(writer != null, "Missing contract.");
-
- if (this.ShowLogo) {
- string logoUrl = Page.ClientScript.GetWebResourceUrl(
- typeof(OpenIdTextBox), EmbeddedLogoResourceName);
- writer.AddStyleAttribute(
- HtmlTextWriterStyle.BackgroundImage,
- string.Format(CultureInfo.InvariantCulture, "url({0})", HttpUtility.HtmlEncode(logoUrl)));
- writer.AddStyleAttribute("background-repeat", "no-repeat");
- writer.AddStyleAttribute("background-position", "0 50%");
- writer.AddStyleAttribute(HtmlTextWriterStyle.PaddingLeft, "18px");
- }
-
- if (this.PresetBorder) {
- writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "solid");
- writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
- writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor, "lightgray");
- }
-
- if (!string.IsNullOrEmpty(this.CssClass)) {
- writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
- }
-
- writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
- writer.AddAttribute(HtmlTextWriterAttribute.Name, HttpUtility.HtmlEncode(this.Name));
- writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
- writer.AddAttribute(HtmlTextWriterAttribute.Size, this.Columns.ToString(CultureInfo.InvariantCulture));
- writer.AddAttribute(HtmlTextWriterAttribute.Value, HttpUtility.HtmlEncode(this.Text));
- writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, this.TabIndex.ToString(CultureInfo.CurrentCulture));
-
- writer.RenderBeginTag(HtmlTextWriterTag.Input);
- writer.RenderEndTag();
- }
-
- /// <summary>
- /// When implemented by a class, processes postback data for an ASP.NET server control.
- /// </summary>
- /// <param name="postDataKey">The key identifier for the control.</param>
- /// <param name="postCollection">The collection of all incoming name values.</param>
- /// <returns>
- /// true if the server control's state changes as a result of the postback; otherwise, false.
- /// </returns>
- protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
- Contract.Assume(postCollection != null, "Missing contract");
-
- // If the control was temporarily hidden, it won't be in the Form data,
- // and we'll just implicitly keep the last Text setting.
- if (postCollection[this.Name] != null) {
- this.Text = postCollection[this.Name];
- return true;
- }
-
- return false;
- }
-
- /// <summary>
- /// When implemented by a class, signals the server control to notify the ASP.NET application that the state of the control has changed.
- /// </summary>
- [SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate", Justification = "Preserve signature of interface we're implementing.")]
- protected virtual void RaisePostDataChangedEvent() {
- this.OnTextChanged();
- }
-
- /// <summary>
- /// Called on a postback when the Text property has changed.
- /// </summary>
- protected virtual void OnTextChanged() {
- EventHandler textChanged = this.TextChanged;
- if (textChanged != null) {
- textChanged(this, EventArgs.Empty);
- }
- }
-
- /// <summary>
- /// Creates the authentication requests for a given user-supplied Identifier.
- /// </summary>
- /// <param name="requests">The authentication requests to prepare.</param>
- /// <returns>
- /// A sequence of authentication requests, any one of which may be
- /// used to determine the user's control of the <see cref="IAuthenticationRequest.ClaimedIdentifier"/>.
- /// </returns>
- private IEnumerable<IAuthenticationRequest> CreateRequestsCore(IEnumerable<IAuthenticationRequest> requests) {
- Contract.Requires(requests != null);
-
- foreach (var request in requests) {
- if (this.EnableRequestProfile) {
- this.AddProfileArgs(request);
- }
-
- yield return request;
- }
- }
-
- /// <summary>
- /// Adds extensions to a given authentication request to ask the Provider
- /// for user profile data.
- /// </summary>
- /// <param name="request">The authentication request to add the extensions to.</param>
- private void AddProfileArgs(IAuthenticationRequest request) {
- Contract.Requires<ArgumentNullException>(request != null);
-
- var sreg = new ClaimsRequest() {
- Nickname = this.RequestNickname,
- Email = this.RequestEmail,
- FullName = this.RequestFullName,
- BirthDate = this.RequestBirthDate,
- Gender = this.RequestGender,
- PostalCode = this.RequestPostalCode,
- Country = this.RequestCountry,
- Language = this.RequestLanguage,
- TimeZone = this.RequestTimeZone,
- PolicyUrl = string.IsNullOrEmpty(this.PolicyUrl) ?
- null : new Uri(this.RelyingParty.Channel.GetRequestFromContext().UrlBeforeRewriting, this.Page.ResolveUrl(this.PolicyUrl)),
- };
-
- // Only actually add the extension request if fields are actually being requested.
- if (!sreg.Equals(EmptyClaimsRequest)) {
- request.AddExtension(sreg);
- }
- }
- }
-}