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");
+		}
+    }
+}