diff options
Diffstat (limited to 'protocols/Facebook/src')
| -rw-r--r-- | protocols/Facebook/src/http.cpp | 12 | ||||
| -rw-r--r-- | protocols/Facebook/src/proto.h | 2 | ||||
| -rw-r--r-- | protocols/Facebook/src/server.cpp | 23 | 
3 files changed, 28 insertions, 9 deletions
diff --git a/protocols/Facebook/src/http.cpp b/protocols/Facebook/src/http.cpp index b22198a16a..cc892ffb5f 100644 --- a/protocols/Facebook/src/http.cpp +++ b/protocols/Facebook/src/http.cpp @@ -96,9 +96,10 @@ JsonReply::~JsonReply()  ///////////////////////////////////////////////////////////////////////////////////////// -AsyncHttpRequest* FacebookProto::CreateRequest(const char *szName, const char *szMethod) +AsyncHttpRequest* FacebookProto::CreateRequest(const char *szUrl, const char *szName, const char *szMethod)  {  	AsyncHttpRequest *pReq = new AsyncHttpRequest(); +	pReq->m_szUrl = szUrl;  	pReq->requestType = REQUEST_POST;  	pReq << CHAR_PARAM("api_key", FB_API_KEY)   		<< CHAR_PARAM("device_id", m_szDeviceID)  @@ -111,8 +112,10 @@ AsyncHttpRequest* FacebookProto::CreateRequest(const char *szName, const char *s  		szLocale = "en";  	pReq << CHAR_PARAM("locale", szLocale); -	if (!m_szAuthToken.IsEmpty()) +	if (!m_szAuthToken.IsEmpty()) { +		pReq->flags |= NLHRF_NODUMPHEADERS;  		pReq->AddHeader("Authorization", "OAuth " + m_szAuthToken); +	}  	pReq->AddHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");  	return pReq; @@ -151,11 +154,8 @@ AsyncHttpRequest* FacebookProto::CreateRequestGQL(int64_t query_id) {  			return nullptr;  	} -	AsyncHttpRequest* pReq = CreateRequest(szName, "get"); - -	pReq->m_szUrl = FB_API_URL_GQL; +	AsyncHttpRequest* pReq = CreateRequest(FB_API_URL_GQL, szName, "get");  	pReq << INT64_PARAM("query_id", query_id); -  	return pReq;  } diff --git a/protocols/Facebook/src/proto.h b/protocols/Facebook/src/proto.h index 8f1673cb63..f2b96edcac 100644 --- a/protocols/Facebook/src/proto.h +++ b/protocols/Facebook/src/proto.h @@ -393,7 +393,7 @@ class FacebookProto : public PROTO<FacebookProto>     void ConnectionFailed(); -	AsyncHttpRequest *CreateRequest(const char *szName, const char *szMethod); +	AsyncHttpRequest *CreateRequest(const char *szUrl, const char *szName, const char *szMethod);  	AsyncHttpRequest *CreateRequestGQL(int64_t id);  	NETLIBHTTPREQUEST *ExecuteRequest(AsyncHttpRequest *pReq); diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index 8a0369014b..84457e512d 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -167,9 +167,8 @@ int FacebookProto::RefreshContacts()  bool FacebookProto::RefreshToken()  { -	auto *pReq = CreateRequest("authenticate", "auth.login"); +	auto *pReq = CreateRequest(FB_API_URL_AUTH, "authenticate", "auth.login");  	pReq->flags |= NLHRF_NODUMP; -	pReq->m_szUrl = FB_API_URL_AUTH;  	pReq << CHAR_PARAM("email", getMStringA(DBKEY_LOGIN));  	pReq << CHAR_PARAM("password", getMStringA(DBKEY_PASS));  	pReq->CalcSig(); @@ -520,6 +519,26 @@ void FacebookProto::OnPublishPrivateMessage(const JSONNode &root)  	for (auto &it : root["attachments"]) {  		// madness... json inside json  		CMStringA szJson(it["xmaGraphQL"].as_mstring()); +		if (szJson.IsEmpty()) { +			__int64 fbid = _wtoi64(it["fbid"].as_mstring()); +			if (fbid == 0) { +				debugLogA("Neither a GQL nor an inline attachment, nothing to do"); +				continue; +			} + +			// inline attachment, request its description +			auto *pReq = CreateRequest(FB_API_URL_ATTACH, "getAttachment", "messaging.getAttachment"); +			pReq << CHAR_PARAM("mid", szId) << INT64_PARAM("aid", fbid); +			pReq->CalcSig(); + +			JsonReply reply(ExecuteRequest(pReq)); +			if (!reply.error()) { +				CMStringA str = reply.data()["redirect_uri"].as_mstring(); +				if (!str.IsEmpty()) +					szBody.AppendFormat("\r\nPicture attachment: %s", str.c_str()); +			} +			continue; +		}  		JSONROOT nBody(szJson);  		if (!nBody)  			continue;  | 
