# HG changeset patch # User Nelo@Kenia.neluz.int # Date 1307853609 10800 # Node ID 7a2eeb9e9bf96f3b98157fef70b8eef2fcbe3b8b # Parent 1ce71844ffa4a58007620e54086efa5c60f36b2f Crear cuenta interna asociada diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Domain/Cuenta.cs --- a/Agendas/trunk/src/Agendas.Domain/Cuenta.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Cuenta.cs Sun Jun 12 01:40:09 2011 -0300 @@ -15,5 +15,28 @@ LogonName = logonName; IdentityProvider = identityProvider; } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (Cuenta)) return false; + return Equals((Cuenta) obj); + } + + public virtual bool Equals(Cuenta other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(other.LogonName, LogonName) && Equals(other.IdentityProvider, IdentityProvider); + } + + public override int GetHashCode() + { + unchecked + { + return ((LogonName != null ? LogonName.GetHashCode() : 0)*397) ^ IdentityProvider.GetHashCode(); + } + } } } \ No newline at end of file diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Domain/IdentityContext.cs --- a/Agendas/trunk/src/Agendas.Domain/IdentityContext.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/IdentityContext.cs Sun Jun 12 01:40:09 2011 -0300 @@ -27,15 +27,21 @@ public static string GetUserName() { - string username = Current.GetUserName(); - if (string.IsNullOrWhiteSpace(username)) - throw new UsuarioNoAutenticadoException(); - return username; + return Current.GetUserName(); + } + + public static bool IsAuthenticated() + { + return !string.IsNullOrWhiteSpace(GetUserName()); } public static Persona GetUsuario() { - var identification = new Identification(GetUserName()); + var userName = GetUserName(); + if (string.IsNullOrWhiteSpace(userName)) + throw new UsuarioNoAutenticadoException(); + + var identification = new Identification(userName); var cuenta = _personaRepository.GetCuenta(identification.IdentityProvider, identification.LogonName); return cuenta != null ? cuenta.Persona : null; diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs --- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Sun Jun 12 01:40:09 2011 -0300 @@ -19,12 +19,12 @@ return cuenta != null; } - public bool Validate(IdentityProviderEnum identityProvider, string username, string nombre) + public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) { var cuenta = _personaRepository.GetCuenta(identityProvider, username); if (cuenta==null) { - var persona=new Persona(nombre); + var persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); persona.AddCuenta(new Cuenta(identityProvider, username)); if (identityProvider == IdentityProviderEnum.Twitter) diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Sun Jun 12 01:40:09 2011 -0300 @@ -19,7 +19,7 @@ var personaService = new PersonaService(personaRepository.Object); - Assert.IsTrue(personaService.Validate(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); personaRepository.Verify(r=>r.Save(It.IsAny()), Times.Once()); Assert.IsNotNull(persona); Assert.AreEqual(1, persona.Cuentas.Count()); @@ -32,7 +32,7 @@ personaRepository.Setup(r => r.GetCuenta(IdentityProviderEnum.Twitter, "nelopauselli")).Returns(cuenta); Assert.AreEqual(1, persona.Cuentas.Count()); - Assert.IsTrue(personaService.Validate(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); Assert.AreEqual(1, persona.Cuentas.Count()); } diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Tests/TestBase.cs --- a/Agendas/trunk/src/Agendas.Tests/TestBase.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TestBase.cs Sun Jun 12 01:40:09 2011 -0300 @@ -43,8 +43,11 @@ seguridad.Setup(s => s.GetUserName()).Returns(logonName); IPersonaRepository personaRepository = new PersonaRepository(); - var service = new PersonaService(personaRepository); - service.Validate(identityProvider, username, nombre); + var persona = new Persona(nombre); + persona.AddCuenta(new Cuenta(identityProvider, username)); + persona.Twitter = username; + + personaRepository.Save(persona); IdentityContext.Init(seguridad.Object, personaRepository); diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs Sun Jun 12 01:40:09 2011 -0300 @@ -1,5 +1,4 @@ -using System; -using System.Web.Mvc; +using System.Web.Mvc; using System.Web.Routing; using System.Web.Security; using AltNetHispano.Agendas.Domain; @@ -66,26 +65,24 @@ var url = Request.Url.Scheme + "://" + Request.Url.Host + (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; - Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); + return Redirect(oAuth.AuthorizationLinkGet(url).ToString()); } - else + + var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); + if (response.Length > 0) { - var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); - if (response.Length > 0) - { - var username = OAuthTwitter.GetResponseContent(response, "screen_name"); - var nombre = OAuthTwitter.GetResponseContent(response, "name"); + var username = OAuthTwitter.GetResponseContent(response, "screen_name"); + var nombre = OAuthTwitter.GetResponseContent(response, "name"); - var personaService = AgendaFactory.GetPersonaService(); - if (personaService.Validate(IdentityProviderEnum.Twitter, username, nombre)) - { - FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.Twitter]+username, false); - return RedirectToAction("Index", "Home"); - } - ModelState.AddModelError("", "The user name or password provided is incorrect."); - } + var personaService = AgendaFactory.GetPersonaService(); + personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, username, nombre); + + FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.Twitter]+username, false); + return RedirectToAction("Index", "Home"); } + ModelState.AddModelError("", "The user name or password provided is incorrect."); + return RedirectToAction("LogOn"); } @@ -111,7 +108,7 @@ } [HttpPost] - public ActionResult Register(RegisterModel model) + public ActionResult Register(RegisterModel model, string returnUrl) { if (ModelState.IsValid) { @@ -121,9 +118,11 @@ if (createStatus == MembershipCreateStatus.Success) { var personaService = AgendaFactory.GetPersonaService(); - if (personaService.Validate(IdentityProviderEnum.BuiltIn, model.UserName, model.Nombre)) + if (personaService.CreateIfNotExist(IdentityProviderEnum.BuiltIn, model.UserName, model.Nombre)) { FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.BuiltIn] + model.UserName, false); + if (Url.IsLocalUrl(returnUrl)) + return Redirect(returnUrl); return RedirectToAction("Index", "Home"); } } diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Sun Jun 12 01:40:09 2011 -0300 @@ -58,20 +58,18 @@ var url = Request.Url.Scheme + "://" + Request.Url.Host + (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; - Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); + return Redirect(oAuth.AuthorizationLinkGet(url).ToString()); } - else + + var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); + if (response.Length > 0) { - var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); - if (response.Length > 0) - { - var username =OAuthTwitter.GetResponseContent(response, "screen_name"); + var username = OAuthTwitter.GetResponseContent(response, "screen_name"); - var personaService = AgendaFactory.GetPersonaService(); + var personaService = AgendaFactory.GetPersonaService(); - personaService.AddCuenta(IdentityProviderEnum.Twitter, username); - return RedirectToAction("Index"); - } + personaService.AddCuenta(IdentityProviderEnum.Twitter, username); + return RedirectToAction("Index"); } return RedirectToAction("Index"); } diff -r 1ce71844ffa4 -r 7a2eeb9e9bf9 Agendas/trunk/src/Agendas.Web/Views/Perfil/Index.cshtml --- a/Agendas/trunk/src/Agendas.Web/Views/Perfil/Index.cshtml Sat Jun 11 12:50:44 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Perfil/Index.cshtml Sun Jun 12 01:40:09 2011 -0300 @@ -28,5 +28,7 @@

@Html.ActionLink("Asociar cuenta de Twitter", "AddTwitterAccount")
-@Html.ActionLink("Asociar cuenta interna", "AddBuiltInAccount") +@Html.ActionLink("Asociar cuenta de interna", "AddBuiltInAccount") +
+@Html.ActionLink("Crear cuenta interna asociada", "Register", "Account", new { returnUrl = Url.Action("Index") }, null)