Пример #1
0
        /// <summary>
        /// Авторизация на сервере ВК
        /// </summary>
        /// <param name="appId">Идентификатор приложения</param>
        /// <param name="email">Логин - телефон или эл. почта</param>
        /// <param name="password">Пароль</param>
        /// <param name="settings">Уровень доступа приложения</param>
        /// <param name="code">Код двухфакторной авторизации</param>
        /// <param name="captchaSid">Идентификатор капчи</param>
        /// <param name="captchaKey">Текст капчи</param>
        /// <returns>Информация об авторизации приложения</returns>
        public VkAuthorization Authorize(ulong appId, string email, string password, Settings settings,
                                         Func <string> code = null, long?captchaSid = null, string captchaKey = null)
        {
            var authorizeUrl       = CreateAuthorizeUrlFor(appId, settings, Display.Wap);
            var authorizeUrlResult = WebCall.MakeCall(authorizeUrl, Proxy);

            if (authorizeUrlResult.ResponseUrl.ToString()
                .StartsWith("https://oauth.vk.com/blank.html#access_token=", StringComparison.Ordinal))
            {
                return(EndAuthorize(authorizeUrlResult, Proxy));
            }

            // Заполнить логин и пароль
            var loginForm = WebForm.From(authorizeUrlResult)
                            .WithField("email")
                            .FilledWith(email)
                            .And()
                            .WithField("pass")
                            .FilledWith(password);

            if (captchaSid.HasValue)
            {
                loginForm.WithField("captcha_sid")
                .FilledWith(captchaSid.Value.ToString())
                .WithField("captcha_key")
                .FilledWith(captchaKey);
            }

            var loginFormPostResult = WebCall.Post(loginForm, Proxy);

            // Заполнить код двухфакторной авторизации
            var isOAuthBlank = WebForm.IsOAuthBlank(loginFormPostResult);

            if (code == null)
            {
                return(EndAuthorize(loginFormPostResult, Proxy));
            }

            if (isOAuthBlank)
            {
                return(EndAuthorize(loginFormPostResult, Proxy));
            }

            var codeForm = WebForm.From(loginFormPostResult)
                           .WithField("code")
                           .FilledWith(code.Invoke());

            loginFormPostResult = WebCall.Post(codeForm, Proxy);


            return(EndAuthorize(loginFormPostResult, Proxy));
        }
Пример #2
0
 /// <summary>
 /// Проверка наличия двухфакторной авторизации
 /// </summary>
 /// <param name="code">Функция возвращающая код двухфакторной авторизации</param>
 /// <param name="loginFormPostResult">Ответ сервера vk</param>
 /// <returns></returns>
 private bool HasNotTwoFactor(Func <string> code, WebCallResult loginFormPostResult)
 {
     _logger?.Debug("Проверка наличия двухфакторной авторизации");
     return(code == null || WebForm.IsOAuthBlank(loginFormPostResult));
 }