Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/AccountController.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 | 1ee5711256db |
children | 7a2eeb9e9bf9 |
rev | line source |
---|---|
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
1 using System; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
2 using System.Web.Mvc; |
10 | 3 using System.Web.Routing; |
4 using System.Web.Security; | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
5 using AltNetHispano.Agendas.Domain; |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
6 using AltNetHispano.Agendas.Factories; |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
7 using AltNetHispano.Agendas.Twitter; |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
10
diff
changeset
|
8 using AltNetHispano.Agendas.Web.Models; |
93 | 9 using AltNetHispano.Agendas.Web.Services; |
10 | 10 |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
10
diff
changeset
|
11 namespace AltNetHispano.Agendas.Web.Controllers |
10 | 12 { |
13 public class AccountController : Controller | |
14 { | |
15 | |
16 public IFormsAuthenticationService FormsService { get; set; } | |
17 public IMembershipService MembershipService { get; set; } | |
18 | |
19 protected override void Initialize(RequestContext requestContext) | |
20 { | |
21 if (FormsService == null) { FormsService = new FormsAuthenticationService(); } | |
22 if (MembershipService == null) { MembershipService = new AccountMembershipService(); } | |
23 | |
24 base.Initialize(requestContext); | |
25 } | |
26 | |
27 // ************************************** | |
28 // URL: /Account/LogOn | |
29 // ************************************** | |
30 | |
31 public ActionResult LogOn() | |
32 { | |
33 return View(); | |
34 } | |
35 | |
36 [HttpPost] | |
37 public ActionResult LogOn(LogOnModel model, string returnUrl) | |
38 { | |
39 if (ModelState.IsValid) | |
40 { | |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
41 if (MembershipService.ValidateUser(model.UserName, model.Password)) |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
42 { |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
43 var personaService = AgendaFactory.GetPersonaService(); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
44 if (personaService.Validate(IdentityProviderEnum.BuiltIn, model.UserName)) |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
45 { |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
46 FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.BuiltIn] + model.UserName, model.RememberMe); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
47 if (Url.IsLocalUrl(returnUrl)) |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
48 return Redirect(returnUrl); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
49 return RedirectToAction("Index", "Home"); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
50 } |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
51 } |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
52 ModelState.AddModelError("", "The user name or password provided is incorrect."); |
10 | 53 } |
54 | |
55 // If we got this far, something failed, redisplay form | |
56 return View(model); | |
57 } | |
58 | |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
59 public ActionResult TwitterLogOn() |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
60 { |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
61 var oAuth = new OAuthTwitter(); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
62 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
63 if (Request["oauth_token"] == null) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
64 { |
92
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
65 var action = Url.Action("TwitterLogOn"); |
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
66 var url = Request.Url.Scheme + "://" + Request.Url.Host + |
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
67 (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; |
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
68 |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
69 Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
70 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
71 else |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
72 { |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
73 var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
74 if (response.Length > 0) |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
75 { |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
107
diff
changeset
|
76 var username = OAuthTwitter.GetResponseContent(response, "screen_name"); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
107
diff
changeset
|
77 var nombre = OAuthTwitter.GetResponseContent(response, "name"); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
78 |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
79 var personaService = AgendaFactory.GetPersonaService(); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
80 if (personaService.Validate(IdentityProviderEnum.Twitter, username, nombre)) |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
81 { |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
82 FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.Twitter]+username, false); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
83 return RedirectToAction("Index", "Home"); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
84 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
85 ModelState.AddModelError("", "The user name or password provided is incorrect."); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
86 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
87 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
88 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
89 return RedirectToAction("LogOn"); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
90 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
91 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
92 // ************************************** |
10 | 93 // URL: /Account/LogOff |
94 // ************************************** | |
95 | |
96 public ActionResult LogOff() | |
97 { | |
98 FormsService.SignOut(); | |
99 | |
100 return RedirectToAction("Index", "Home"); | |
101 } | |
102 | |
103 // ************************************** | |
104 // URL: /Account/Register | |
105 // ************************************** | |
106 | |
107 public ActionResult Register() | |
108 { | |
109 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
110 return View(); | |
111 } | |
112 | |
113 [HttpPost] | |
114 public ActionResult Register(RegisterModel model) | |
115 { | |
116 if (ModelState.IsValid) | |
117 { | |
118 // Attempt to register the user | |
119 MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); | |
120 | |
121 if (createStatus == MembershipCreateStatus.Success) | |
122 { | |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
123 var personaService = AgendaFactory.GetPersonaService(); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
124 if (personaService.Validate(IdentityProviderEnum.BuiltIn, model.UserName, model.Nombre)) |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
125 { |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
126 FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.BuiltIn] + model.UserName, false); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
127 return RedirectToAction("Index", "Home"); |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
128 } |
10 | 129 } |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
130 ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); |
10 | 131 } |
132 | |
133 // If we got this far, something failed, redisplay form | |
134 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
135 return View(model); | |
136 } | |
137 | |
138 // ************************************** | |
139 // URL: /Account/ChangePassword | |
140 // ************************************** | |
141 | |
142 [Authorize] | |
143 public ActionResult ChangePassword() | |
144 { | |
145 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
146 return View(); | |
147 } | |
148 | |
149 [Authorize] | |
150 [HttpPost] | |
151 public ActionResult ChangePassword(ChangePasswordModel model) | |
152 { | |
153 if (ModelState.IsValid) | |
154 { | |
155 if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) | |
156 { | |
157 return RedirectToAction("ChangePasswordSuccess"); | |
158 } | |
159 else | |
160 { | |
161 ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); | |
162 } | |
163 } | |
164 | |
165 // If we got this far, something failed, redisplay form | |
166 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
167 return View(model); | |
168 } | |
169 | |
170 // ************************************** | |
171 // URL: /Account/ChangePasswordSuccess | |
172 // ************************************** | |
173 | |
174 public ActionResult ChangePasswordSuccess() | |
175 { | |
176 return View(); | |
177 } | |
178 | |
179 } | |
180 } |