Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs @ 206:beeb06da4398
Al querés ingresar a un lugar que requiere autenticación y luego de autenticarse, vuelve a la página donde quería entrar
author | nelopauselli |
---|---|
date | Wed, 24 Aug 2011 10:38:13 -0300 |
parents | 222362c29416 |
children |
rev | line source |
---|---|
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
1 using System; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
2 using System.Linq; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
3 using System.Web.Mvc; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
4 using AltNetHispano.Agendas.Domain; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
5 using AltNetHispano.Agendas.Factories; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
6 using AltNetHispano.Agendas.Twitter; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
7 using AltNetHispano.Agendas.Web.Models; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
8 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
9 namespace AltNetHispano.Agendas.Web.Controllers |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
10 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
11 public class PerfilController : Controller |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
12 { |
179 | 13 [CustomAuthorize(Roles = Roles.Usuario)] |
14 public ActionResult Index() | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
15 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
16 var persona = IdentityContext.GetUsuario(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
17 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
18 if (persona == null) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
19 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
20 ModelState.AddModelError(string.Empty, "No fue posible recuperar su perfil, vuelva a autenticarse y reintente"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
21 return View(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
22 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
23 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
24 var model = new PerfilIndexModel |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
25 { |
168 | 26 Id = persona.Id, |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
27 DisplayName = persona.Nombre, |
168 | 28 Email = persona.Mail, |
29 Blog = persona.Blog, | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
30 Cuentas = from c in persona.Cuentas |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
31 select |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
32 new CuentaDto |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
33 {IdentityProvider = c.IdentityProvider.ToString(), UserName = c.LogonName} |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
34 }; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
35 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
36 return View(model); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
37 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
38 |
179 | 39 [CustomAuthorize(Roles = Roles.Usuario)] |
40 public ActionResult AddGoogleAccount() | |
142 | 41 { |
42 throw new NotImplementedException(); | |
43 } | |
44 | |
179 | 45 [CustomAuthorize(Roles = Roles.Usuario)] |
46 public ActionResult AddTwitterAccount() | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
47 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
48 var oAuth = new OAuthTwitter(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
49 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
50 if (Request["oauth_token"] == null) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
51 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
52 var action = Url.Action("AddTwitterAccount"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
53 var url = Request.Url.Scheme + "://" + Request.Url.Host + |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
54 (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
55 |
115 | 56 return Redirect(oAuth.AuthorizationLinkGet(url).ToString()); |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
57 } |
115 | 58 |
59 var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); | |
60 if (response.Length > 0) | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
61 { |
115 | 62 var username = OAuthTwitter.GetResponseContent(response, "screen_name"); |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
63 |
115 | 64 var personaService = AgendaFactory.GetPersonaService(); |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
65 |
115 | 66 personaService.AddCuenta(IdentityProviderEnum.Twitter, username); |
67 return RedirectToAction("Index"); | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
68 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
69 return RedirectToAction("Index"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
70 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
71 |
179 | 72 [CustomAuthorize(Roles = Roles.Usuario)] |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
73 public ActionResult Remove(string identityProvider, string username) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
74 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
75 var personaService = AgendaFactory.GetPersonaService(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
76 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
77 IdentityProviderEnum ip; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
78 if (!Enum.TryParse<IdentityProviderEnum>(identityProvider, out ip)) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
79 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
80 ModelState.AddModelError("IdentityProvider", "No se reconoce el identity provider" + identityProvider); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
81 return View("Index"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
82 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
83 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
84 personaService.RemoveCuenta(ip, username); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
85 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
86 return RedirectToAction("Index"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
87 } |
179 | 88 |
89 [CustomAuthorize(Roles = Roles.Usuario)] | |
90 public ActionResult Modificar() | |
91 { | |
92 var persona = IdentityContext.GetUsuario(); | |
93 if (persona == null) | |
94 { | |
95 this.AddError("No se encontró la persona que intenta modificar"); | |
96 return RedirectToAction("Index"); | |
97 } | |
98 | |
99 var model = new PerfilEditModel | |
100 { | |
101 Nombre = persona.Nombre, | |
102 Twitter = persona.Twitter, | |
103 EMail = persona.Mail, | |
104 Blog = persona.Blog | |
105 }; | |
106 | |
107 return View("Defaulteditor", model); | |
108 } | |
109 | |
110 [HttpPost] | |
111 [CustomAuthorize(Roles = Roles.Usuario)] | |
112 public ActionResult Modificar(PerfilEditModel model) | |
113 { | |
114 if (ModelState.IsValid) | |
115 { | |
116 var persona = IdentityContext.GetUsuario(); | |
117 | |
118 var personas = AgendaFactory.GetPersonaService(); | |
180 | 119 var r = personas.Update(persona.Id, model.Nombre, model.Twitter, model.EMail, model.Blog, null); |
179 | 120 if (r.Succeful) |
121 { | |
122 this.AddNotification("Los datos fueron guardados"); | |
123 return RedirectToAction("Index"); | |
124 } | |
125 this.AddError(r.Message); | |
126 } | |
127 | |
128 return View("Defaulteditor", model); | |
129 } | |
130 } | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
131 } |