summaryrefslogtreecommitdiffstats
path: root/src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs
diff options
context:
space:
mode:
authorDavid Christiansen <coding@davedoes.net>2012-03-15 22:10:55 +0000
committerDavid Christiansen <coding@davedoes.net>2012-03-15 22:10:55 +0000
commita5bfa2bb8a614b1932ec8b7bbc6a0cc6bca3051f (patch)
treea3057157fa3287e0c0c4cc49be1854f9aa63d321 /src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs
parent02ce959db12fec57e846e5ebfa662cd0327ce69c (diff)
downloadDotNetOpenAuth.Samples-a5bfa2bb8a614b1932ec8b7bbc6a0cc6bca3051f.zip
DotNetOpenAuth.Samples-a5bfa2bb8a614b1932ec8b7bbc6a0cc6bca3051f.tar.gz
DotNetOpenAuth.Samples-a5bfa2bb8a614b1932ec8b7bbc6a0cc6bca3051f.tar.bz2
W.I.P.
* Initial migration and reference to DNOA Nuget packages (From teamcity.dotnetopenauth.net) * Awaiting fix to DotNetOpenAuth.OpenIdOAuth.nuspec in order to complete migration.
Diffstat (limited to 'src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs')
-rw-r--r--src/OpenID/OpenIdRelyingPartyMvc/Controllers/UserController.cs72
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();
+ }
+ }
+}