Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs @ 90:d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
author | Nelo@Kenia.neluz.int |
---|---|
date | Fri, 03 Jun 2011 21:35:59 -0300 |
parents | 475be11edf56 |
children | 7027cda13de3 |
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; | |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
5 using AltNetHispano.Agendas.Twitter; |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
10
diff
changeset
|
6 using AltNetHispano.Agendas.Web.Models; |
10 | 7 |
34
475be11edf56
Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents:
10
diff
changeset
|
8 namespace AltNetHispano.Agendas.Web.Controllers |
10 | 9 { |
10 public class AccountController : Controller | |
11 { | |
12 | |
13 public IFormsAuthenticationService FormsService { get; set; } | |
14 public IMembershipService MembershipService { get; set; } | |
15 | |
16 protected override void Initialize(RequestContext requestContext) | |
17 { | |
18 if (FormsService == null) { FormsService = new FormsAuthenticationService(); } | |
19 if (MembershipService == null) { MembershipService = new AccountMembershipService(); } | |
20 | |
21 base.Initialize(requestContext); | |
22 } | |
23 | |
24 // ************************************** | |
25 // URL: /Account/LogOn | |
26 // ************************************** | |
27 | |
28 public ActionResult LogOn() | |
29 { | |
30 return View(); | |
31 } | |
32 | |
33 [HttpPost] | |
34 public ActionResult LogOn(LogOnModel model, string returnUrl) | |
35 { | |
36 if (ModelState.IsValid) | |
37 { | |
38 if (MembershipService.ValidateUser(model.UserName, model.Password)) | |
39 { | |
40 FormsService.SignIn(model.UserName, model.RememberMe); | |
41 if (Url.IsLocalUrl(returnUrl)) | |
42 { | |
43 return Redirect(returnUrl); | |
44 } | |
45 else | |
46 { | |
47 return RedirectToAction("Index", "Home"); | |
48 } | |
49 } | |
50 else | |
51 { | |
52 ModelState.AddModelError("", "The user name or password provided is incorrect."); | |
53 } | |
54 } | |
55 | |
56 // If we got this far, something failed, redisplay form | |
57 return View(model); | |
58 } | |
59 | |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
60 public ActionResult TwitterLogOn() |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
61 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
62 var oAuth = new oAuthTwitter(); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
63 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
64 if (Request["oauth_token"] == null) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
65 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
66 //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
|
67 //Using oauth_callback for local testing. |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
68 oAuth.CallBackUrl = "http://localhost:1424/Account/TwitterLogOn"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
69 Response.Redirect(oAuth.AuthorizationLinkGet()); |
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 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
73 //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
|
74 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
|
75 if (oAuth.TokenSecret.Length > 0) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
76 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
77 //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
|
78 const string url = "http://twitter.com/account/verify_credentials.xml"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
79 string xml = oAuth.oAuthWebRequest(oAuthTwitter.Method.GET, url, String.Empty); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
80 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
81 var username = GetXmlContent(xml, "screen_name"); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
82 //TODO: Validar que este usuario de twitter corresponde a un usuario del sitio |
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 FormsService.SignIn(username, false); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
85 return RedirectToAction("Index", "Home"); |
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 //POST Test |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
88 //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
|
89 //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
|
90 //apiResponse.InnerHtml = Server.HtmlEncode(xml); |
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 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
93 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
94 return RedirectToAction("LogOn"); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
95 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
96 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
97 private string GetXmlContent(string xml, string tagName) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
98 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
99 var tagStart = "<" + tagName + ">"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
100 var tagEnd = "</" + tagName + ">"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
101 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
102 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
|
103 if (start>tagStart.Length) |
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 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
|
106 if (end>0) |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
107 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
108 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
|
109 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
110 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
111 return string.Empty; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
112 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
113 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
114 // ************************************** |
10 | 115 // URL: /Account/LogOff |
116 // ************************************** | |
117 | |
118 public ActionResult LogOff() | |
119 { | |
120 FormsService.SignOut(); | |
121 | |
122 return RedirectToAction("Index", "Home"); | |
123 } | |
124 | |
125 // ************************************** | |
126 // URL: /Account/Register | |
127 // ************************************** | |
128 | |
129 public ActionResult Register() | |
130 { | |
131 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
132 return View(); | |
133 } | |
134 | |
135 [HttpPost] | |
136 public ActionResult Register(RegisterModel model) | |
137 { | |
138 if (ModelState.IsValid) | |
139 { | |
140 // Attempt to register the user | |
141 MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); | |
142 | |
143 if (createStatus == MembershipCreateStatus.Success) | |
144 { | |
145 FormsService.SignIn(model.UserName, false /* createPersistentCookie */); | |
146 return RedirectToAction("Index", "Home"); | |
147 } | |
148 else | |
149 { | |
150 ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); | |
151 } | |
152 } | |
153 | |
154 // If we got this far, something failed, redisplay form | |
155 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
156 return View(model); | |
157 } | |
158 | |
159 // ************************************** | |
160 // URL: /Account/ChangePassword | |
161 // ************************************** | |
162 | |
163 [Authorize] | |
164 public ActionResult ChangePassword() | |
165 { | |
166 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
167 return View(); | |
168 } | |
169 | |
170 [Authorize] | |
171 [HttpPost] | |
172 public ActionResult ChangePassword(ChangePasswordModel model) | |
173 { | |
174 if (ModelState.IsValid) | |
175 { | |
176 if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) | |
177 { | |
178 return RedirectToAction("ChangePasswordSuccess"); | |
179 } | |
180 else | |
181 { | |
182 ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); | |
183 } | |
184 } | |
185 | |
186 // If we got this far, something failed, redisplay form | |
187 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
188 return View(model); | |
189 } | |
190 | |
191 // ************************************** | |
192 // URL: /Account/ChangePasswordSuccess | |
193 // ************************************** | |
194 | |
195 public ActionResult ChangePasswordSuccess() | |
196 { | |
197 return View(); | |
198 } | |
199 | |
200 } | |
201 } |