summaryrefslogtreecommitdiff
path: root/protocols/Facebook/src/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Facebook/src/server.cpp')
-rw-r--r--protocols/Facebook/src/server.cpp53
1 files changed, 40 insertions, 13 deletions
diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp
index 162c6f9fa6..4b0251fd2a 100644
--- a/protocols/Facebook/src/server.cpp
+++ b/protocols/Facebook/src/server.cpp
@@ -27,40 +27,57 @@ void FacebookProto::OnLoggedOut()
/////////////////////////////////////////////////////////////////////////////////////////
-void FacebookProto::ServerThread(void *)
+void FacebookProto::ServerThread(void *)
{
+
m_szAuthToken = getMStringA(DBKEY_TOKEN);
+
if (m_szAuthToken.IsEmpty()) {
- auto *pReq = new AsyncHttpRequest();
- pReq->requestType = REQUEST_GET;
- pReq->flags = NLHRF_HTTP11 | NLHRF_REDIRECT;
- pReq->m_szUrl = "https://www.facebook.com/v3.3/dialog/oauth?client_id=478386432928815&redirect_uri=https://oauth.miranda-ng.org/facebook.php&state=qq";
+ auto* pReq = CreateRequest("authenticate", "auth.login");
+ pReq->m_szUrl = FB_API_URL_AUTH;
+
+ pReq << CHAR_PARAM("email", getMStringA(DBKEY_USERNAME));
+ pReq << CHAR_PARAM("password", getMStringA(DBKEY_PASS));
- if (JsonReply(ExecuteRequest(pReq)).error()) {
-FAIL:
- ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE)m_iStatus, m_iDesiredStatus);
+ pReq->CalcSig();
+
+ JsonReply reply(ExecuteRequest(pReq));
+
+ if (reply.error()) {
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE) m_iStatus, m_iDesiredStatus);
m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
- ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)m_iStatus, m_iDesiredStatus);
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE) m_iStatus, m_iDesiredStatus);
+
return;
}
+
+ m_szAuthToken = reply.data()["access_token"].as_mstring();
+ setString(DBKEY_TOKEN, m_szAuthToken);
+
+ m_uid = reply.data()["uid"].as_int();
+ CMStringA m_szUid = reply.data()["uid"].as_mstring();
+ setString(DBKEY_ID, m_szUid);
}
- auto *pReq = CreateRequest("FetchContactsFullQuery", "get");
- pReq->m_szUrl = "https://graph.facebook.com/me/friends";
+ auto* pReq = CreateRequestGQL(FB_API_QUERY_CONTACTS);
+ pReq << CHAR_PARAM("query_params", "{\"0\":[\"user\"],\"1\":\"" FB_API_CONTACTS_COUNT "\"}");
pReq->CalcSig();
JsonReply reply(ExecuteRequest(pReq));
if (reply.error())
goto FAIL;
+ // TODO: process contacts
+
+
if (!MqttConnect())
goto FAIL;
MqttOpen();
int bufSize = 2048;
- char *buf = (char*)mir_alloc(bufSize);
+ char* buf = (char*) mir_alloc(bufSize);
while (!Miranda_IsTerminated()) {
int ret = Netlib_Recv(m_mqttConn, buf, bufSize);
@@ -72,10 +89,20 @@ FAIL:
debugLogA("Connection closed gracefully");
break;
}
+
+ // TODO: process MQTT responses
}
debugLogA("exiting ServerThread");
int oldStatus = m_iStatus;
m_iDesiredStatus = m_iStatus = ID_STATUS_OFFLINE;
- ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus);
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE) oldStatus, m_iStatus);
+
+ return;
+
+FAIL:
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE) m_iStatus, m_iDesiredStatus);
+
+ m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE) m_iStatus, m_iDesiredStatus);
}