diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2009-10-28 07:48:02 -0700 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2009-10-28 07:48:02 -0700 |
commit | 4d010b581724b4cc3b208f926968faf0f47b2d45 (patch) | |
tree | 77d24a0195a52e8574b06e36a2843959d5dbffcc | |
parent | b7be3ad9d93effda4c40128dff2cb819f552ca90 (diff) | |
download | DotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.zip DotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.tar.gz DotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.tar.bz2 |
Renamed OpenIdButtonPanel to OpenIdSelector.
-rw-r--r-- | projecttemplates/WebFormsRelyingParty/LoginFrame.aspx | 22 | ||||
-rw-r--r-- | projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs | 10 | ||||
-rw-r--r-- | projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs | 2 | ||||
-rw-r--r-- | src/DotNetOpenAuth/DotNetOpenAuth.csproj | 7 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs | 9 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/OpenIdStrings.resx | 3 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs (renamed from src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.cs) | 50 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.css (renamed from src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.css) | 0 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.js (renamed from src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.js) | 0 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/RelyingParty/SelectorButton.cs | 49 |
10 files changed, 107 insertions, 45 deletions
diff --git a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx index 3d722d3..56e2de8 100644 --- a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx +++ b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx @@ -36,17 +36,17 @@ <p> Login with an account you already use! </p> - <rp:OpenIdButtonPanel runat="server" ID="openIdButtonPanel" OnLoggedIn="openIdButtonPanel_LoggedIn" - OnFailed="openIdButtonPanel_Failed" OnCanceled="openIdButtonPanel_Failed" OnReceivedToken="openIdButtonPanel_ReceivedToken" - OnTokenProcessingError="openIdButtonPanel_TokenProcessingError"> - <Providers> - <rp:ProviderInfo OPIdentifier="https://me.yahoo.com/" Image="images/yahoo.gif" /> - <rp:ProviderInfo OPIdentifier="https://www.google.com/accounts/o8/id" Image="images/google.gif" /> - <rp:ProviderInfo OPIdentifier="https://www.myopenid.com/" Image="images/myopenid.png" /> - <rp:ProviderInfo OPIdentifier="https://pip.verisignlabs.com/" Image="images/verisign.gif" /> - <rp:ProviderInfo Image="images/openid.gif" /> - </Providers> - </rp:OpenIdButtonPanel> + <rp:OpenIdSelector runat="server" ID="openIdSelector" OnLoggedIn="openIdSelector_LoggedIn" + OnFailed="openIdSelector_Failed" OnCanceled="openIdSelector_Failed" OnReceivedToken="openIdSelector_ReceivedToken" + OnTokenProcessingError="openIdSelector_TokenProcessingError"> + <Buttons> + <rp:SelectorButton OPIdentifier="https://me.yahoo.com/" Image="images/yahoo.gif" /> + <rp:SelectorButton OPIdentifier="https://www.google.com/accounts/o8/id" Image="images/google.gif" /> + <rp:SelectorButton OPIdentifier="https://www.myopenid.com/" Image="images/myopenid.png" /> + <rp:SelectorButton OPIdentifier="https://pip.verisignlabs.com/" Image="images/verisign.gif" /> + <rp:SelectorButton Image="images/openid.gif" /> + </Buttons> + </rp:OpenIdSelector> <asp:HiddenField runat="server" ID="topWindowUrl" /> <asp:Panel ID="errorPanel" runat="server" EnableViewState="false" Visible="false" ForeColor="Red"> Oops. Something went wrong while logging you in. Trying again may work. <a href="#" onclick="$('#errorMessage').show()"> diff --git a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs index 66ba529..2528b36 100644 --- a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs +++ b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs @@ -25,22 +25,22 @@ } } - protected void openIdButtonPanel_LoggedIn(object sender, OpenIdEventArgs e) { + protected void openIdSelector_LoggedIn(object sender, OpenIdEventArgs e) { this.LoginUser(e.ClaimedIdentifier, e.Response.FriendlyIdentifierForDisplay, e.Response.GetExtension<ClaimsResponse>()); } - protected void openIdButtonPanel_ReceivedToken(object sender, DotNetOpenAuth.InfoCard.ReceivedTokenEventArgs e) { + protected void openIdSelector_ReceivedToken(object sender, DotNetOpenAuth.InfoCard.ReceivedTokenEventArgs e) { this.LoginUser(AuthenticationToken.SynthesizeClaimedIdentifierFromInfoCard(e.Token.UniqueId), e.Token.SiteSpecificId, null); } - protected void openIdButtonPanel_Failed(object sender, OpenIdEventArgs e) { + protected void openIdSelector_Failed(object sender, OpenIdEventArgs e) { if (e.Response.Exception != null) { - errorMessageLabel.Text = e.Response.Exception.Message; + this.errorMessageLabel.Text = e.Response.Exception.Message; } this.errorPanel.Visible = true; } - protected void openIdButtonPanel_TokenProcessingError(object sender, TokenProcessingErrorEventArgs e) { + protected void openIdSelector_TokenProcessingError(object sender, TokenProcessingErrorEventArgs e) { this.errorMessageLabel.Text = e.Exception.Message; this.errorPanel.Visible = true; } diff --git a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs index 5d0a0c9..2a24524 100644 --- a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs +++ b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs @@ -29,7 +29,7 @@ namespace WebFormsRelyingParty { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// </remarks> - protected global::DotNetOpenAuth.OpenId.RelyingParty.OpenIdButtonPanel openIdButtonPanel; + protected global::DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector openIdButtonPanel; /// <summary> /// topWindowUrl control. diff --git a/src/DotNetOpenAuth/DotNetOpenAuth.csproj b/src/DotNetOpenAuth/DotNetOpenAuth.csproj index 4034c3d..02d0dee 100644 --- a/src/DotNetOpenAuth/DotNetOpenAuth.csproj +++ b/src/DotNetOpenAuth/DotNetOpenAuth.csproj @@ -481,7 +481,7 @@ http://opensource.org/licenses/ms-pl.html <Compile Include="OpenId\RelyingParty\AuthenticationRequest.cs" /> <Compile Include="OpenId\RelyingParty\AuthenticationRequestMode.cs" /> <Compile Include="OpenId\RelyingParty\IRelyingPartyBehavior.cs" /> - <Compile Include="OpenId\RelyingParty\OpenIdButtonPanel.cs" /> + <Compile Include="OpenId\RelyingParty\OpenIdSelector.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdRelyingPartyAjaxControlBase.cs" /> <Compile Include="OpenId\RelyingParty\NegativeAuthenticationResponse.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdAjaxTextBox.cs" /> @@ -514,6 +514,7 @@ http://opensource.org/licenses/ms-pl.html <Compile Include="OpenId\RelyingParty\PositiveAuthenticationResponseSnapshot.cs" /> <Compile Include="OpenId\RelyingParty\PrivateSecretManager.cs" /> <Compile Include="OpenId\RelyingParty\RelyingPartySecuritySettings.cs" /> + <Compile Include="OpenId\RelyingParty\SelectorButton.cs" /> <Compile Include="OpenId\RelyingParty\ServiceEndpoint.cs" /> <Compile Include="OpenId\OpenIdXrdsHelper.cs" /> <Compile Include="OpenId\RelyingParty\SimpleXrdsProviderEndpoint.cs" /> @@ -647,10 +648,10 @@ http://opensource.org/licenses/ms-pl.html <EmbeddedResource Include="OpenId\RelyingParty\OpenIdAjaxTextBox.css" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="OpenId\RelyingParty\OpenIdButtonPanel.js" /> + <EmbeddedResource Include="OpenId\RelyingParty\OpenIdSelector.js" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="OpenId\RelyingParty\OpenIdButtonPanel.css" /> + <EmbeddedResource Include="OpenId\RelyingParty\OpenIdSelector.css" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="..\..\tools\DotNetOpenAuth.Versioning.targets" /> diff --git a/src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs b/src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs index f5988ef..7ef07f8 100644 --- a/src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs +++ b/src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs @@ -524,6 +524,15 @@ namespace DotNetOpenAuth.OpenId { } /// <summary> + /// Looks up a localized string similar to The {0} property must be set first.. + /// </summary> + internal static string PropertyNotSet { + get { + return ResourceManager.GetString("PropertyNotSet", resourceCulture); + } + } + + /// <summary> /// Looks up a localized string similar to This property value is not supported by this control.. /// </summary> internal static string PropertyValueNotSupported { diff --git a/src/DotNetOpenAuth/OpenId/OpenIdStrings.resx b/src/DotNetOpenAuth/OpenId/OpenIdStrings.resx index 034d84d..6fcef49 100644 --- a/src/DotNetOpenAuth/OpenId/OpenIdStrings.resx +++ b/src/DotNetOpenAuth/OpenId/OpenIdStrings.resx @@ -346,4 +346,7 @@ Discovered endpoint info: <data name="HeadTagMustIncludeRunatServer" xml:space="preserve"> <value>The HTML head tag must include runat="server".</value> </data> + <data name="PropertyNotSet" xml:space="preserve"> + <value>The {0} property must be set first.</value> + </data> </root>
\ No newline at end of file diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.cs b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs index cb2c9ea..60dcc7c 100644 --- a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.cs +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.cs @@ -1,11 +1,11 @@ //----------------------------------------------------------------------- -// <copyright file="OpenIdButtonPanel.cs" company="Andrew Arnott"> +// <copyright file="OpenIdSelector.cs" company="Andrew Arnott"> // Copyright (c) Andrew Arnott. All rights reserved. // </copyright> //----------------------------------------------------------------------- -[assembly: System.Web.UI.WebResource(DotNetOpenAuth.OpenId.RelyingParty.OpenIdButtonPanel.EmbeddedScriptResourceName, "text/javascript")] -[assembly: System.Web.UI.WebResource(DotNetOpenAuth.OpenId.RelyingParty.OpenIdButtonPanel.EmbeddedStylesheetResourceName, "text/css")] +[assembly: System.Web.UI.WebResource(DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector.EmbeddedScriptResourceName, "text/javascript")] +[assembly: System.Web.UI.WebResource(DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector.EmbeddedStylesheetResourceName, "text/css")] namespace DotNetOpenAuth.OpenId.RelyingParty { using System; @@ -25,18 +25,21 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.InfoCard; using DotNetOpenAuth.Messaging; - [ToolboxData("<{0}:OpenIdButtonPanel runat=\"server\"></{0}:OpenIdButtonPanel>")] + /// <summary> + /// An ASP.NET control that provides a user-friendly way of logging into a web site using OpenID. + /// </summary> + [ToolboxData("<{0}:OpenIdSelector runat=\"server\"></{0}:OpenIdSelector>")] [ParseChildren(true), PersistChildren(false)] - public class OpenIdButtonPanel : OpenIdRelyingPartyAjaxControlBase { + public class OpenIdSelector : OpenIdRelyingPartyAjaxControlBase { /// <summary> /// The name of the manifest stream containing the OpenIdButtonPanel.js file. /// </summary> - internal const string EmbeddedScriptResourceName = Util.DefaultNamespace + ".OpenId.RelyingParty.OpenIdButtonPanel.js"; + internal const string EmbeddedScriptResourceName = Util.DefaultNamespace + ".OpenId.RelyingParty.OpenIdSelector.js"; /// <summary> /// The name of the manifest stream containing the OpenIdButtonPanel.css file. /// </summary> - internal const string EmbeddedStylesheetResourceName = Util.DefaultNamespace + ".OpenId.RelyingParty.OpenIdButtonPanel.css"; + internal const string EmbeddedStylesheetResourceName = Util.DefaultNamespace + ".OpenId.RelyingParty.OpenIdSelector.css"; #region ViewState keys @@ -87,9 +90,9 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { private InfoCardSelector infoCardSelector; /// <summary> - /// Initializes a new instance of the <see cref="OpenIdButtonPanel"/> class. + /// Initializes a new instance of the <see cref="OpenIdSelector"/> class. /// </summary> - public OpenIdButtonPanel() { + public OpenIdSelector() { } /// <summary> @@ -112,15 +115,18 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { set { this.ViewState[AuthenticatedAsToolTipViewStateKey] = value ?? string.Empty; } } + /// <summary> + /// Gets the collection of buttons this selector should render to the browser. + /// </summary> [PersistenceMode(PersistenceMode.InnerProperty)] - public Collection<ProviderInfo> Providers { + public Collection<SelectorButton> Buttons { get { if (this.ViewState[ProvidersViewStateKey] == null) { - var providers = new Collection<ProviderInfo>(); + var providers = new Collection<SelectorButton>(); this.ViewState[ProvidersViewStateKey] = providers; return providers; } else { - return (Collection<ProviderInfo>)this.ViewState[ProvidersViewStateKey]; + return (Collection<SelectorButton>)this.ViewState[ProvidersViewStateKey]; } } } @@ -200,6 +206,10 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); + foreach (var button in this.Buttons) { + button.EnsureValid(); + } + var css = new HtmlLink(); css.Href = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), EmbeddedStylesheetResourceName); css.Attributes["rel"] = "stylesheet"; @@ -208,7 +218,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { this.Page.Header.Controls.AddAt(0, css); // insert at top so host page can override // Import the .js file where most of the code is. - this.Page.ClientScript.RegisterClientScriptResource(typeof(OpenIdButtonPanel), EmbeddedScriptResourceName); + this.Page.ClientScript.RegisterClientScriptResource(typeof(OpenIdSelector), EmbeddedScriptResourceName); // Provide javascript with a way to post the login assertion. const string PostLoginAssertionMethodName = "postLoginAssertion"; @@ -226,7 +236,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { this.positiveAssertionField.ClientID); this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Postback", script, true); - this.PreloadDiscovery(this.Providers.Select(op => op.OPIdentifier).Where(id => id != null)); + this.PreloadDiscovery(this.Buttons.Select(op => op.OPIdentifier).Where(id => id != null)); } /// <summary> @@ -237,7 +247,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { writer.AddAttribute(HtmlTextWriterAttribute.Class, "OpenIdProviders"); writer.RenderBeginTag(HtmlTextWriterTag.Ul); - foreach (var op in this.Providers) { + foreach (var op in this.Buttons) { writer.AddAttribute(HtmlTextWriterAttribute.Id, (string)op.OPIdentifier ?? "OpenIDButton"); writer.AddAttribute(HtmlTextWriterAttribute.Class, op.OPIdentifier != null ? "OPButton" : "OpenIDButton"); writer.RenderBeginTag(HtmlTextWriterTag.Li); @@ -351,14 +361,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { this.OnTokenProcessingError(e); } } - - public class ProviderInfo { - public ProviderInfo() { - } - - [TypeConverter(typeof(IdentifierConverter))] - public Identifier OPIdentifier { get; set; } - - public string Image { get; set; } - } } diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.css b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.css index e7eafc7..e7eafc7 100644 --- a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.css +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.css diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.js b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.js index 550156f..550156f 100644 --- a/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdButtonPanel.js +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/OpenIdSelector.js diff --git a/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorButton.cs b/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorButton.cs new file mode 100644 index 0000000..8db0e97 --- /dev/null +++ b/src/DotNetOpenAuth/OpenId/RelyingParty/SelectorButton.cs @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------- +// <copyright file="SelectorButton.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth.OpenId.RelyingParty { + using System.ComponentModel; + using DotNetOpenAuth.ComponentModel; + using DotNetOpenAuth.Messaging; + + /// <summary> + /// A button that would appear in the <see cref="OpenIdSelector"/> control via its <see cref="OpenIdSelector.Buttons"/> collection. + /// </summary> + public class SelectorButton { + /// <summary> + /// Initializes a new instance of the <see cref="SelectorButton"/> class. + /// </summary> + public SelectorButton() { + } + + /// <summary> + /// Gets or sets the OP Identifier represented by the button. + /// </summary> + /// <value> + /// The OP identifier, which may be provided in the easiest "user-supplied identifier" form, + /// but for security should be provided with a leading https:// if possible. + /// </value> + [TypeConverter(typeof(IdentifierConverter))] + public Identifier OPIdentifier { get; set; } + + /// <summary> + /// Gets or sets the path to the image to display on the button's surface. + /// </summary> + /// <value>The virtual path to the image.</value> + public string Image { get; set; } + + /// <summary> + /// Ensures that this button has been initialized to a valid state. + /// </summary> + internal void EnsureValid() { + // Every button must have an image. + ErrorUtilities.VerifyOperation(!string.IsNullOrEmpty(this.Image), OpenIdStrings.PropertyNotSet, "SelectorButton.Image"); + + // Every button must have exactly one purpose. + ////ErrorUtilities.VerifyOperation(this.OPIdentifier != null, OpenIdStrings.PropertyNotSet, "SelectorButton.OPIdentifier"); + } + } +} |