internal static SkadiLoginResponse Create(HttpResponseMessage response, CookieContainer cookieContainer) { var skadiLoginResponse = new SkadiLoginResponse(); // ReSharper disable once SuggestVarOrType_Elsewhere IEnumerable <Cookie> responseCookies = cookieContainer.GetCookies(Uris.SteamCommunitySecureBase).Cast <Cookie>(); var responseUri = response.RequestMessage.RequestUri.ToString(); var steam64Id = long.Parse(Regex.Split(Regex.Split(responseUri, "http://steamcommunity.com/profiles/")[1], "/home")[0]); skadiLoginResponse.SteamCommunityId = steam64Id; skadiLoginResponse.SteamCountry = responseCookies.FirstOrDefault(e => e.Name == "steamCountry").Value; skadiLoginResponse.SteamLogin = responseCookies.FirstOrDefault(e => e.Name == "steamLogin").Value; skadiLoginResponse.SteamRememberLogin = responseCookies.FirstOrDefault(e => e.Name == "steamRememberLogin").Value; skadiLoginResponse.SessionId = responseCookies.FirstOrDefault(e => e.Name == "sessionid").Value; skadiLoginResponse.SteamLanguage = responseCookies.FirstOrDefault(e => e.Name == "Steam_Language").Value; skadiLoginResponse.SteamLoginSecure = responseCookies.FirstOrDefault(e => e.Name == "steamLoginSecure") .Value; var steamMachineAuthCookie = responseCookies.FirstOrDefault( e => e.Name.Contains("steamMachineAuth")); skadiLoginResponse.SteamMachineAuthvalue = steamMachineAuthCookie.Value; skadiLoginResponse.SkadiLoginCookies = cookieContainer; return(skadiLoginResponse); }
/// <summary> /// Execute the login. This will take the configuration into consideration /// which can be given as parameter in the constructor. /// </summary> /// <param name="skadiLoginData"> /// Date of the steam login. See <see cref="SkadiLoginData"/>. /// </param> /// <returns> /// It will return a response with login data. /// For more information lookup <see cref="SkadiLoginResponse"/>. /// </returns> public SkadiLoginResponse Execute(SkadiLoginData skadiLoginData) { GetSession(); if (_skadiLoginConfiguration != null && !_skadiLoginConfiguration.StopOnError) { return(ExecuteUntilLogin(skadiLoginData)); } var rsaKey = GetRsaKey(skadiLoginData.Username); var doLoginResponse = DoLogin(rsaKey, skadiLoginData.Username, skadiLoginData.Password, skadiLoginData.SharedSecret); if (!DoLoginResponseValidator.IsValid(doLoginResponse)) { SkadiLoginResponse skadiLoginResponse = new SkadiLoginResponse(); skadiLoginResponse.SkadiLoginError = SkadiLoginErrorFactory.Create(doLoginResponse); return(skadiLoginResponse); } Transfer(doLoginResponse); return(SetSession()); }
private SkadiLoginResponse ExecuteUntilLogin(SkadiLoginData skadiLoginData) { GetSession(); GetRsaKeyResponse rsaKey = new GetRsaKeyResponse(); DoLoginResponse doLoginResponse = new DoLoginResponse(); var doLoginSuccessful = false; do { try { rsaKey = GetRsaKey(skadiLoginData.Username); doLoginResponse = DoLogin(rsaKey, skadiLoginData.Username, skadiLoginData.Password, skadiLoginData.SharedSecret); if (!DoLoginResponseValidator.IsValid(doLoginResponse)) { if (doLoginResponse.CaptchaNeeded) { // TODO: Get exact time for cooldown of captcha! Task.Delay(TimeSpan.FromMinutes(25)); } rsaKey = null; doLoginResponse = null; } else { doLoginSuccessful = true; } } catch (Exception) { Task.Delay( TimeSpan.FromSeconds( _skadiLoginConfiguration.WaitTimeEachError)).Wait(); } }while (doLoginSuccessful == false); bool errorInTransfer = false; do { try { Transfer(doLoginResponse); } catch (Exception) { errorInTransfer = true; Task.Delay(TimeSpan.FromSeconds(5)).Wait(); } } while (errorInTransfer); SkadiLoginResponse skadiLoginResponse = null; do { try { skadiLoginResponse = SetSession(); } catch (Exception) { Task.Delay(TimeSpan.FromSeconds(5)).Wait(); } } while (skadiLoginResponse == null); return(skadiLoginResponse); }