/// <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)); }
/// <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)); }