diff options
author | aunsane <aunsane@gmail.com> | 2017-04-26 00:01:56 +0300 |
---|---|---|
committer | aunsane <aunsane@gmail.com> | 2017-04-26 00:02:28 +0300 |
commit | c336d52ffabca5777b5c6666cff818ac742480bf (patch) | |
tree | d30c0a67c6dfa3ac06cd401c6973145f7e18509b | |
parent | f6575a156251f15ca2c1b9d8042aa45fb62bf42a (diff) |
CloudFile: OneDrive is worked now
-rw-r--r-- | plugins/CloudFile/src/Services/microsoft_api.h | 30 | ||||
-rw-r--r-- | plugins/CloudFile/src/Services/microsoft_service.cpp | 31 | ||||
-rw-r--r-- | plugins/CloudFile/src/Services/microsoft_service.h | 1 | ||||
-rw-r--r-- | plugins/CloudFile/src/cloud_service.cpp | 5 |
4 files changed, 35 insertions, 32 deletions
diff --git a/plugins/CloudFile/src/Services/microsoft_api.h b/plugins/CloudFile/src/Services/microsoft_api.h index 0717a7a00a..1c3c323520 100644 --- a/plugins/CloudFile/src/Services/microsoft_api.h +++ b/plugins/CloudFile/src/Services/microsoft_api.h @@ -51,16 +51,20 @@ namespace OneDriveAPI { public: CreateUploadSessionRequest(const char *token, const char *name) : - HttpRequest(REQUEST_POST, FORMAT, ONEDRIVE_API "/root:/%s:/createUploadSession", name) + HttpRequest(REQUEST_POST, FORMAT, ONEDRIVE_API "/special/approot:/%s:/createUploadSession", name) { AddBearerAuthHeader(token); AddHeader("Content-Type", "application/json"); - JSONNode params(JSON_NODE); - params + JSONNode item(JSON_NODE); + item.set_name("item"); + item << JSONNode("@microsoft.graph.conflictBehavior", "rename") << JSONNode("name", name); + JSONNode params(JSON_NODE); + params << item; + json_string data = params.write(); SetData(data.c_str(), data.length()); } @@ -71,11 +75,15 @@ namespace OneDriveAPI AddBearerAuthHeader(token); AddHeader("Content-Type", "application/json"); - JSONNode params(JSON_NODE); - params + JSONNode item(JSON_NODE); + item.set_name("item"); + item << JSONNode("@microsoft.graph.conflictBehavior", "rename") << JSONNode("name", name); + JSONNode params(JSON_NODE); + params << item; + json_string data = params.write(); SetData(data.c_str(), data.length()); } @@ -100,15 +108,19 @@ namespace OneDriveAPI { public: CreateFolderRequest(const char *token, const char *path) : - HttpRequest(REQUEST_PUT, ONEDRIVE_API "/items/root/children") + HttpRequest(REQUEST_PUT, ONEDRIVE_API "/special/approot/children") { AddBearerAuthHeader(token); AddHeader("Content-Type", "application/json"); + JSONNode folder(JSON_NODE); + folder.set_name("folder"); + folder << JSONNode(JSON_NODE); + JSONNode params(JSON_NODE); params << JSONNode("name", path) - << JSONNode("folder", ""); + << folder; json_string data = params.write(); SetData(data.c_str(), data.length()); @@ -118,8 +130,8 @@ namespace OneDriveAPI class CreateSharedLinkRequest : public HttpRequest { public: - CreateSharedLinkRequest(const char *token, const char *path) : - HttpRequest(REQUEST_POST, FORMAT, ONEDRIVE_API "/items/%s/createLink", path) + CreateSharedLinkRequest(const char *token, const char *itemId) : + HttpRequest(REQUEST_POST, FORMAT, ONEDRIVE_API "/items/%s/createLink", itemId) { AddBearerAuthHeader(token); AddHeader("Content-Type", "application/json"); diff --git a/plugins/CloudFile/src/Services/microsoft_service.cpp b/plugins/CloudFile/src/Services/microsoft_service.cpp index d988ec222a..b8351019ed 100644 --- a/plugins/CloudFile/src/Services/microsoft_service.cpp +++ b/plugins/CloudFile/src/Services/microsoft_service.cpp @@ -57,7 +57,9 @@ void COneDriveService::Login() void COneDriveService::Logout() { - mir_forkthreadex(RevokeAccessTokenThread, this); + db_unset(NULL, GetModule(), "TokenSecret"); + db_unset(NULL, GetModule(), "ExpiresIn"); + db_unset(NULL, GetModule(), "RefreshToken"); } unsigned COneDriveService::RequestAccessTokenThread(void *owner, void *param) @@ -91,7 +93,7 @@ unsigned COneDriveService::RequestAccessTokenThread(void *owner, void *param) return 0; } - JSONNode node = root.at("error"); + JSONNode node = root.at("error_description"); if (!node.isnull()) { ptrW error_description(mir_a2u_cp(node.as_string().c_str(), CP_UTF8)); Netlib_Logf(service->hConnection, "%s: %s", service->GetModule(), service->HttpStatusToError(response->resultCode)); @@ -116,17 +118,6 @@ unsigned COneDriveService::RequestAccessTokenThread(void *owner, void *param) return 0; } -unsigned COneDriveService::RevokeAccessTokenThread(void *param) -{ - //COneDriveService *service = (COneDriveService*)param; - - /*ptrA token(db_get_sa(NULL, service->GetModule(), "TokenSecret")); - OneDriveAPI::RevokeAccessTokenRequest request(token); - NLHR_PTR response(request.Send(service->hConnection));*/ - - return 0; -} - void COneDriveService::HandleJsonError(JSONNode &node) { JSONNode error = node.at("error"); @@ -139,10 +130,11 @@ void COneDriveService::HandleJsonError(JSONNode &node) void COneDriveService::CreateUploadSession(char *uploadUri, const char *name, const char *parentId) { ptrA token(db_get_sa(NULL, GetModule(), "TokenSecret")); - OneDriveAPI::CreateUploadSessionRequest request = mir_strlen(parentId) - ? OneDriveAPI::CreateUploadSessionRequest(token, parentId, name) - : OneDriveAPI::CreateUploadSessionRequest(token, name); - NLHR_PTR response(request.Send(hConnection)); + OneDriveAPI::CreateUploadSessionRequest *request = mir_strlen(parentId) + ? new OneDriveAPI::CreateUploadSessionRequest(token, parentId, name) + : new OneDriveAPI::CreateUploadSessionRequest(token, name); + NLHR_PTR response(request->Send(hConnection)); + delete request; JSONNode root = GetJsonResponse(response); JSONNode node = root.at("uploadUrl"); @@ -190,8 +182,9 @@ void COneDriveService::CreateSharedLink(const char *itemId, char *url) NLHR_PTR response(request.Send(hConnection)); JSONNode root = GetJsonResponse(response); - JSONNode node = root.at("webUrl"); - mir_strcpy(url, node.as_string().c_str()); + JSONNode node = root.at("link"); + JSONNode webUrl = root.at("webUrl"); + mir_strcpy(url, webUrl.as_string().c_str()); } UINT COneDriveService::Upload(FileTransferParam *ftp) diff --git a/plugins/CloudFile/src/Services/microsoft_service.h b/plugins/CloudFile/src/Services/microsoft_service.h index 7853378e07..8c3c30e035 100644 --- a/plugins/CloudFile/src/Services/microsoft_service.h +++ b/plugins/CloudFile/src/Services/microsoft_service.h @@ -5,7 +5,6 @@ class COneDriveService : public CCloudService { private: static unsigned RequestAccessTokenThread(void *owner, void *param); - static unsigned __stdcall RevokeAccessTokenThread(void *param); void HandleJsonError(JSONNode &node); diff --git a/plugins/CloudFile/src/cloud_service.cpp b/plugins/CloudFile/src/cloud_service.cpp index 3f35bc1d4b..bbee441372 100644 --- a/plugins/CloudFile/src/cloud_service.cpp +++ b/plugins/CloudFile/src/cloud_service.cpp @@ -11,7 +11,7 @@ void InitServices() { Services.insert(new CDropboxService(hNetlibConnection)); Services.insert(new CGDriveService(hNetlibConnection)); - //Services.insert(new COneDriveService(hNetlibConnection)); + Services.insert(new COneDriveService(hNetlibConnection)); Services.insert(new CYandexService(hNetlibConnection)); PROTOCOLDESCRIPTOR pd = { sizeof(pd) }; @@ -146,8 +146,7 @@ void CCloudService::HandleHttpError(NETLIBHTTPREQUEST *response) if (response == NULL) throw Exception(HttpStatusToError()); - if (response->resultCode != HTTP_CODE_OK && - response->resultCode != HTTP_CODE_CONFLICT) { + if (!HTTP_CODE_SUCCESS(response->resultCode)) { if (response->dataLength) throw Exception(response->pData); throw Exception(HttpStatusToError(response->resultCode)); |