public async Task <ServiceResponse <FacebookResponse> > GetFacebookData(FacebookRequest facebookRequest)
        {
            _ISocialDataService.Write(facebookRequest, path + "facebook.txt");
            var fileJson = await _ISocialDataService.Read <FacebookRequest>(path + "facebook.txt");

            var c = new Comment
            {
                Number = fileJson.CommentsCount
            };

            var l = new Like
            {
                Number = fileJson.LikesCount
            };

            var r = new FacebookResponse
            {
                Comments = c,
                Likes    = l
            };


            var res = new ServiceResponse <FacebookResponse>()
            {
                Data = r, Message = "Success", Success = true
            };

            return(res);
        }
예제 #2
0
        public async Task <AuthenticateResponse> LoginWithFacebook(FacebookRequest facebookToken)
        {
            HttpClient client    = new HttpClient();
            var        appId     = this._appSettings.FacebookApp.AppId;
            var        appSecret = this._appSettings.FacebookApp.AppSecret;
            // 1.generate an app access token
            var appAccessTokenResponse = await client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={appId}&client_secret={appSecret}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            var userAccessTokenValidationResponse = await client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={facebookToken.AccessToken}&access_token={appAccessToken.AccessToken}");

            var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse);

            if (!userAccessTokenValidation.Data.IsValid)
            {
                throw new AppException("Invalid facebook token.");
            }

            // 3. we've got a valid token so we can request user data from fb
            var userInfoResponse = await client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name&access_token={facebookToken.AccessToken}");

            var userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse);

            // 4. ready to create the local user account (if necessary) and jwt
            return(await this.CheckFacebookUserIdDB(userInfo));
        }
예제 #3
0
        private void FacebookStateChanged(FacebookRequest request, NavigationState state)
        {
            switch (state)
            {
            case NavigationState.Done:
            case NavigationState.Error:
                //WebOverlay.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                WebPopup.IsOpen = false;
                FacebookOverlay.NavigateToString("");
                break;

            case NavigationState.Navigating:
                switch (request)
                {
                case FacebookRequest.Logout:
                    FacebookOverlay.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                    CancelButton.Visibility    = Windows.UI.Xaml.Visibility.Collapsed;
                    break;

                case FacebookRequest.Login:
                case FacebookRequest.InviteRequest:
                    FacebookOverlay.Visibility = Windows.UI.Xaml.Visibility.Visible;
                    CancelButton.Visibility    = Windows.UI.Xaml.Visibility.Visible;
                    break;
                }
                //WebOverlay.Visibility = Windows.UI.Xaml.Visibility.Visible;
                WebPopup.IsOpen = true;
                break;
            }
        }
        private void FacebookStateChanged(FacebookRequest request, NavigationState state)
        {
            switch (state)
            {
                case NavigationState.Done:
                case NavigationState.Error:
                    //WebOverlay.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                    WebPopup.IsOpen = false;
                    FacebookOverlay.NavigateToString("");
                    break;

                case NavigationState.Navigating:
                    switch (request)
                    {
                        case FacebookRequest.Logout:
                            FacebookOverlay.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                            CancelButton.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                            break;

                        case FacebookRequest.Login:
                        case FacebookRequest.InviteRequest:
                            FacebookOverlay.Visibility = Windows.UI.Xaml.Visibility.Visible;
                            CancelButton.Visibility = Windows.UI.Xaml.Visibility.Visible;
                            break;
                    }
                    //WebOverlay.Visibility = Windows.UI.Xaml.Visibility.Visible;
                    WebPopup.IsOpen = true;
                    break;
            }
        }
예제 #5
0
        public void CanRequestAPage()
        {
            var request = new FacebookRequest(_testAccessToken);
            var page    = request.GetPage("tran.thanh.ne").Result;

            Assert.IsNotNull(page);
            System.Diagnostics.Debug.WriteLine(page.about);
        }
예제 #6
0
        public void CanRequestPageRawResult()
        {
            var request = new FacebookRequest(_testAccessToken);
            var result  = request.GetPageRawResult("tran.thanh.ne");

            Assert.IsNotNull(result);
            System.Diagnostics.Debug.WriteLine(result);
        }
