Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs @ 94:db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Se agrega la clase Cuenta para identificar cada una de las cuentas con que se puede autenticar una persona
Alta Automatica de cuentas de twitter creando la persona
author | Nelo@Kenia.neluz.int |
---|---|
date | Sat, 04 Jun 2011 12:11:17 -0300 |
parents | 65f0b3d70c18 |
children | 1eb5a0e531bf |
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 { | |
41 if (MembershipService.ValidateUser(model.UserName, model.Password)) | |
42 { | |
43 FormsService.SignIn(model.UserName, model.RememberMe); | |
44 if (Url.IsLocalUrl(returnUrl)) | |
45 { | |
46 return Redirect(returnUrl); | |
47 } | |
48 else | |
49 { | |
50 return RedirectToAction("Index", "Home"); | |
51 } | |
52 } | |
53 else | |
54 { | |
55 ModelState.AddModelError("", "The user name or password provided is incorrect."); | |
56 } | |
57 } | |
58 | |
59 // If we got this far, something failed, redisplay form | |
60 return View(model); | |
61 } | |
62 | |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
63 public ActionResult TwitterLogOn() |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
64 { |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
65 var oAuth = new OAuthTwitter(); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
66 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
67 if (Request["oauth_token"] == null) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
68 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
69 //Redirect the user to Twitter for authorization. |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
70 //Using oauth_callback for local testing. |
92
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
71 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
|
72 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
|
73 (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
|
74 |
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
75 oAuth.CallBackUrl = url; |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
76 Response.Redirect(oAuth.AuthorizationLinkGet()); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
77 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
78 else |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
79 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
80 //Get the access token and secret. |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
81 oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
82 if (oAuth.TokenSecret.Length > 0) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
83 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
84 //We now have the credentials, so make a call to the Twitter API. |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
85 const string url = "http://twitter.com/account/verify_credentials.xml"; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
86 string xml = oAuth.OAuthWebRequest(OAuthTwitter.Method.GET, url, String.Empty); |
90
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 var username = GetXmlContent(xml, "screen_name"); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
89 var nombre = GetXmlContent(xml, "name"); |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
90 |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
91 var personaService = AgendaFactory.GetPersonaService(); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
92 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
|
93 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
94 FormsService.SignIn(username, false); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
95 return RedirectToAction("Index", "Home"); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
96 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
97 ModelState.AddModelError("", "The user name or password provided is incorrect."); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
93
diff
changeset
|
98 |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
99 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
100 //POST Test |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
101 //url = "http://twitter.com/statuses/update.xml"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
102 //xml = oAuth.oAuthWebRequest(oAuthTwitter.Method.POST, url, "status=" + oAuth.UrlEncode("Hello @swhitley - Testing the .NET oAuth API")); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
103 //apiResponse.InnerHtml = Server.HtmlEncode(xml); |
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 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
106 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
107 return RedirectToAction("LogOn"); |
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 |
93 | 110 private static string GetXmlContent(string xml, string tagName) |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
111 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
112 var tagStart = "<" + tagName + ">"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
113 var tagEnd = "</" + tagName + ">"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
114 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
115 var start = xml.IndexOf(tagStart)+tagStart.Length; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
116 if (start>tagStart.Length) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
117 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
118 var end = xml.IndexOf(tagEnd, start); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
119 if (end>0) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
120 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
121 return xml.Substring(start, end - start); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
122 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
123 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
124 return string.Empty; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
125 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
126 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
127 // ************************************** |
10 | 128 // URL: /Account/LogOff |
129 // ************************************** | |
130 | |
131 public ActionResult LogOff() | |
132 { | |
133 FormsService.SignOut(); | |
134 | |
135 return RedirectToAction("Index", "Home"); | |
136 } | |
137 | |
138 // ************************************** | |
139 // URL: /Account/Register | |
140 // ************************************** | |
141 | |
142 public ActionResult Register() | |
143 { | |
144 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
145 return View(); | |
146 } | |
147 | |
148 [HttpPost] | |
149 public ActionResult Register(RegisterModel model) | |
150 { | |
151 if (ModelState.IsValid) | |
152 { | |
153 // Attempt to register the user | |
154 MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); | |
155 | |
156 if (createStatus == MembershipCreateStatus.Success) | |
157 { | |
158 FormsService.SignIn(model.UserName, false /* createPersistentCookie */); | |
159 return RedirectToAction("Index", "Home"); | |
160 } | |
161 else | |
162 { | |
163 ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); | |
164 } | |
165 } | |
166 | |
167 // If we got this far, something failed, redisplay form | |
168 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
169 return View(model); | |
170 } | |
171 | |
172 // ************************************** | |
173 // URL: /Account/ChangePassword | |
174 // ************************************** | |
175 | |
176 [Authorize] | |
177 public ActionResult ChangePassword() | |
178 { | |
179 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
180 return View(); | |
181 } | |
182 | |
183 [Authorize] | |
184 [HttpPost] | |
185 public ActionResult ChangePassword(ChangePasswordModel model) | |
186 { | |
187 if (ModelState.IsValid) | |
188 { | |
189 if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) | |
190 { | |
191 return RedirectToAction("ChangePasswordSuccess"); | |
192 } | |
193 else | |
194 { | |
195 ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); | |
196 } | |
197 } | |
198 | |
199 // If we got this far, something failed, redisplay form | |
200 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
201 return View(model); | |
202 } | |
203 | |
204 // ************************************** | |
205 // URL: /Account/ChangePasswordSuccess | |
206 // ************************************** | |
207 | |
208 public ActionResult ChangePasswordSuccess() | |
209 { | |
210 return View(); | |
211 } | |
212 | |
213 } | |
214 } |