// GET: /<controller>/
        public IActionResult Index()
        {
            try
            {
                if (!HttpContext.Session.Keys.Contains("VkAccessToken") || !HttpContext.Session.Keys.Contains("VkUserId"))
                {
                    return(RedirectToAction("AuthorizationFail", "Status"));
                }

                string accessToken = HttpContext.Session.GetString("VkAccessToken");
                string userId      = HttpContext.Session.GetString("VkUserId");

                dynamic userInfoResponse = RESTRequest.PostAsUrlEncodedWithJsonResponse("https://api.vk.com/method/users.get", new Dictionary <string, string>()
                {
                    { "access_token", accessToken },
                    { "v", "5.59" },
                    { "user_ids", userId },
                    { "fields", "sex, bdate, photo_100" },
                    { "name_case", "nom" }
                });
                logger.LogWarning("User info recieved");

                VkUserInfo userInfo = new VkUserInfo()
                {
                    Id        = userInfoResponse.response[0].id.ToString(),
                    Name      = userInfoResponse.response[0].first_name,
                    Surname   = userInfoResponse.response[0].last_name,
                    Sex       = userInfoResponse.response[0].sex == 1 ? "Female" : "Male",
                    BirthDate = userInfoResponse.response[0].bdate,
                    PhotoUrl  = userInfoResponse.response[0].photo_100
                };

                return(View("VkUserInfoPage", userInfo));
            }
            catch (Exception e)
            {
                logger.LogError(new EventId(), e, "Error");
                return(RedirectToAction("Exception", "Status", new { exception = JsonConvert.SerializeObject(e) }));
            }
        }
Beispiel #2
0
 private void Login(VkUserInfo vkUserInfo)
 {
     try
     {
         var loginElem = _webDriver.FindElement(By.Id("index_email"));
         CommonSendKeys(loginElem, vkUserInfo.Login);
         var passElem = _webDriver.FindElement(By.Id("index_pass"));
         CommonSendKeys(passElem, vkUserInfo.Pass);
         var indexLoginElem = _webDriver.FindElement(By.Id("index_login_button"));
         indexLoginElem.Click();
     }
     catch (NoSuchElementException ex)
     {
     }
     catch (ElementNotVisibleException ex)
     {
     }
     catch (WebDriverException ex)
     {
         ClickToBoxLayerWrapButton();
         Login(vkUserInfo);
     }
 }
Beispiel #3
0
        private bool InitVkuser(ExternalLoginInfo loginInfo, string userId)
        {
            //bool result = false;
            vkUserInfo = new VkUserInfo();
            var response = vkUserInfo.InitializeUserProfileInfo(loginInfo);

            profile =
                new UserProfile
            {
                GivenName   = response.FirstName,
                FamilyName  = response.LastName,
                ExternalPic = response.Picture,
                UserId      = userId,
            };

            //if (Create(profile) != null)
            //{
            //    result = true;
            //}

            return(Create(profile) != null ? true : false);

            //return result;
        }
Beispiel #4
0
        /// <summary>
        /// Авторизация пользователя через VK
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult LogIn_vk(string code)
        {
            string _BaseUrl = $"https://{Settings.BaseURL}/user/LogIn_vk";

            string Result = String.Empty;

            if (String.IsNullOrEmpty(code))
            {
                // отправляем запрос на авторизацию
                string GetCode_Url = $"https://oauth.vk.com/authorize?client_id={Settings.vkApp}" +
                                     $"&display=popup&redirect_uri={_BaseUrl}&scope=email&response_type=code&v=5.69";

                Response.Redirect(GetCode_Url);
            }
            else
            {
                char[] _pass    = (DateTime.Now.ToString("DDssmmMMyyyy")).ToCharArray();
                Cripto password = new Cripto(_pass);

                UsersModel UserInfoVK = new UsersModel()
                {
                    Id       = Guid.NewGuid(),
                    Disabled = false,
                    Salt     = password.Salt,
                    Hash     = password.Hash
                };

                // Получаем ID пользователя и токин
                string GetTokin_Url = $"https://oauth.vk.com/access_token?client_id={Settings.vkApp}" +
                                      $"&client_secret={Settings.vkAppKey}&redirect_uri={_BaseUrl}&code={code}";
                WebClient client = new WebClient()
                {
                    Encoding = Encoding.UTF8
                };
                string       json        = client.DownloadString(GetTokin_Url);
                VkLoginModel vkEnterUser = JsonConvert.DeserializeObject <VkLoginModel>(json);
                UserInfoVK.Vk = vkEnterUser.user_id.ToString();

                string currentUser = User.Identity.Name;
                if (String.IsNullOrEmpty(currentUser))
                {
                    Result = "<div>" + json + "</div>";

                    // Получаем данные пользователя
                    string GetUserInfo_Url = $"https://api.vk.com/method/users.get" +
                                             $"?user_id={vkEnterUser.user_id}&access_token={vkEnterUser.access_token}" +
                                             $"&fields=domain,nickname,country,city,contacts&v=5.69";

                    client = new WebClient()
                    {
                        Encoding = Encoding.UTF8
                    };

                    VkUserInfo vkUser       = JsonConvert.DeserializeObject <VkUserInfo>(json);
                    var        userResponse = vkUser.response[0];

                    UsersModel UserInfo = _repository.getCustomer(userResponse.id.ToString());

                    // Если пользователь найден
                    if (UserInfo != null)
                    {
                        // Записываем данные об авторизации пользователя
                        _accountRepository.SuccessLogin(UserInfo.Id, RequestUserInfo.IP);

                        // Удачная попытка, Авторизация
                        FormsAuthentication.SetAuthCookie(UserInfo.Id.ToString(), false);
                        MergeOrders(UserInfo);
                    }
                    else
                    {
                        UserInfoVK.FIO     = $"{userResponse.last_name} {userResponse.first_name}";
                        UserInfoVK.Phone   = "";
                        UserInfoVK.EMail   = "";
                        UserInfoVK.Address = userResponse.city.title;

                        _repository.createCustomer(UserInfoVK);

                        // Удачная попытка, Авторизация
                        FormsAuthentication.SetAuthCookie(UserInfoVK.Id.ToString(), false);
                        //MergeOrders(UserInfoVK);
                    }
                }
                else
                {
                    if (!String.IsNullOrWhiteSpace(UserInfoVK.Vk))
                    {
                        var existingVkUser = _repository.getCustomer(UserInfoVK.Vk);
                        var authorizedUser = _repository.getCustomer(Guid.Parse(currentUser));
                        if (existingVkUser != null && (existingVkUser.Id != authorizedUser.Id))
                        {
                            UsersMergeViewModel mergeModel = new UsersMergeViewModel
                            {
                                Users = new UsersModel[]
                                {
                                    authorizedUser,
                                    existingVkUser
                                }
                            };
                            return(View("MergeUsers", mergeModel));
                        }
                        else
                        {
                            UsersModel user = _repository.SetCustromerSocialNetwork(Guid.Parse(currentUser), "vk", UserInfoVK.Vk);
                        }
                        return(RedirectToAction("Index", "User"));
                    }
                }
            }

            return(View(model));
        }