diff options
Diffstat (limited to 'src/OAuth/OAuthServiceProvider/OAuth.ashx')
-rw-r--r-- | src/OAuth/OAuthServiceProvider/OAuth.ashx | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/OAuth/OAuthServiceProvider/OAuth.ashx b/src/OAuth/OAuthServiceProvider/OAuth.ashx new file mode 100644 index 0000000..8a74926 --- /dev/null +++ b/src/OAuth/OAuthServiceProvider/OAuth.ashx @@ -0,0 +1,42 @@ +<%@ WebHandler Language="C#" Class="OAuth" %> + +using System; +using System.Linq; +using System.Web; +using System.Web.SessionState; +using DotNetOpenAuth.OAuth; +using DotNetOpenAuth.OAuth.ChannelElements; +using DotNetOpenAuth.OAuth.Messages; +using DotNetOpenAuth.Messaging; +using OAuthServiceProvider.Code; + +public class OAuth : IHttpHandler, IRequiresSessionState { + ServiceProvider sp; + + public OAuth() { + sp = new ServiceProvider(Constants.SelfDescription, Global.TokenManager, new CustomOAuthMessageFactory(Global.TokenManager)); + } + + public void ProcessRequest(HttpContext context) { + IProtocolMessage request = sp.ReadRequest(); + RequestScopedTokenMessage requestToken; + UserAuthorizationRequest requestAuth; + AuthorizedTokenRequest requestAccessToken; + if ((requestToken = request as RequestScopedTokenMessage) != null) { + var response = sp.PrepareUnauthorizedTokenMessage(requestToken); + sp.Channel.Send(response); + } else if ((requestAuth = request as UserAuthorizationRequest) != null) { + Global.PendingOAuthAuthorization = requestAuth; + HttpContext.Current.Response.Redirect("~/Members/Authorize.aspx"); + } else if ((requestAccessToken = request as AuthorizedTokenRequest) != null) { + var response = sp.PrepareAccessTokenMessage(requestAccessToken); + sp.Channel.Send(response); + } else { + throw new InvalidOperationException(); + } + } + + public bool IsReusable { + get { return true; } + } +} |