Ejemplo n.º 1
0
 public UserAccount(FacebookAccessToken token)
     : this()
 {
     FacebookId           = token.FacebookID;
     InsertedDateTime     = DateTime.UtcNow;
     LastModifiedDateTime = DateTime.UtcNow;
     Update(token);
 }
Ejemplo n.º 2
0
        public IHttpActionResult Post([FromBody] FacebookAccessToken token)
        {
            if (_facebookApi.IsFacebookUserTokenValid(token.AccessToken, token.UserId))
            {
                var loginResponse = DoLogin(token);
                return(Ok(loginResponse));
            }

            return(Unauthorized());
        }
Ejemplo n.º 3
0
 public virtual void Update(FacebookAccessToken token)
 {
     if (!token.Name.IsNullOrWhiteSpace())
     {
         Name = token.Name.Trim();
         LastModifiedDateTime = DateTime.UtcNow;
     }
     if (!token.Email.IsNullOrWhiteSpace())
     {
         Email = token.Email.Trim();
         LastModifiedDateTime = DateTime.UtcNow;
     }
 }
Ejemplo n.º 4
0
        private LoginResponse DoLogin(FacebookAccessToken token)
        {
            var existingUser = _context.Users.FirstOrDefault(x => x.FacebookUserId == token.UserId);

            if (existingUser != null)
            {
                existingUser.LastFacebookToken = existingUser.Token;
                existingUser.Token             = token.AccessToken;
            }
            else
            {
                existingUser = new User
                {
                    UserType        = _context.UserTypes.FirstOrDefault(x => x.Id == UserType.FacebookUser),
                    FacebookUserId  = token.UserId,
                    Email           = token.Email,
                    First           = token.FirstName,
                    Last            = token.LastName,
                    IsEmailVerified = true,
                    Token           = token.AccessToken
                };

                _context.Users.Add(existingUser);
            }

            _sessionProvider.SetSessionUser(new SessionUser(existingUser));

            var userSession = new UserSession
            {
                IsSessionOpen  = true,
                SessionStarted = DateTime.Now,
                SessionToken   = _sessionProvider.GetSessionToken(),
                User           = existingUser
            };

            _context.UserSessions.Add(userSession);

            _context.SaveChanges();

            return(new LoginResponse {
                SessionToken = _sessionProvider.GetSessionToken(), User = Map(existingUser)
            });
        }
    private void GetAuthInfo(string code)
    {
        FacebookAccessToken accessTokenInfo = GetAccessTokenInfo(code);

        Response.Write(accessTokenInfo.access_token);
    }