예제 #7
0
        public async Task <BaseResponse <SignInResponse> > getUserByFacebookToken(string tokenAccess)
        {
            var data = new BaseResponse <SignInResponse>();

            HttpClient client = new HttpClient();

            var             uri     = new Uri(Constants.SignInWithFacebook);
            FacebookRequest request = new FacebookRequest();

            request.FacebookToken = tokenAccess;
            var json    = JsonConvert.SerializeObject(request);
            var content = new StringContent(json, Encoding.UTF8, "application/json");

            try
            {
                HttpResponseMessage response = await client.PostAsync(uri, content);

                HttpStatusCode code = response.StatusCode;
                if (code == HttpStatusCode.OK)
                {
                    var result = await response.Content.ReadAsStringAsync();

                    data = JsonConvert.DeserializeObject <BaseResponse <SignInResponse> >(result);
                    var stream = data.Data.Token;
                    if (data.HasError || string.IsNullOrWhiteSpace(stream))
                    {
                        return(data);
                    }
                    await getUserByToken(stream);
                }
            }
            catch (Exception ex)
            {
                data.HasError = true;
                data.Message  = ex.Message;
                return(data);
            }

            return(data);
        }
예제 #8
0
        private void FacebookStateChanged(FacebookRequest request, NavigationState state)
        {
            switch (state)
            {
            case NavigationState.UserInput:
                MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                break;

            case NavigationState.Done:
                MainPage.Current.FacebookGrid.Visibility    = Visibility.Collapsed;
                MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                break;

            case NavigationState.Error:
                MainPage.Current.FacebookGrid.Visibility    = Visibility.Visible;
                MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                //FacebookOverlay.NavigateToString(""); // Why is this here? Doesn't make sense to show an empty page if there is an error
                break;

            case NavigationState.Navigating:
                MainPage.Current.FacebookLoading.Visibility = Visibility.Visible;;

                switch (request)
                {
                case FacebookRequest.Logout:
                    MainPage.Current.FacebookGrid.Visibility = Visibility.Collapsed;
                    break;

                case FacebookRequest.Login:
                    MainPage.Current.FacebookGrid.Visibility = Visibility.Visible;
                    break;

                case FacebookRequest.InviteRequest:
                    MainPage.Current.FacebookGrid.Visibility = Visibility.Visible;
                    break;
                }
                break;
            }
        }
        private void FacebookStateChanged(FacebookRequest request, NavigationState state)
        {
            switch (state)
            {
                case NavigationState.UserInput:
                    MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                    break;

                case NavigationState.Done:
                    MainPage.Current.FacebookGrid.Visibility = Visibility.Collapsed;
                    MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                    break;

                case NavigationState.Error:
                    MainPage.Current.FacebookGrid.Visibility = Visibility.Visible;
                    MainPage.Current.FacebookLoading.Visibility = Visibility.Collapsed;
                    //FacebookOverlay.NavigateToString(""); // Why is this here? Doesn't make sense to show an empty page if there is an error
                    break;

                case NavigationState.Navigating:
                    MainPage.Current.FacebookLoading.Visibility = Visibility.Visible;;

                    switch (request)
                    {
                        case FacebookRequest.Logout:
                            MainPage.Current.FacebookGrid.Visibility = Visibility.Collapsed;
                            break;

                        case FacebookRequest.Login:
                            MainPage.Current.FacebookGrid.Visibility = Visibility.Visible;
                            break;
                        case FacebookRequest.InviteRequest:
                            MainPage.Current.FacebookGrid.Visibility = Visibility.Visible;
                            break;
                    }
                    break;
            }
        }
