Mercurial > altnet-hispano
diff Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs @ 112:0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
author | Nelo@Kenia.neluz.int |
---|---|
date | Sat, 11 Jun 2011 01:20:59 -0300 |
parents | |
children | 0eac9a1c1a6c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Sat Jun 11 01:20:59 2011 -0300 @@ -0,0 +1,82 @@ +using System; +using System.Linq; +using System.Web.Mvc; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Factories; +using AltNetHispano.Agendas.Twitter; +using AltNetHispano.Agendas.Web.Models; + +namespace AltNetHispano.Agendas.Web.Controllers +{ + public class PerfilController : Controller + { + // + // GET: /Perfil/ + + public ActionResult Index() + { + var persona = IdentityContext.GetUsuario(); + + if (persona == null) + { + ModelState.AddModelError(string.Empty, "No fue posible recuperar su perfil, vuelva a autenticarse y reintente"); + return View(); + } + + var model = new PerfilIndexModel + { + DisplayName = persona.Nombre, + Cuentas = from c in persona.Cuentas + select + new CuentaDto + {IdentityProvider = c.IdentityProvider.ToString(), UserName = c.LogonName} + }; + + return View(model); + } + + public ActionResult AddTwitterAccount() + { + var oAuth = new OAuthTwitter(); + + if (Request["oauth_token"] == null) + { + var action = Url.Action("AddTwitterAccount"); + var url = Request.Url.Scheme + "://" + Request.Url.Host + + (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; + + Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); + } + else + { + var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); + if (response.Length > 0) + { + var username =OAuthTwitter.GetResponseContent(response, "screen_name"); + + var personaService = AgendaFactory.GetPersonaService(); + + personaService.AddCuenta(IdentityProviderEnum.Twitter, username); + return RedirectToAction("Index"); + } + } + return RedirectToAction("Index"); + } + + public ActionResult Remove(string identityProvider, string username) + { + var personaService = AgendaFactory.GetPersonaService(); + + IdentityProviderEnum ip; + if (!Enum.TryParse<IdentityProviderEnum>(identityProvider, out ip)) + { + ModelState.AddModelError("IdentityProvider", "No se reconoce el identity provider" + identityProvider); + return View("Index"); + } + + personaService.RemoveCuenta(ip, username); + + return RedirectToAction("Index"); + } + } +}