Example #1
0
        public ActionResult CallBack(string oauth_token, string oauth_verifier, string ReturnUrl)
        {
            if (string.IsNullOrEmpty(oauth_token) || string.IsNullOrEmpty(oauth_verifier))
            {
                UriBuilder builder = new UriBuilder(this.Request.Url);
                builder.Query = string.Concat(
                    builder.Query,
                    string.IsNullOrEmpty(builder.Query) ? string.Empty : "&",
                    "ReturnUrl=",
                    ReturnUrl);

                string token = OAuthUtility.GetRequestToken(
                    ConfigurationManager.AppSettings["TwitterConsumerKey"],
                    ConfigurationManager.AppSettings["TwitterConsumerSecret"],
                    builder.ToString()).Token;

                return Redirect(OAuthUtility.BuildAuthorizationUri(token, true).ToString());
            }

            var tokens = OAuthUtility.GetAccessToken(
            ConfigurationManager.AppSettings["TwitterConsumerKey"],
            ConfigurationManager.AppSettings["TwitterConsumerSecret"],
            oauth_token,
            oauth_verifier);

            //Realizamos la busqueda del usuario.
            Usuario usuario = (from u in db.Usuarios
                               where u.TwitterUserId.Equals(tokens.UserId.ToString())
                               select u).FirstOrDefault();

            if (usuario == null)
            {
                usuario = new Usuario()
                {
                    Nick = tokens.ScreenName,
                    TwitterUserId = tokens.UserId.ToString(),
                    TwitterAccessKey = tokens.Token,
                    TwitterAccessSecret = tokens.TokenSecret,
                    FechaCreacion = DateTime.UtcNow,
                    IsAdmin = false
                };

                db.AddToUsuarios(usuario);

                db.SaveChanges();
            }

            //Logueamos al usuario.
            EntrepanMembershipProvider EntrepanMembership = new EntrepanMembershipProvider();
            EntrepanMembership.LogInUser(usuario.TwitterUserId, usuario.Id, usuario.Nick, usuario.IsAdmin, false);

            if (string.IsNullOrEmpty(ReturnUrl))
                return Redirect("/");
            else
                return Redirect(ReturnUrl);
        }
        //
        // GET: /Account/OAuth/
        public ActionResult OAuth(string code, string state)
        {
            FacebookOAuthResult oauthResult;
            if (FacebookOAuthResult.TryParse(Request.Url, out oauthResult))
            {
                if (oauthResult.IsSuccess)
                {
                    var oAuthClient = new FacebookOAuthClient(FacebookApplication.Current);
                    if (IsDebug)
                    {
                        oAuthClient.RedirectUri = new Uri(redirectUrlDebug);
                    }
                    else
                    {
                        oAuthClient.RedirectUri = new Uri(redirectUrl);
                    }
                    dynamic tokenResult = oAuthClient.ExchangeCodeForAccessToken(code);
                    string accessToken = tokenResult.access_token;

                    DateTime expiresOn = DateTime.MaxValue;

                    if (tokenResult.ContainsKey("expires"))
                    {
                        DateTimeConvertor.FromUnixTime(tokenResult.expires);
                    }

                    FacebookClient fbClient = new FacebookClient(accessToken);
                    dynamic me = fbClient.Get("me?fields=id,name");
                    long facebookId = Convert.ToInt64(me.id);

                    //Generamos el usuario.
                    Usuario usuario = new Usuario();
                    usuario.FacebookId = facebookId.ToString();
                    usuario.Nick = (string)me.name;
                    usuario.Email = (string)me.email;
                    usuario.FechaCreacion = DateTime.Now;
                    usuario.IsAdmin = false;

                    //Comprobamos si existe en la BBDD como registrado, si no lo creamos.
                    Usuario userdb = (from u in db.Usuarios
                                      where u.FacebookId.Equals(usuario.FacebookId)
                                      select u).FirstOrDefault();
                    if (userdb == null)
                    {
                        //Es un usuario nuevo. Lo guardamos en la BBDD.
                        db.AddToUsuarios(usuario);
                        db.SaveChanges();
                    }

                    //Logueamos al usuario.
                    EntrepanMembershipProvider EntrepanMembership = new EntrepanMembershipProvider();
                    EntrepanMembership.LogInUser(usuario.FacebookId, usuario.Id, usuario.Nick, usuario.IsAdmin, false);

                    // prevent open redirection attack by checking if the url is local.
                    if (Url.IsLocalUrl(state))
                    {
                        return Redirect(state);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
            }

            return RedirectToAction("Index", "Home");
        }