예제 #10
0
        public async Task <User> getUserByFacebookToken(string tokenAccess)
        {
            var        data   = new BaseResponse <SignInResponse>();
            User       user   = new User();
            HttpClient client = new HttpClient();

            var             uri     = new Uri(Constants.SignInWithFacebook);
            FacebookRequest request = new FacebookRequest();

            request.FacebookToken = tokenAccess;
            var json    = JsonConvert.SerializeObject(request);
            var content = new StringContent(json, Encoding.UTF8, "application/json");

            try
            {
                HttpResponseMessage response = await client.PostAsync(uri, content);

                HttpStatusCode code = response.StatusCode;
                if (code == HttpStatusCode.OK)
                {
                    var result = await response.Content.ReadAsStringAsync();

                    data = JsonConvert.DeserializeObject <BaseResponse <SignInResponse> >(result);

                    var stream = data.Data.Token;
                    user = await getUserByToken(stream);

                    await SecureStorage.SetAsync("user_token", stream);
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(user);
        }
예제 #11
0
        public LoginResponse FacebookLogin(FacebookRequest facebookRequest)
        {
            LoginResponse loginResponse = new LoginResponse();

            try
            {
                Facebook.FacebookClient fb = new Facebook.FacebookClient();
                dynamic result             = fb.Post("oauth/access_token", new
                {
                    client_id     = facebookRequest.AppID,
                    client_secret = facebookRequest.AppSecret,
                    redirect_uri  = facebookRequest.FacebookUri,
                    //Test ederken kendi mvc projenin localhost kısmını yaz.
                    code = facebookRequest.FacebookCode
                });

                var accessToken = result.access_token;
                fb.AccessToken = accessToken;
                dynamic userinfo = fb.Get("me?fields=first_name,middle_name,last_name,id,email");

                string email     = userinfo.email,
                       firstName = userinfo.first_name,
                       lastName  = userinfo.last_name,
                       socialId  = userinfo.id;

                User user = _userRepository.Get(t => t.Email == email).FirstOrDefault();

                if (user != null)
                {
                    try
                    {
                        Token token = CreateToken();
                        user.Tokens.Add(token);

                        if (_unitOfWork.SaveChanges() > 0)
                        {
                            _cacheManager.AddUserToCache(token.TokenText, user);

                            loginResponse.Username   = user.FullName();
                            loginResponse.Token      = token.TokenText;
                            loginResponse.ExpireDate = token.EndDate;
                            loginResponse.IsVerify   = true;
                            loginResponse.Email      = user.Email;
                            loginResponse.SetStatus(Constants.ResponseCode.SUCCESS);
                            return(loginResponse);
                        }
                    }
                    catch (Exception)
                    {
                        loginResponse.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
                        return(loginResponse);
                    }
                    return(loginResponse);
                }
                user            = new User();//newlemezsek patlıyor.
                user.Email      = email;
                user.Name       = firstName;
                user.Surname    = lastName;
                user.Password   = firstName;
                user.Username   = firstName + lastName;
                user.IsVerified = true;

                user.SocialInfos.Add(new SocialInfo
                {
                    SocialID     = socialId,
                    AccessToken  = accessToken,
                    SocialTypeID = (int)Constants.SocialType.Facebook
                });

                if (UserRegistry(user).Code == 0) // Başarılı register
                {
                    Token token = CreateToken();
                    user.Tokens.Add(token);
                    if (_unitOfWork.SaveChanges() > 0)
                    {
                        _cacheManager.AddUserToCache(token.TokenText, user);
                        loginResponse.Username = user.FullName();
                        loginResponse.Token    = token.TokenText;
                        loginResponse.IsVerify = true;
                        loginResponse.SetStatus(Constants.ResponseCode.SUCCESS);
                        return(loginResponse);
                    }
                }
                loginResponse.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
            }
            catch (Exception ex)
            {
                loginResponse.SetStatus(Constants.ResponseCode.SYSTEM_ERROR);
            }
            return(loginResponse);
        }
예제 #12
0
        public async Task <IActionResult> FacebookLogin([FromBody] FacebookRequest facebookToken)
        {
            var response = await this._userService.LoginWithFacebook(facebookToken);

            return(Ok(response));
        }
예제 #13
0
        public ActionResult Facebook([FromBody] FacebookRequest request)
        {
            var response = new BaseResponse <SignInResponse>();

            response.Data = new SignInResponse();

            FacebookClient client     = new FacebookClient(request.FacebookToken, "1112107155635637");
            var            FBresponse = client.Get("/me?fields=id,first_name,last_name,email", request.FacebookToken);
            string         id         = (string)FBresponse.SelectToken("id");
            string         firstName  = (string)FBresponse.SelectToken("first_name");
            string         lastName   = (string)FBresponse.SelectToken("last_name");
            string         email      = (string)FBresponse.SelectToken("email");

            if (string.IsNullOrWhiteSpace(email))
            {
                response.Message = "Facebookta kayıtlı herhangi bir e-posta adresiniz olmadığı için oturum açamıyoruz, lütfen kayıt ol seçeneğini kullanın.";
                return(Ok(response));
            }

            User user    = null;
            var  control = externalLoginRepo.FirstOrDefaultBy(x => x.ProviderKey == id && x.ProviderName == Provider.Facebook);

            if (control != null)
            {
                user = userRepo.GetById(control.UserID);
            }
            else
            {
                user = userRepo.FirstOrDefaultBy(x => x.Email == email);
                if (user == null)
                {
                    //Yeni kullanıcı oluşturmamız lazım.

                    var Username = email.Split("@")[0].ToString().ToLower();

                    while (userRepo.Any(x => x.Username == Username))
                    {
                        Username += new Random().Next(1, 9).ToString();
                    }

                    var Password = new Cryptography().EncryptString(Cryptography.GenerateKey(6));


                    List <ExternalLogin> externalLogins = new List <ExternalLogin>();
                    externalLogins.Add(new ExternalLogin
                    {
                        ProviderKey  = id,
                        ProviderName = Provider.Facebook
                    });

                    var temp = new Entity.SystemUser.User
                    {
                        FirstName      = firstName,
                        LastName       = lastName,
                        Email          = email,
                        Role           = Role.User,
                        Username       = Username,
                        Password       = Password,
                        ExternalLogins = externalLogins
                    };
                    userRepo.Add(temp);

                    user = temp;
                }
                else
                {
                    externalLoginRepo.Add(new ExternalLogin
                    {
                        UserID       = user.Id,
                        ProviderKey  = id,
                        ProviderName = Provider.Facebook
                    });
                }
            }


            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes("this is my custom Secret key for authnetication");
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, user.Username),
                    new Claim("userID", user.Id.ToString()),
                    new Claim(ClaimTypes.Role, user.Role.ToString()),
                    new Claim("firstName", user.FirstName),
                    new Claim("lastName", user.LastName)
                }),
                Expires            = DateTime.UtcNow.AddDays(7),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            response.Data.Token = tokenHandler.WriteToken(token);

            return(Ok(response));
        }
