diff options
author | David Christiansen <coding@davedoes.net> | 2012-06-30 16:06:46 -0700 |
---|---|---|
committer | David Christiansen <coding@davedoes.net> | 2012-06-30 16:06:46 -0700 |
commit | 06401bb049dc29cf4446eb61a4a72317a644ce54 (patch) | |
tree | 7c475929350b31b4b848a1faa57bd0d7cbbf512c /src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs | |
parent | 02ce959db12fec57e846e5ebfa662cd0327ce69c (diff) | |
parent | 3286c37f3a967e7d142534df84604a66be9d176c (diff) | |
download | DotNetOpenAuth.Samples-06401bb049dc29cf4446eb61a4a72317a644ce54.zip DotNetOpenAuth.Samples-06401bb049dc29cf4446eb61a4a72317a644ce54.tar.gz DotNetOpenAuth.Samples-06401bb049dc29cf4446eb61a4a72317a644ce54.tar.bz2 |
Merge pull request #1 from DavidChristiansen/master
Kachow!
Diffstat (limited to 'src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs')
-rw-r--r-- | src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs b/src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs new file mode 100644 index 0000000..3ff405f --- /dev/null +++ b/src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs @@ -0,0 +1,72 @@ +namespace OpenIdRelyingPartyMvc.Controllers { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Web; + using System.Web.Mvc; + using System.Web.Security; + using DotNetOpenAuth.Messaging; + using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.RelyingParty; + + public class UserController : Controller { + private static OpenIdRelyingParty openid = new OpenIdRelyingParty(); + + public ActionResult Index() { + if (!User.Identity.IsAuthenticated) { + Response.Redirect("~/User/Login?ReturnUrl=Index"); + } + + return View("Index"); + } + + public ActionResult Logout() { + FormsAuthentication.SignOut(); + return Redirect("~/Home"); + } + + public ActionResult Login() { + // Stage 1: display login form to user + return View("Login"); + } + + [ValidateInput(false)] + public ActionResult Authenticate(string returnUrl) { + var response = openid.GetResponse(); + if (response == null) { + // Stage 2: user submitting Identifier + Identifier id; + if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) { + try { + return openid.CreateRequest(Request.Form["openid_identifier"]).RedirectingResponse.AsActionResult(); + } catch (ProtocolException ex) { + ViewData["Message"] = ex.Message; + return View("Login"); + } + } else { + ViewData["Message"] = "Invalid identifier"; + return View("Login"); + } + } else { + // Stage 3: OpenID Provider sending assertion response + switch (response.Status) { + case AuthenticationStatus.Authenticated: + Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; + FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false); + if (!string.IsNullOrEmpty(returnUrl)) { + return Redirect(returnUrl); + } else { + return RedirectToAction("Index", "Home"); + } + case AuthenticationStatus.Canceled: + ViewData["Message"] = "Canceled at provider"; + return View("Login"); + case AuthenticationStatus.Failed: + ViewData["Message"] = response.Exception.Message; + return View("Login"); + } + } + return new EmptyResult(); + } + } +} |