Mercurial > altnet-hispano
view 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 |
line wrap: on
line source
using System; using System.Web.Mvc; using System.Web.Routing; using System.Web.Security; using AltNetHispano.Agendas.Twitter; using AltNetHispano.Agendas.Web.Models; namespace AltNetHispano.Agendas.Web.Controllers { public class AccountController : Controller { public IFormsAuthenticationService FormsService { get; set; } public IMembershipService MembershipService { get; set; } protected override void Initialize(RequestContext requestContext) { if (FormsService == null) { FormsService = new FormsAuthenticationService(); } if (MembershipService == null) { MembershipService = new AccountMembershipService(); } base.Initialize(requestContext); } // ************************************** // URL: /Account/LogOn // ************************************** public ActionResult LogOn() { return View(); } [HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } // If we got this far, something failed, redisplay form return View(model); } public ActionResult TwitterLogOn() { var oAuth = new oAuthTwitter(); if (Request["oauth_token"] == null) { //Redirect the user to Twitter for authorization. //Using oauth_callback for local testing. oAuth.CallBackUrl = "http://localhost:1424/Account/TwitterLogOn"; Response.Redirect(oAuth.AuthorizationLinkGet()); } else { //Get the access token and secret. oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); if (oAuth.TokenSecret.Length > 0) { //We now have the credentials, so make a call to the Twitter API. const string url = "http://twitter.com/account/verify_credentials.xml"; string xml = oAuth.oAuthWebRequest(oAuthTwitter.Method.GET, url, String.Empty); var username = GetXmlContent(xml, "screen_name"); //TODO: Validar que este usuario de twitter corresponde a un usuario del sitio FormsService.SignIn(username, false); return RedirectToAction("Index", "Home"); //POST Test //url = "http://twitter.com/statuses/update.xml"; //xml = oAuth.oAuthWebRequest(oAuthTwitter.Method.POST, url, "status=" + oAuth.UrlEncode("Hello @swhitley - Testing the .NET oAuth API")); //apiResponse.InnerHtml = Server.HtmlEncode(xml); } } return RedirectToAction("LogOn"); } private string GetXmlContent(string xml, string tagName) { var tagStart = "<" + tagName + ">"; var tagEnd = "</" + tagName + ">"; var start = xml.IndexOf(tagStart)+tagStart.Length; if (start>tagStart.Length) { var end = xml.IndexOf(tagEnd, start); if (end>0) { return xml.Substring(start, end - start); } } return string.Empty; } // ************************************** // URL: /Account/LogOff // ************************************** public ActionResult LogOff() { FormsService.SignOut(); return RedirectToAction("Index", "Home"); } // ************************************** // URL: /Account/Register // ************************************** public ActionResult Register() { ViewBag.PasswordLength = MembershipService.MinPasswordLength; return View(); } [HttpPost] public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { // Attempt to register the user MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); if (createStatus == MembershipCreateStatus.Success) { FormsService.SignIn(model.UserName, false /* createPersistentCookie */); return RedirectToAction("Index", "Home"); } else { ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); } } // If we got this far, something failed, redisplay form ViewBag.PasswordLength = MembershipService.MinPasswordLength; return View(model); } // ************************************** // URL: /Account/ChangePassword // ************************************** [Authorize] public ActionResult ChangePassword() { ViewBag.PasswordLength = MembershipService.MinPasswordLength; return View(); } [Authorize] [HttpPost] public ActionResult ChangePassword(ChangePasswordModel model) { if (ModelState.IsValid) { if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) { return RedirectToAction("ChangePasswordSuccess"); } else { ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); } } // If we got this far, something failed, redisplay form ViewBag.PasswordLength = MembershipService.MinPasswordLength; return View(model); } // ************************************** // URL: /Account/ChangePasswordSuccess // ************************************** public ActionResult ChangePasswordSuccess() { return View(); } } }