Ejemplo n.º 6
0
        public ActionResult FacebookCallback(string code)
        {
            try
            {
                Debugger.Launch();
                var facebookClient = new FacebookClient();

                dynamic result = facebookClient.Post("oauth/access_token", new
                {
                    client_id     = FacebookSettings.ClientId,
                    client_secret = FacebookSettings.ClientSecret,
                    redirect_uri  = RedirectUri.AbsoluteUri,
                    code
                });

                facebookClient.AccessToken = result.access_token;

                // Get the user's information
                dynamic userInfo = facebookClient.Get("me?fields=first_name,last_name,id,email");

                string userId = userInfo.id;

                var userModelExits = WebUow.Instance.RepoOf <Users>()
                                     .Get(q => q.facebookid == userId).SingleOrDefault();


                if (userModelExits == null)
                {
                    userModelExits = new Users
                    {
                        name        = userInfo.first_name,
                        facebookid  = userInfo.id,
                        email       = userInfo.email,
                        datecreated = DateTime.Now,
                        lastlogin   = DateTime.Now
                    };

                    WebUow.Instance.RepoOf <Users>().Add(userModelExits, true);

                    var facebooktemptoken = new FacebookAccessToken
                    {
                        Fuserid     = userInfo.id,
                        accesstoken = facebookClient.AccessToken,
                        userid      = userModelExits.Id,
                        generatedon = DateTime.Now
                    };

                    WebUow.Instance.RepoOf <FacebookAccessToken>().Add(facebooktemptoken, true);
                }
                else
                {
                    userModelExits.lastlogin = DateTime.Now;
                    WebUow.Instance.RepoOf <Users>().Update(userModelExits, true);
                }

                var ticket = new FormsAuthenticationTicket(1,
                                                           userInfo.id,
                                                           DateTime.Now,
                                                           DateTime.Now.AddDays(360),
                                                           true,
                                                           userModelExits.Id.ToString(),
                                                           FormsAuthentication.FormsCookiePath);

                // Encrypt the ticket.
                var encTicket = FormsAuthentication.Encrypt(ticket);

                var nawaz = new HttpCookie(FormsAuthentication.FormsCookieName)
                {
                    Value   = encTicket,
                    Expires = DateTime.Now.AddDays(360)
                              //Secure = true,
                              //HttpOnly = true
                };
                ControllerContext.HttpContext.Response.Cookies.Add(nawaz);

                var token =
                    WebUow.Instance.RepoOf <FacebookAccessToken>()
                    .Get(q => q.Fuserid == userId)
                    .SingleOrDefault() ?? new FacebookAccessToken();

                var facebookClient1 = new FacebookClient();

                dynamic result1 = facebookClient1.Post("oauth/access_token", new
                {
                    grant_type        = "fb_exchange_token",
                    client_id         = FacebookSettings.ClientId,
                    client_secret     = FacebookSettings.ClientSecret,
                    fb_exchange_token = facebookClient.AccessToken
                });
                token.accesstoken = result1.access_token;
                token.expiry      = int.Parse(result1.expires.ToString());
                token.generatedon = DateTime.Now;
                token.Fuserid     = userInfo.id;
                token.userid      = userModelExits.Id;
                WebUow.Instance.RepoOf <FacebookAccessToken>().Update(token, true);

                return(RedirectToAction("Index", "Home"));
            }
            catch (Exception ex)
            {
                if (User.Identity.IsAuthenticated)
                {
                    FormsAuthentication.SignOut();
                }
                ViewBag.Error = ex.Message;
                return(View("Error"));
            }
        }
Ejemplo n.º 7
0
        public static FacebookAccessToken ExchangeAccessTokenDuration(string applicationId, string secretKey, string accessToken)
        {
            FacebookAccessToken result = null;

            Uri requestUri = new Uri(string.Format(ExtendAccessTokenURL,
                                                   applicationId,
                                                   secretKey,
                                                   accessToken));

            try
            {
                WebRequest  request  = WebRequest.Create(requestUri);
                WebResponse response = request.GetResponse();

                using (StreamReader read = new StreamReader(response.GetResponseStream()))
                {
                    string   responseText = read.ReadToEnd();
                    string[] data         = responseText.Split('&');
                    if (data != null && data.Length == 2)
                    {
                        string[] token   = data[0].Split('=');
                        string[] expires = data[1].Split('=');

                        if (token != null && token.Length == 2 &&
                            expires != null && expires.Length == 2)
                        {
                            int exp;
                            int.TryParse(expires[1], out exp);

                            result             = new FacebookAccessToken();
                            result.AccessToken = token[1];
                            result.Expires     = DateTime.UtcNow.AddSeconds(exp);

                            // handling the Facebook bug that causes the expires value to start from instead of January 1st 1970 :p
                            if (result.Expires < DateTime.UtcNow)
                            {
                                result.Expires = DateTime.UtcNow.AddSeconds(exp);
                            }
                        }
                    }
                }
            }
            catch (WebException e)
            {
                if (e.Response != null)
                {
                    using (StreamReader read = new StreamReader(e.Response.GetResponseStream()))
                    {
                        string responseText = read.ReadToEnd();
                        read.Close();

                        Logger.Current.Error("Authentication.ExchangeAccessTokenDuration", responseText);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Current.Error("Authentication.ExchangeAccessTokenDuration", e.Message, e);
            }

            return(result);
        }