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);
        }
Exemple #2
0
        /// <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());
        }
Exemple #3
0
        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);
        }