Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs @ 107:1ee5711256db
Utilizando Twitterizer en adapter a Twitter
author | Nelo@Kenia.neluz.int |
---|---|
date | Tue, 07 Jun 2011 21:03:56 -0300 |
parents | 1eb5a0e531bf |
children | 0bca45e1e664 |
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 { |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
76 var username = GetResponseContent(response, "screen_name"); |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
77 var nombre = 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 |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
92 private static string GetResponseContent(string response, string tagName) |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
93 { |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
94 var tagStart = "\"" + tagName + "\":"; |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
95 var tagEnd = ","; |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
96 |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
97 var start = response.IndexOf(tagStart) + tagStart.Length; |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
98 if (start > tagStart.Length) |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
99 { |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
100 var end = response.IndexOf(tagEnd, start); |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
101 if (end > 0) |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
102 { |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
103 return response.Substring(start + 1, end - start - 2); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
104 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
105 } |
107
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
106 return string.Empty; |
1ee5711256db
Utilizando Twitterizer en adapter a Twitter
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
107 } |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
108 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
109 // ************************************** |
10 | 110 // URL: /Account/LogOff |
111 // ************************************** | |
112 | |
113 public ActionResult LogOff() | |
114 { | |
115 FormsService.SignOut(); | |
116 | |
117 return RedirectToAction("Index", "Home"); | |
118 } | |
119 | |
120 // ************************************** | |
121 // URL: /Account/Register | |
122 // ************************************** | |
123 | |
124 public ActionResult Register() | |
125 { | |
126 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
127 return View(); | |
128 } | |
129 | |
130 [HttpPost] | |
131 public ActionResult Register(RegisterModel model) | |
132 { | |
133 if (ModelState.IsValid) | |
134 { | |
135 // Attempt to register the user | |
136 MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); | |
137 | |
138 if (createStatus == MembershipCreateStatus.Success) | |
139 { | |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
140 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
|
141 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
|
142 { |
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
143 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
|
144 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
|
145 } |
10 | 146 } |
96
1eb5a0e531bf
Funcionamiento con cuenta interna y con cuenta de twitter, falta unificar usuarios
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
147 ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); |
10 | 148 } |
149 | |
150 // If we got this far, something failed, redisplay form | |
151 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
152 return View(model); | |
153 } | |
154 | |
155 // ************************************** | |
156 // URL: /Account/ChangePassword | |
157 // ************************************** | |
158 | |
159 [Authorize] | |
160 public ActionResult ChangePassword() | |
161 { | |
162 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
163 return View(); | |
164 } | |
165 | |
166 [Authorize] | |
167 [HttpPost] | |
168 public ActionResult ChangePassword(ChangePasswordModel model) | |
169 { | |
170 if (ModelState.IsValid) | |
171 { | |
172 if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) | |
173 { | |
174 return RedirectToAction("ChangePasswordSuccess"); | |
175 } | |
176 else | |
177 { | |
178 ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); | |
179 } | |
180 } | |
181 | |
182 // If we got this far, something failed, redisplay form | |
183 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
184 return View(model); | |
185 } | |
186 | |
187 // ************************************** | |
188 // URL: /Account/ChangePasswordSuccess | |
189 // ************************************** | |
190 | |
191 public ActionResult ChangePasswordSuccess() | |
192 { | |
193 return View(); | |
194 } | |
195 | |
196 } | |
197 } |