//----------------------------------------------------------------------- // // Copyright (c) Outercurve Foundation. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics.Contracts; using System.Globalization; using System.IdentityModel.Claims; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using DotNetOpenAuth.ComponentModel; using DotNetOpenAuth.InfoCard; ////using DotNetOpenAuth.InfoCard; using DotNetOpenAuth.Messaging; /// /// An ASP.NET control that provides a user-friendly way of logging into a web site using OpenID. /// [ToolboxData("<{0}:OpenIdInfoCardSelector runat=\"server\">")] public class OpenIdInfoCardSelector : OpenIdSelector { /// /// The InfoCard selector button. /// private SelectorInfoCardButton selectorButton; /// /// Occurs when an InfoCard has been submitted and decoded. /// public event EventHandler ReceivedToken; /// /// Occurs when [token processing error]. /// public event EventHandler TokenProcessingError; /// /// Ensures that the child controls have been built, but doesn't set control /// properties that require executing in order to avoid /// certain initialization order problems. /// /// /// We don't just call EnsureChildControls() and then set the property on /// this.textBox itself because (apparently) setting this property in the ASPX /// page and thus calling this EnsureID() via EnsureChildControls() this early /// results in no ID. /// protected override void EnsureChildControlsAreCreatedSafe() { if (this.selectorButton == null) { this.selectorButton = this.Buttons.OfType().FirstOrDefault(); if (this.selectorButton != null) { var selector = this.selectorButton.InfoCardSelector; selector.ClaimsRequested.Add(new ClaimType { Name = ClaimTypes.PPID }); selector.ImageSize = InfoCardImageSize.Size60x42; selector.ReceivedToken += this.InfoCardSelector_ReceivedToken; selector.TokenProcessingError += this.InfoCardSelector_TokenProcessingError; this.Controls.Add(selector); } } base.EnsureChildControlsAreCreatedSafe(); } /// /// Fires the event. /// /// The token, if it was decrypted. protected virtual void OnReceivedToken(ReceivedTokenEventArgs e) { Contract.Requires(e != null); ErrorUtilities.VerifyArgumentNotNull(e, "e"); var receivedInfoCard = this.ReceivedToken; if (receivedInfoCard != null) { receivedInfoCard(this, e); } } /// /// Raises the event. /// /// The instance containing the event data. protected virtual void OnTokenProcessingError(TokenProcessingErrorEventArgs e) { Contract.Requires(e != null); ErrorUtilities.VerifyArgumentNotNull(e, "e"); var tokenProcessingError = this.TokenProcessingError; if (tokenProcessingError != null) { tokenProcessingError(this, e); } } /// /// Handles the ReceivedToken event of the infoCardSelector control. /// /// The source of the event. /// The instance containing the event data. private void InfoCardSelector_ReceivedToken(object sender, ReceivedTokenEventArgs e) { this.Page.Response.SetCookie(new HttpCookie("openid_identifier", "infocard") { Path = this.Page.Request.ApplicationPath, }); this.OnReceivedToken(e); } /// /// Handles the TokenProcessingError event of the infoCardSelector control. /// /// The source of the event. /// The instance containing the event data. private void InfoCardSelector_TokenProcessingError(object sender, TokenProcessingErrorEventArgs e) { this.OnTokenProcessingError(e); } } }