public static Request ( string url, string method, |
||
url | string | |
method | string | |
data | ||
cookies | ||
headers | ||
referer | string | |
return | string |
private bool _sendConfirmationAjax(Confirmation conf, string op) { string url = APIEndpoints.COMMUNITY_BASE + "/mobileconf/ajaxop"; string queryString = "?op=" + op + "&"; queryString += GenerateConfirmationQueryParams(op); queryString += "&cid=" + conf.ID + "&ck=" + conf.Key; url += queryString; CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string referer = GenerateConfirmationURL(); string response = SteamWeb.Request(url, "GET", null, cookies, null); if (response == null) { return(false); } SendConfirmationResponse confResponse = JsonConvert.DeserializeObject <SendConfirmationResponse>(response); return(confResponse.Success); }
/// <summary> /// Refreshes the Steam session. Necessary to perform confirmations if your session has expired or changed. /// </summary> /// <returns></returns> public bool RefreshSession() { string url = APIEndpoints.MOBILEAUTH_GETWGTOKEN; NameValueCollection postData = new NameValueCollection(); postData.Add("access_token", this.Session.OAuthToken); string response = SteamWeb.Request(url, "POST", postData); if (response == null) { return(false); } try { var refreshResponse = JsonConvert.DeserializeObject <RefreshSessionDataResponse>(response); if (refreshResponse == null || refreshResponse.Response == null || String.IsNullOrEmpty(refreshResponse.Response.Token)) { return(false); } string token = this.Session.SteamID + "%7C%7C" + refreshResponse.Response.Token; string tokenSecure = this.Session.SteamID + "%7C%7C" + refreshResponse.Response.TokenSecure; this.Session.SteamLogin = token; this.Session.SteamLoginSecure = tokenSecure; return(true); } catch (Exception) { return(false); } }
private ConfirmationDetailsResponse _getConfirmationDetails(Confirmation conf) { string url = APIEndpoints.COMMUNITY_BASE + "/mobileconf/details/" + conf.ID + "?"; string queryString = GenerateConfirmationQueryParams("details"); url += queryString; CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string referer = GenerateConfirmationURL(); string response = SteamWeb.Request(url, "GET", null, cookies, null); if (String.IsNullOrEmpty(response)) { return(null); } var confResponse = JsonConvert.DeserializeObject <ConfirmationDetailsResponse>(response); if (confResponse == null) { return(null); } return(confResponse); }
private bool _addPhoneNumber() { string response = SteamWeb.Request(APIEndpoints.COMMUNITY_BASE + "/steamguard/phoneajax?op=add_phone_number&arg=" + WebUtility.UrlEncode(PhoneNumber), "GET", null, _cookies); var addPhoneNumberResponse = JsonConvert.DeserializeObject <AddPhoneResponse>(response); return(addPhoneNumberResponse.Success); }
private bool _sendMultiConfirmationAjax(Confirmation[] confs, string op) { string url = APIEndpoints.COMMUNITY_BASE + "/mobileconf/multiajaxop"; string query = "op=" + op + "&" + GenerateConfirmationQueryParams(op); foreach (var conf in confs) { query += "&cid[]=" + conf.ID + "&ck[]=" + conf.Key; } CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string referer = GenerateConfirmationURL(); string response = SteamWeb.Request(url, "POST", query, cookies, null); if (response == null) { return(false); } SendConfirmationResponse confResponse = JsonConvert.DeserializeObject <SendConfirmationResponse>(response); return(confResponse.Success); }
private bool _checkSMSCode(string smsCode) { var postData = new NameValueCollection(); postData.Add("op", "check_sms_code"); postData.Add("arg", smsCode); postData.Add("checkfortos", "0"); postData.Add("skipvoip", "1"); postData.Add("sessionid", _session.SessionID); string response = SteamWeb.Request(APIEndpoints.COMMUNITY_BASE + "/steamguard/phoneajax", "POST", postData, _cookies); if (response == null) { return(false); } var addPhoneNumberResponse = JsonConvert.DeserializeObject <AddPhoneResponse>(response); if (!addPhoneNumberResponse.Success) { Thread.Sleep(3500); //It seems that Steam needs a few seconds to finalize the phone number on the account. return(_hasPhoneAttached()); } return(true); }
public Confirmation[] FetchConfirmations() { string url = this.GenerateConfirmationURL(); CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string response = SteamWeb.Request(url, "GET", "", cookies); File.WriteAllText("test.txt", response); /*So you're going to see this abomination and you're going to be upset. * It's understandable. But the thing is, regex for HTML -- while awful -- makes this way faster than parsing a DOM, plus we don't need another library. * And because the data is always in the same place and same format... It's not as if we're trying to naturally understand HTML here. Just extract strings. * I'm sorry. */ Regex confIDRegex = new Regex("data-confid=\"(\\d+)\""); Regex confKeyRegex = new Regex("data-key=\"(\\d+)\""); Regex confDescRegex = new Regex("<div>((Confirm|Trade with|Sell -) .+)</div>"); if (response == null || !(confIDRegex.IsMatch(response) && confKeyRegex.IsMatch(response) && confDescRegex.IsMatch(response))) { if (response == null || !response.Contains("<div>Nothing to confirm</div>")) { throw new WGTokenInvalidException(); } return(new Confirmation[0]); } MatchCollection confIDs = confIDRegex.Matches(response); MatchCollection confKeys = confKeyRegex.Matches(response); MatchCollection confDescs = confDescRegex.Matches(response); List <Confirmation> ret = new List <Confirmation>(); for (int i = 0; i < confIDs.Count; i++) { try { string confID = confIDs[i].Groups[1].Value; string confKey = confKeys[i].Groups[1].Value; string confDesc = HttpUtility.HtmlDecode(confDescs[i].Groups[1].Value); Confirmation conf = new Confirmation() { Description = confDesc, ID = confID, Key = confKey }; ret.Add(conf); } catch { /*fak u*/ } } return(ret.ToArray()); }
public Confirmation[] FetchConfirmations() { string url = this.GenerateConfirmationURL(); CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string response = SteamWeb.Request(url, "GET", "", cookies); return(FetchConfirmationInternal(response)); }
public Confirmation[] FetchConfirmations() { string url = this.GenerateConfirmationURL(); CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string response = SteamWeb.Request(url, "GET", "", cookies); /*So you're going to see this abomination and you're going to be upset. * It's understandable. But the thing is, regex for HTML -- while awful -- makes this way faster than parsing a DOM, plus we don't need another library. * And because the data is always in the same place and same format... It's not as if we're trying to naturally understand HTML here. Just extract strings. * I'm sorry. */ Regex confRegex = new Regex("<div class=\"mobileconf_list_entry\" id=\"conf[0-9]+\" data-confid=\"(\\d+)\" data-key=\"(\\d+)\" data-type=\"(\\d+)\" data-creator=\"(\\d+)\""); if (response == null || !confRegex.IsMatch(response)) { if (response == null || !response.Contains("<div>Nothing to confirm</div>")) { throw new WGTokenInvalidException(); } return(new Confirmation[0]); } MatchCollection confirmations = confRegex.Matches(response); List <Confirmation> ret = new List <Confirmation>(); foreach (Match confirmation in confirmations) { if (confirmation.Groups.Count != 5) { continue; } ulong confID, confKey, confCreator; int confType; if (!ulong.TryParse(confirmation.Groups[1].Value, out confID) || !ulong.TryParse(confirmation.Groups[2].Value, out confKey) || !int.TryParse(confirmation.Groups[3].Value, out confType) || !ulong.TryParse(confirmation.Groups[4].Value, out confCreator)) { continue; } ret.Add(new Confirmation(confID, confKey, confType, confCreator)); } return(ret.ToArray()); }
public Confirmation[] FetchConfirmations() { string url = this._generateConfirmationURL(); CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string response = SteamWeb.Request(url, "GET", null, cookies); /*So you're going to see this abomination and you're going to be upset. * It's understandable. But the thing is, regex for HTML -- while awful -- makes this way faster than parsing a DOM, plus we don't need another library. * And because the data is always in the same place and same format... It's not as if we're trying to naturally understand HTML here. Just extract strings. * I'm sorry. */ Regex confIDRegex = new Regex("data-confid=\"(\\d+)\""); Regex confKeyRegex = new Regex("data-key=\"(\\d+)\""); Regex confDescRegex = new Regex("<div>((Confirm|Trade with) .+)</div>"); if (!(confIDRegex.IsMatch(response) && confKeyRegex.IsMatch(response) && confDescRegex.IsMatch(response))) { return(new Confirmation[0]); } MatchCollection confIDs = confIDRegex.Matches(response); MatchCollection confKeys = confKeyRegex.Matches(response); MatchCollection confDescs = confDescRegex.Matches(response); List <Confirmation> ret = new List <Confirmation>(); for (int i = 0; i < confIDs.Count; i++) { string confID = confIDs[i].Groups[1].Value; string confKey = confKeys[i].Groups[1].Value; string confDesc = confDescs[i].Groups[1].Value; Confirmation conf = new Confirmation() { ConfirmationDescription = confDesc, ConfirmationID = confID, ConfirmationKey = confKey }; ret.Add(conf); } return(ret.ToArray()); }
private bool _hasPhoneAttached() { var postData = new NameValueCollection(); postData.Add("op", "has_phone"); postData.Add("arg", "null"); postData.Add("sessionid", _session.SessionID); string response = SteamWeb.Request(APIEndpoints.COMMUNITY_BASE + "/steamguard/phoneajax", "POST", postData, _cookies); if (response == null) { return(false); } var hasPhoneResponse = JsonConvert.DeserializeObject <HasPhoneResponse>(response); return(hasPhoneResponse.HasPhone); }
private bool _checkEmailConfirmation() { var postData = new NameValueCollection(); postData.Add("op", "email_confirmation"); postData.Add("arg", ""); postData.Add("sessionid", _session.SessionID); string response = SteamWeb.Request(APIEndpoints.COMMUNITY_BASE + "/steamguard/phoneajax", "POST", postData, _cookies); if (response == null) { return(false); } var emailConfirmationResponse = JsonConvert.DeserializeObject <AddPhoneResponse>(response); return(emailConfirmationResponse.Success); }
private bool _checkSMSCode(string smsCode) { var postData = new NameValueCollection(); postData.Add("op", "check_sms_code"); postData.Add("arg", smsCode); postData.Add("sessionid", _session.SessionID); string response = SteamWeb.Request(APIEndpoints.COMMUNITY_BASE + "/steamguard/phoneajax", "POST", postData, _cookies); if (response == null) { return(false); } var addPhoneNumberResponse = JsonConvert.DeserializeObject <AddPhoneResponse>(response); return(addPhoneNumberResponse.Success); }
public Confirmation[] FetchConfirmations() { if (fetchingLock.WaitOne(500)) { try { int msec = (int)Math.Floor(10000 - DateTime.Now.Subtract(lastConfirmationFetchTime).TotalMilliseconds); if (msec > 0) { Thread.Sleep(msec); } string url = this.GenerateConfirmationURL(); CookieContainer cookies = new CookieContainer(); this.Session.AddCookies(cookies); string response = SteamWeb.Request(url, "GET", "", cookies); lastConfirmationFetchTime = DateTime.Now; /*So you're going to see this abomination and you're going to be upset. * It's understandable. But the thing is, regex for HTML -- while awful -- makes this way faster than parsing a DOM, plus we don't need another library. * And because the data is always in the same place and same format... It's not as if we're trying to naturally understand HTML here. Just extract strings. * I'm sorry. */ Regex confRegex = new Regex("<div class=\"mobileconf_list_entry\" id=\"conf[0-9]+\" data-confid=\"(\\d+)\" data-key=\"(\\d+)\" data-type=\"(\\d+)\" data-creator=\"(\\d+)\""); if (response == null || !confRegex.IsMatch(response)) { if (response == null || !response.Contains("<div>Nothing to confirm</div>")) { throw new WGTokenInvalidException(); } return(new Confirmation[0]); } MatchCollection confirmations = confRegex.Matches(response); List <Confirmation> ret = new List <Confirmation>(); foreach (Match confirmation in confirmations) { if (confirmation.Groups.Count != 5) { continue; } if (!ulong.TryParse(confirmation.Groups[1].Value, out ulong confID) || !ulong.TryParse(confirmation.Groups[2].Value, out ulong confKey) || !int.TryParse(confirmation.Groups[3].Value, out int confType) || !ulong.TryParse(confirmation.Groups[4].Value, out ulong confCreator)) { continue; } ret.Add(new Confirmation(confID, confKey, confType, confCreator)); } return(ret.ToArray()); } finally { fetchingLock.ReleaseMutex(); } } else { //kinda nothing to confirm, don't bother it will probably be confirmed by another thread. return(new Confirmation[0]); } }