예제 #14
0
 public LoginResponse FacebookLogin(FacebookRequest facebookRequest)
 {
     return(_loginService.FacebookLogin(facebookRequest));
 }
예제 #15
0
 /// <summary>Initializes a new instance of the <see cref="FacebookAsyncState" /> class.</summary>
 /// <param name="facebookRequest">A <see cref="FacebookRequest" /> object.</param>
 /// <param name="httpRequest">An <see cref="HttpWebRequest" /> object.</param>
 internal FacebookAsyncState(FacebookRequest facebookRequest, HttpWebRequest httpRequest)
 {
     this.HttpRequest = httpRequest;
     this.Request = facebookRequest;
 }
예제 #16
0
        /// <summary>
        /// Initializes the FacebookServiceSession instance based on the
        /// current request to the server.
        /// </summary>
        /// <param name="context">Represents the current request being processed.</param>
        /// <returns>A URL to redirect to if a redirect needs to be performed; null otherwise.</returns>
        protected internal virtual void Initialize(HttpContext context)
        {
            string      redirectUrl = null;
            HttpRequest request     = context.Request;

            string[] friendIDs = null;

            string friendIDList = request["fb_sig_friends"];

            if (friendIDList != null)
            {
                if (friendIDList.Length == 0)
                {
                    friendIDs = new string[0];
                }
                else
                {
                    friendIDs = friendIDList.Split(',');
                }
            }
            InitializeFriends(friendIDs);

            FacebookSessionType sessionType = FacebookSessionType.User;

            string sessionKey     = request["fb_sig_session_key"];
            bool   sessionExpires = (String.CompareOrdinal(request["fb_sig_expires"], "0") != 0);
            string userID         = request["fb_sig_user"];

            IsApplicationAdded = (String.CompareOrdinal(request["fb_sig_added"], "1") == 0) || (String.IsNullOrEmpty(request["fb_page_id"]) == false);
            InCanvasPage       = (String.CompareOrdinal(request["fb_sig_in_canvas"], "1") == 0);
            InIFramePage       = (String.CompareOrdinal(request["fb_sig_in_iframe"], "1") == 0);
            string pageUserID = null;

            if (String.IsNullOrEmpty(request["fb_page_id"]) == false)
            {
                pageUserID = userID;
                userID     = request["fb_page_id"];
            }

            if (String.IsNullOrEmpty(sessionKey) || String.IsNullOrEmpty(userID))
            {
                string authToken = request["auth_token"];

                if (String.IsNullOrEmpty(authToken) == false)
                {
                    FacebookRequest sessionRequest = new FacebookRequest(this);
                    string          dummy;

                    sessionKey = sessionRequest.CreateSession(authToken, out userID, out sessionExpires, out dummy);
                    Debug.Assert(String.IsNullOrEmpty(dummy));
                }
            }

            if (!String.IsNullOrEmpty(sessionKey) && !String.IsNullOrEmpty(userID))
            {
                if (String.IsNullOrEmpty(pageUserID) == false)
                {
                    sessionType = FacebookSessionType.PresencePage;
                }

                InitializeSessionKey(sessionKey, sessionExpires, sessionType);
                InitializeUserID(userID, pageUserID);
            }
            else
            {
                redirectUrl = String.Format(FacebookLoginUrl, ApplicationKey);
            }

            if ((redirectUrl == null) && (IsApplicationAdded == false))
            {
                redirectUrl = String.Format(FacebookAddAppUrl, ApplicationKey);
            }

            if (redirectUrl != null)
            {
                Redirect(redirectUrl);
            }
        }