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