diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2013-03-04 13:54:33 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2013-03-04 13:54:33 -0800 |
commit | 36bbbea5002c889558a67c380e46dff668251b25 (patch) | |
tree | 87721c7f13cfd27b75f7132b71549688b55eb14a /samples/OpenIdProviderWebForms | |
parent | fd85211bfc50805d740392bfc6770df7c6f4c7d0 (diff) | |
download | DotNetOpenAuth-36bbbea5002c889558a67c380e46dff668251b25.zip DotNetOpenAuth-36bbbea5002c889558a67c380e46dff668251b25.tar.gz DotNetOpenAuth-36bbbea5002c889558a67c380e46dff668251b25.tar.bz2 |
Switched Channel to receiving messages via HttpRequestMessage as well.
Diffstat (limited to 'samples/OpenIdProviderWebForms')
-rw-r--r-- | samples/OpenIdProviderWebForms/Code/Util.cs | 4 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj | 10 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/ProfileFields.ascx.cs | 14 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/Provider.ashx.cs | 7 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/Web.config | 2 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/WebForm1.aspx | 16 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/WebForm1.aspx.cs | 15 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/WebForm1.aspx.designer.cs | 24 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/decide.aspx | 2 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/decide.aspx.cs | 20 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/server.aspx | 2 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/server.aspx.cs | 14 |
12 files changed, 109 insertions, 21 deletions
diff --git a/samples/OpenIdProviderWebForms/Code/Util.cs b/samples/OpenIdProviderWebForms/Code/Util.cs index 552a80a..5333124 100644 --- a/samples/OpenIdProviderWebForms/Code/Util.cs +++ b/samples/OpenIdProviderWebForms/Code/Util.cs @@ -54,7 +54,7 @@ namespace OpenIdProviderWebForms.Code { // add extension responses here. } } else { - HttpContext.Current.Response.Redirect("~/decide.aspx", true); + HttpContext.Current.Response.Redirect("~/decide.aspx", false); } } @@ -70,7 +70,7 @@ namespace OpenIdProviderWebForms.Code { // These would typically be filled in from a user database } } else { - HttpContext.Current.Response.Redirect("~/decide.aspx", true); + HttpContext.Current.Response.Redirect("~/decide.aspx", false); } } diff --git a/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj b/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj index d756726..c95ee15 100644 --- a/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj +++ b/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj @@ -100,6 +100,7 @@ <SubType>Designer</SubType> </Content> <Content Include="user_xrds.aspx" /> + <Content Include="WebForm1.aspx" /> </ItemGroup> <ItemGroup> <Compile Include="access_token.ashx.cs"> @@ -175,6 +176,13 @@ <Compile Include="user.aspx.designer.cs"> <DependentUpon>user.aspx</DependentUpon> </Compile> + <Compile Include="WebForm1.aspx.cs"> + <DependentUpon>WebForm1.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="WebForm1.aspx.designer.cs"> + <DependentUpon>WebForm1.aspx</DependentUpon> + </Compile> </ItemGroup> <ItemGroup> <Content Include="favicon.ico" /> @@ -251,7 +259,7 @@ <VisualStudio> <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> <WebProjectProperties> - <UseIIS>True</UseIIS> + <UseIIS>False</UseIIS> <AutoAssignPort>False</AutoAssignPort> <DevelopmentServerPort>4860</DevelopmentServerPort> <DevelopmentServerVPath>/</DevelopmentServerVPath> diff --git a/samples/OpenIdProviderWebForms/ProfileFields.ascx.cs b/samples/OpenIdProviderWebForms/ProfileFields.ascx.cs index 6954aa6..e27f794 100644 --- a/samples/OpenIdProviderWebForms/ProfileFields.ascx.cs +++ b/samples/OpenIdProviderWebForms/ProfileFields.ascx.cs @@ -25,15 +25,15 @@ namespace OpenIdProviderWebForms { public DateTime? DateOfBirth { get { - try { - int day = Convert.ToInt32(this.dobDayDropdownlist.SelectedValue); - int month = Convert.ToInt32(this.dobMonthDropdownlist.SelectedValue); - int year = Convert.ToInt32(this.dobYearDropdownlist.SelectedValue); - DateTime newDate = new DateTime(year, month, day); + int day, month, year; + if (int.TryParse(this.dobDayDropdownlist.SelectedValue, out day) + && int.TryParse(this.dobMonthDropdownlist.SelectedValue, out month) + && int.TryParse(this.dobYearDropdownlist.SelectedValue, out year)) { + var newDate = new DateTime(year, month, day); return newDate; - } catch (Exception) { - return null; } + + return null; } set { diff --git a/samples/OpenIdProviderWebForms/Provider.ashx.cs b/samples/OpenIdProviderWebForms/Provider.ashx.cs index d5d747b..7022d80 100644 --- a/samples/OpenIdProviderWebForms/Provider.ashx.cs +++ b/samples/OpenIdProviderWebForms/Provider.ashx.cs @@ -24,7 +24,8 @@ } protected override async Task ProcessRequestAsync(HttpContext context) { - IRequest request = await ProviderEndpoint.Provider.GetRequestAsync(new HttpRequestWrapper(context.Request), context.Response.ClientDisconnectedToken); + var providerEndpoint = new ProviderEndpoint(); + IRequest request = await providerEndpoint.Provider.GetRequestAsync(new HttpRequestWrapper(context.Request), context.Response.ClientDisconnectedToken); if (request != null) { // Some OpenID requests are automatable and can be responded to immediately. // But authentication requests cannot be responded to until something on @@ -57,12 +58,12 @@ // We DON'T use ProviderEndpoint.SendResponse because // that only sends responses to requests in PendingAuthenticationRequest, // but we don't set that for associate and other non-checkid requests. - var response = await ProviderEndpoint.Provider.PrepareResponseAsync(request, context.Response.ClientDisconnectedToken); + var response = await providerEndpoint.Provider.PrepareResponseAsync(request, context.Response.ClientDisconnectedToken); // Make sure that any PendingAuthenticationRequest that MAY be set is cleared. ProviderEndpoint.PendingRequest = null; - await response.SendAsync(new HttpResponseWrapper(context.Response)); + await response.SendAsync(new HttpContextWrapper(context)); } } } diff --git a/samples/OpenIdProviderWebForms/Web.config b/samples/OpenIdProviderWebForms/Web.config index d9e005d..c028df1 100644 --- a/samples/OpenIdProviderWebForms/Web.config +++ b/samples/OpenIdProviderWebForms/Web.config @@ -89,7 +89,7 @@ Medium: doesn't work unless originUrl=".*" or WebPermission.Connect is extended, and Google Apps doesn't work. Low: doesn't work because WebPermission.Connect is denied. --> - <trust level="Medium" originUrl=".*"/> + <trust level="Full" originUrl=".*"/> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> </system.web> <location path="decide.aspx"> diff --git a/samples/OpenIdProviderWebForms/WebForm1.aspx b/samples/OpenIdProviderWebForms/WebForm1.aspx new file mode 100644 index 0000000..8639049 --- /dev/null +++ b/samples/OpenIdProviderWebForms/WebForm1.aspx @@ -0,0 +1,16 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="OpenIdProviderWebForms.WebForm1" Async="true" %> + +<!DOCTYPE html> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head runat="server"> + <title></title> +</head> +<body> + <form id="form1" runat="server"> + <div> + + </div> + </form> +</body> +</html> diff --git a/samples/OpenIdProviderWebForms/WebForm1.aspx.cs b/samples/OpenIdProviderWebForms/WebForm1.aspx.cs new file mode 100644 index 0000000..6ec73e6 --- /dev/null +++ b/samples/OpenIdProviderWebForms/WebForm1.aspx.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace OpenIdProviderWebForms { + public partial class WebForm1 : System.Web.UI.Page { + protected async void Page_Load(object sender, EventArgs e) { + object oldValue = Session["Hi"]; + Session["Hi"] = new object(); + } + } +}
\ No newline at end of file diff --git a/samples/OpenIdProviderWebForms/WebForm1.aspx.designer.cs b/samples/OpenIdProviderWebForms/WebForm1.aspx.designer.cs new file mode 100644 index 0000000..0e75ef7 --- /dev/null +++ b/samples/OpenIdProviderWebForms/WebForm1.aspx.designer.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class WebForm1 { + + /// <summary> + /// form1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + } +} diff --git a/samples/OpenIdProviderWebForms/decide.aspx b/samples/OpenIdProviderWebForms/decide.aspx index b6219ff..ddae8e7 100644 --- a/samples/OpenIdProviderWebForms/decide.aspx +++ b/samples/OpenIdProviderWebForms/decide.aspx @@ -1,5 +1,5 @@ <%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.decide" - CodeBehind="decide.aspx.cs" MasterPageFile="~/Site.Master" Async="true" %> + CodeBehind="decide.aspx.cs" MasterPageFile="~/Site.Master" Async="true" EnableSessionState="true" %> <%@ Register Src="ProfileFields.ascx" TagName="ProfileFields" TagPrefix="uc1" %> <asp:Content runat="server" ContentPlaceHolderID="Main"> diff --git a/samples/OpenIdProviderWebForms/decide.aspx.cs b/samples/OpenIdProviderWebForms/decide.aspx.cs index 88f222f..d3ef6d2 100644 --- a/samples/OpenIdProviderWebForms/decide.aspx.cs +++ b/samples/OpenIdProviderWebForms/decide.aspx.cs @@ -1,6 +1,7 @@ namespace OpenIdProviderWebForms { using System; using System.Diagnostics; + using System.Net; using System.Web.Security; using System.Web.UI; using DotNetOpenAuth.Messaging; @@ -15,7 +16,11 @@ namespace OpenIdProviderWebForms { public partial class decide : Page { protected async void Page_Load(object src, EventArgs e) { if (ProviderEndpoint.PendingRequest == null) { - Response.Redirect("~/"); + // Response.Redirect(string) throws ThreadInterruptedException, and "async void Page_Load" doesn't properly catch it. + this.Response.RedirectLocation = "/"; + this.Response.StatusCode = (int)HttpStatusCode.Redirect; + this.Context.ApplicationInstance.CompleteRequest(); + return; } this.relyingPartyVerificationResultLabel.Text = @@ -63,7 +68,7 @@ namespace OpenIdProviderWebForms { } protected async void Yes_Click(object sender, EventArgs e) { - if (!Page.IsValid) { + if (!Page.IsValid || ProviderEndpoint.PendingRequest == null) { return; } @@ -99,18 +104,25 @@ namespace OpenIdProviderWebForms { ProviderEndpoint.PendingAnonymousRequest.IsApproved = true; } Debug.Assert(ProviderEndpoint.PendingRequest.IsResponseReady, "Setting authentication should be all that's necessary."); - var response = await ProviderEndpoint.PrepareResponseAsync(this.Response.ClientDisconnectedToken); + + var provider = new ProviderEndpoint(); + var response = await provider.PrepareResponseAsync(); await response.SendAsync(); } protected async void No_Click(object sender, EventArgs e) { + if (ProviderEndpoint.PendingRequest == null) { + return; + } + if (ProviderEndpoint.PendingAuthenticationRequest != null) { ProviderEndpoint.PendingAuthenticationRequest.IsAuthenticated = false; } else { ProviderEndpoint.PendingAnonymousRequest.IsApproved = false; } Debug.Assert(ProviderEndpoint.PendingRequest.IsResponseReady, "Setting authentication should be all that's necessary."); - var response = await ProviderEndpoint.PrepareResponseAsync(this.Response.ClientDisconnectedToken); + var provider = new ProviderEndpoint(); + var response = await provider.PrepareResponseAsync(); await response.SendAsync(); } } diff --git a/samples/OpenIdProviderWebForms/server.aspx b/samples/OpenIdProviderWebForms/server.aspx index 101aeee..946f044 100644 --- a/samples/OpenIdProviderWebForms/server.aspx +++ b/samples/OpenIdProviderWebForms/server.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.server" CodeBehind="server.aspx.cs" ValidateRequest="false" %> +<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.server" CodeBehind="server.aspx.cs" ValidateRequest="false" Async="true" EnableSessionState="true" %> <%@ Register Assembly="DotNetOpenAuth.OpenId.Provider.UI" Namespace="DotNetOpenAuth.OpenId.Provider" TagPrefix="openid" %> <html> diff --git a/samples/OpenIdProviderWebForms/server.aspx.cs b/samples/OpenIdProviderWebForms/server.aspx.cs index 89e14f4..e613192 100644 --- a/samples/OpenIdProviderWebForms/server.aspx.cs +++ b/samples/OpenIdProviderWebForms/server.aspx.cs @@ -7,15 +7,27 @@ namespace OpenIdProviderWebForms { /// This page is responsible for handling all open-id compliant requests. /// </summary> public partial class server : System.Web.UI.Page { - protected void Page_Load(object src, System.EventArgs evt) { + protected void Page_Load(object src, EventArgs evt) { this.serverEndpointUrl.Text = Request.Url.ToString(); } protected void provider_AuthenticationChallenge(object sender, AuthenticationChallengeEventArgs e) { + // We store the request in the user's session so that + // redirects and user prompts can appear and eventually some page can decide + // to respond to the OpenID authentication request either affirmatively or + // negatively. + ProviderEndpoint.PendingRequest = e.Request; + Code.Util.ProcessAuthenticationChallenge(e.Request); } protected void provider_AnonymousRequest(object sender, AnonymousRequestEventArgs e) { + // We store the request in the user's session so that + // redirects and user prompts can appear and eventually some page can decide + // to respond to the OpenID authentication request either affirmatively or + // negatively. + ProviderEndpoint.PendingRequest = e.Request; + Code.Util.ProcessAnonymousRequest(e.Request); } } |