summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_proto.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Steam/src/steam_proto.cpp')
-rw-r--r--protocols/Steam/src/steam_proto.cpp190
1 files changed, 18 insertions, 172 deletions
diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp
index acaacde37e..ad87d64f29 100644
--- a/protocols/Steam/src/steam_proto.cpp
+++ b/protocols/Steam/src/steam_proto.cpp
@@ -1,13 +1,16 @@
-#include "steam.h"
+#include "common.h"
CSteamProto::CSteamProto(const char* protoName, const TCHAR* userName) :
PROTO<CSteamProto>(protoName, userName)
{
CreateProtoService(PS_CREATEACCMGRUI, &CSteamProto::OnAccountManagerInit);
+
+ InitializeCriticalSection(&this->contact_search_lock);
}
CSteamProto::~CSteamProto()
{
+ DeleteCriticalSection(&this->contact_search_lock);
}
MCONTACT __cdecl CSteamProto::AddToList(int flags, PROTOSEARCHRESULT* psr)
@@ -69,9 +72,9 @@ DWORD_PTR __cdecl CSteamProto:: GetCaps(int type, MCONTACT hContact)
case PFLAGNUM_2:
return PF2_ONLINE;
case PFLAG_UNIQUEIDTEXT:
- return (DWORD_PTR)::Translate("Username");
+ return (DWORD_PTR)Translate("SteamID");
case PFLAG_UNIQUEIDSETTING:
- return (DWORD_PTR)"Username";
+ return (DWORD_PTR)"SteamID";
default:
return 0;
}
@@ -134,170 +137,6 @@ int __cdecl CSteamProto::SendUrl(MCONTACT hContact, int flags, const char *url)
int __cdecl CSteamProto::SetApparentMode(MCONTACT hContact, int mode) { return 0; }
-NETLIBHTTPREQUEST *CSteamProto::LoginRequest(const char *username, const char *password, const char *timestamp, const char *captchagid, const char *captcha_text, const char *emailauth, const char *emailsteamid)
-{
- HttpRequest request = HttpRequest(m_hNetlibUser, REQUEST_POST, "https://steamcommunity.com/login/dologin/");
- request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
- request.AddHeader("Accept-Encoding", "deflate, gzip");
-
- CMStringA param;
- param.AppendFormat("username=%s", mir_urlEncode(username));
- param.AppendFormat("&password=%s", mir_urlEncode(password));
- param.AppendFormat("&captchagid=%s", captchagid);
- param.AppendFormat("&captcha_text=%s", mir_urlEncode(captcha_text));
- param.AppendFormat("&emailauth=%s", mir_urlEncode(emailauth));
- param.AppendFormat("&emailsteamid=%s", emailsteamid);
- param.AppendFormat("&rsatimestamp=%s", timestamp);
-
- request.SetData(param.GetBuffer(), param.GetLength());
-
- return request.Send();
-}
-
-#include <openssl/rsa.h>
-#include <openssl/bio.h>
-#include <openssl/bn.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-#include <openssl/engine.h>
-
-bool CSteamProto::Login()
-{
- ptrA username(getStringA("Username"));
-
- HttpRequest request(m_hNetlibUser, REQUEST_GET, "https://steamcommunity.com/login/getrsakey");
- request.AddParameter("username", username);
-
- mir_ptr<NETLIBHTTPREQUEST> response(request.Send());
-
- if (!response || response->resultCode != HTTP_STATUS_OK)
- return false;
-
- JSONNODE *root = json_parse(response->pData), *node;
- if (!root)
- return false;
-
- node = json_get(root, "success");
- if (!json_as_bool(node))
- return false;
-
- node = json_get(root, "timestamp");
- ptrA timestamp = ptrA(mir_t2a(json_as_string(node)));
-
- node = json_get(root, "publickey_mod");
- const char *mod = mir_t2a(json_as_string(node));
-
- node = json_get(root, "publickey_exp");
- const char *exp = mir_t2a(json_as_string(node));
-
- const char *password = getStringA("Password");
-
- BIGNUM *modulus = BN_new();
- if (!BN_hex2bn(&modulus, mod))
- return false;
-
- BIGNUM *exponent = BN_new();
- if (!BN_hex2bn(&exponent, exp))
- return false;
-
- RSA *rsa = RSA_new();
- rsa->n = modulus;
- rsa->e = exponent;
-
- int size = RSA_size(rsa);
- BYTE *ePassword = (BYTE*)mir_calloc(size);
- if (RSA_public_encrypt((int)strlen(password), (const unsigned char*)password, ePassword, rsa, RSA_PKCS1_PADDING) < 0)
- return false;
-
- char *sPassword = mir_base64_encode(ePassword, size);
-
- bool captcha_needed, emailauth_needed;
- CMStringA captchagid("-1"), captcha_text, emailauth, emailsteamid;
- do
- {
- response = Authorize(username, sPassword, timestamp, captchagid.GetBuffer(), captcha_text.GetBuffer(), emailauth.GetBuffer(), emailsteamid.GetBuffer());
- if (!response || response->resultCode != HTTP_STATUS_OK)
- return false;
-
- root = json_parse(response->pData);
-
- node = json_get(root, "emailauth_needed");
- emailauth_needed = json_as_bool(node);
- if (emailauth_needed)
- {
- GuardParam guard;
-
- node = json_get(root, "emailsteamid");
- emailsteamid = ptrA(mir_t2a(json_as_string(node)));
-
- node = json_get(root, "emaildomain");
- strcpy(guard.domain, mir_u2a(json_as_string(node)));
-
- if (DialogBoxParam(
- g_hInstance,
- MAKEINTRESOURCE(IDD_GUARD),
- NULL,
- CSteamProto::GuardProc,
- (LPARAM)&guard) != 1)
- return false;
-
- emailauth = guard.code;
- }
-
- node = json_get(root, "captcha_needed");
- captcha_needed = json_as_bool(node);
- if (captcha_needed)
- {
- node = json_get(root, "captcha_gid");
- captchagid = ptrA(mir_t2a(json_as_string(node)));
-
- CMStringA url = CMStringA("https://steamcommunity.com/public/captcha.php?gid=") + captchagid;
- CallService(MS_UTILS_OPENURL, 0, (LPARAM)url.GetBuffer());
-
- //request = HttpRequest(m_hNetlibUser, REQUEST_GET, "https://steamcommunity.com/public/captcha.php?gid=");
- //request.AddUrlPart(gid);
-
- //response = request.Send();
-
- //if (!response || response->resultCode != HTTP_STATUS_OK)
- // return false;
-
- CaptchaParam captcha;
- captcha.size = response->dataLength;
- captcha.data = (BYTE*)mir_alloc(response->dataLength);
- memcpy(captcha.data, response->pData, captcha.size);
-
- if (DialogBoxParam(
- g_hInstance,
- MAKEINTRESOURCE(IDD_CAPTCHA),
- NULL,
- CSteamProto::CaptchaProc,
- (LPARAM)&captcha) != 1)
- return false;
-
- captcha_text = captcha.text;
- }
-
- node = json_get(root, "success");
- if (!json_as_bool(node) && !emailauth_needed && !captcha_needed)
- return false;
-
- } while (emailauth_needed || captcha_needed);
-
- node = json_get(root, "success");
- if (!json_as_bool(node))
- return false;
-
- // {"success":true, "login_complete" : true, "transfer_url" : "https:\/\/store.steampowered.com\/\/login\/transfer", "transfer_parameters" : {"steamid":"*", "token" : "*", "remember_login" : false, "webcookie" : "*"}}
-
- return true;
-}
-
-bool CSteamProto::Logout()
-{
- return true;
-}
-
int CSteamProto::SetStatus(int new_status)
{
if (new_status == m_iDesiredStatus)
@@ -308,9 +147,9 @@ int CSteamProto::SetStatus(int new_status)
if (new_status == ID_STATUS_OFFLINE)
{
- Logout();
- m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
+ m_bTerminated = true;
+ m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);
if (!Miranda_Terminated())
@@ -325,9 +164,16 @@ int CSteamProto::SetStatus(int new_status)
{
if (old_status == ID_STATUS_OFFLINE/* && !this->IsOnline()*/)
{
- this->m_iStatus = ID_STATUS_CONNECTING;
- /*if (!Login())
- return 0;*/
+ UINT64 id = 76561197960435530;
+ DWORD in_db = id;
+ id = in_db;
+
+ m_iStatus = ID_STATUS_CONNECTING;
+ ForkThread(&CSteamProto::LogInThread, NULL);
+
+ //ptrA steamId(getStringA("SteamID"));
+ //Steam::FriendList(m_hNetlibUser/*, token*/)
+ // .LoadAsync(steamId, CallbackConverter<Steam::FriendList::Result, &CSteamProto::OnContactListLoadedAsync>, this);
}
else
{