diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2010-01-02 14:01:09 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2010-01-02 14:01:09 -0800 |
commit | 4c37ffc3bc506c9eed07cb6c8148ff5f8ffb01a4 (patch) | |
tree | 886bbfac7fb8df2f0dd0424f46d5a1ba9b094c41 /projecttemplates/MvcRelyingParty/Controllers | |
parent | 99c4550d70dc2b8402a7968c8066eb4c8468dc2b (diff) | |
download | DotNetOpenAuth-4c37ffc3bc506c9eed07cb6c8148ff5f8ffb01a4.zip DotNetOpenAuth-4c37ffc3bc506c9eed07cb6c8148ff5f8ffb01a4.tar.gz DotNetOpenAuth-4c37ffc3bc506c9eed07cb6c8148ff5f8ffb01a4.tar.bz2 |
Added capability to add and see multiple authentication tokens per user account.
Diffstat (limited to 'projecttemplates/MvcRelyingParty/Controllers')
-rw-r--r-- | projecttemplates/MvcRelyingParty/Controllers/AccountController.cs | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/projecttemplates/MvcRelyingParty/Controllers/AccountController.cs b/projecttemplates/MvcRelyingParty/Controllers/AccountController.cs index 6d875b4..0fa8a9a 100644 --- a/projecttemplates/MvcRelyingParty/Controllers/AccountController.cs +++ b/projecttemplates/MvcRelyingParty/Controllers/AccountController.cs @@ -98,7 +98,7 @@ ModelState.AddModelError("OpenID", ex.Message); } } else { - ModelState.AddModelError("OpenID", "This doesn't look like a valid OpenID."); + ModelState.AddModelError("openid_identifier", "This doesn't look like a valid OpenID."); } return View(); @@ -243,15 +243,54 @@ return PartialView("AuthorizedApps", GetAccountInfoModel()); } + [Authorize, AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] + public ActionResult AddAuthenticationTokenReturnTo(string openid_identifier) { + var response = this.RelyingParty.GetResponse(); + if (response != null) { + switch (response.Status) { + case AuthenticationStatus.Authenticated: + Database.LoggedInUser.AuthenticationTokens.Add(new AuthenticationToken { + ClaimedIdentifier = response.ClaimedIdentifier, + FriendlyIdentifier = response.FriendlyIdentifierForDisplay, + }); + Database.DataContext.SaveChanges(); + break; + default: + break; + } + } + + return RedirectToAction("Edit"); + } + + [Authorize, AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken] + public ActionResult AddAuthenticationToken(string openid_identifier) { + Identifier userSuppliedIdentifier; + if (Identifier.TryParse(openid_identifier, out userSuppliedIdentifier)) { + try { + var request = this.RelyingParty.CreateRequest(userSuppliedIdentifier, Realm.AutoDetect, Url.ActionFull("AddAuthenticationTokenReturnTo")); + return request.RedirectingResponse.AsActionResult(); + } catch (ProtocolException ex) { + ModelState.AddModelError("openid_identifier", ex); + } + } else { + ModelState.AddModelError("openid_identifier", "This doesn't look like a valid OpenID."); + } + + return View("Edit", GetAccountInfoModel()); + } + private static AccountInfoModel GetAccountInfoModel() { var authorizedApps = from token in Database.DataContext.IssuedTokens.OfType<IssuedAccessToken>() where token.User.UserId == Database.LoggedInUser.UserId select new AccountInfoModel.AuthorizedApp { AppName = token.Consumer.Name, Token = token.Token }; + Database.LoggedInUser.AuthenticationTokens.Load(); var model = new AccountInfoModel { FirstName = Database.LoggedInUser.FirstName, LastName = Database.LoggedInUser.LastName, EmailAddress = Database.LoggedInUser.EmailAddress, AuthorizedApps = authorizedApps.ToList(), + AuthenticationTokens = Database.LoggedInUser.AuthenticationTokens.ToList(), }; return model; } |