summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-10-28 07:48:02 -0700
committerAndrew Arnott <andrewarnott@gmail.com>2009-10-28 07:48:02 -0700
commit4d010b581724b4cc3b208f926968faf0f47b2d45 (patch)
tree77d24a0195a52e8574b06e36a2843959d5dbffcc
parentb7be3ad9d93effda4c40128dff2cb819f552ca90 (diff)
downloadDotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.zip
DotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.tar.gz
DotNetOpenAuth-4d010b581724b4cc3b208f926968faf0f47b2d45.tar.bz2
Renamed OpenIdButtonPanel to OpenIdSelector.
-rw-r--r--projecttemplates/WebFormsRelyingParty/LoginFrame.aspx22
-rw-r--r--projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs10
-rw-r--r--projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.designer.cs2
-rw-r--r--src/DotNetOpenAuth/DotNetOpenAuth.csproj7
-rw-r--r--src/DotNetOpenAuth/OpenId/OpenIdStrings.Designer.cs9
-rw-r--r--src/DotNetOpenAuth/OpenId/OpenIdStrings.resx3
-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.cs49
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");
+ }
+ }
+}