Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs @ 92:7027cda13de3
Armado de la url de retorno en base a la url del request
author | Nelo@Kenia.neluz.int |
---|---|
date | Fri, 03 Jun 2011 23:58:03 -0300 |
parents | d1688622fa88 |
children | 65f0b3d70c18 |
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. |
92
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
68 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
|
69 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
|
70 (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
|
71 |
7027cda13de3
Armado de la url de retorno en base a la url del request
Nelo@Kenia.neluz.int
parents:
90
diff
changeset
|
72 oAuth.CallBackUrl = url; |
90
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
73 Response.Redirect(oAuth.AuthorizationLinkGet()); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
74 } |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
75 else |
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 //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
|
78 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
|
79 if (oAuth.TokenSecret.Length > 0) |
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 //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
|
82 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
|
83 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
|
84 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
85 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
|
86 //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
|
87 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
88 FormsService.SignIn(username, false); |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
89 return RedirectToAction("Index", "Home"); |
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 //POST Test |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
92 //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
|
93 //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
|
94 //apiResponse.InnerHtml = Server.HtmlEncode(xml); |
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 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
98 return RedirectToAction("LogOn"); |
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 |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
101 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
|
102 { |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
103 var tagStart = "<" + tagName + ">"; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
104 var tagEnd = "</" + tagName + ">"; |
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 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
|
107 if (start>tagStart.Length) |
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 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
|
110 if (end>0) |
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 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
|
113 } |
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 return string.Empty; |
d1688622fa88
Autenticando con twitter (falta emprolijar el código, pero autentica!)
Nelo@Kenia.neluz.int
parents:
34
diff
changeset
|
116 } |
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 // ************************************** |
10 | 119 // URL: /Account/LogOff |
120 // ************************************** | |
121 | |
122 public ActionResult LogOff() | |
123 { | |
124 FormsService.SignOut(); | |
125 | |
126 return RedirectToAction("Index", "Home"); | |
127 } | |
128 | |
129 // ************************************** | |
130 // URL: /Account/Register | |
131 // ************************************** | |
132 | |
133 public ActionResult Register() | |
134 { | |
135 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
136 return View(); | |
137 } | |
138 | |
139 [HttpPost] | |
140 public ActionResult Register(RegisterModel model) | |
141 { | |
142 if (ModelState.IsValid) | |
143 { | |
144 // Attempt to register the user | |
145 MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); | |
146 | |
147 if (createStatus == MembershipCreateStatus.Success) | |
148 { | |
149 FormsService.SignIn(model.UserName, false /* createPersistentCookie */); | |
150 return RedirectToAction("Index", "Home"); | |
151 } | |
152 else | |
153 { | |
154 ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); | |
155 } | |
156 } | |
157 | |
158 // If we got this far, something failed, redisplay form | |
159 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
160 return View(model); | |
161 } | |
162 | |
163 // ************************************** | |
164 // URL: /Account/ChangePassword | |
165 // ************************************** | |
166 | |
167 [Authorize] | |
168 public ActionResult ChangePassword() | |
169 { | |
170 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
171 return View(); | |
172 } | |
173 | |
174 [Authorize] | |
175 [HttpPost] | |
176 public ActionResult ChangePassword(ChangePasswordModel model) | |
177 { | |
178 if (ModelState.IsValid) | |
179 { | |
180 if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) | |
181 { | |
182 return RedirectToAction("ChangePasswordSuccess"); | |
183 } | |
184 else | |
185 { | |
186 ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); | |
187 } | |
188 } | |
189 | |
190 // If we got this far, something failed, redisplay form | |
191 ViewBag.PasswordLength = MembershipService.MinPasswordLength; | |
192 return View(model); | |
193 } | |
194 | |
195 // ************************************** | |
196 // URL: /Account/ChangePasswordSuccess | |
197 // ************************************** | |
198 | |
199 public ActionResult ChangePasswordSuccess() | |
200 { | |
201 return View(); | |
202 } | |
203 | |
204 } | |
205 } |