summaryrefslogtreecommitdiff
path: root/plugins/CloudFile/src/Services/google_api.h
blob: 7df5446065d3c65443f0eed578dad891d30e5b13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef _GDRIVESERVICE_API_H_
#define _GDRIVESERVICE_API_H_

namespace GDriveAPI
{
#define GOOGLE_OAUTH "https://accounts.google.com/o/oauth2/v2"
#define GDRIVE_API "https://www.googleapis.com/drive/v2/files"

#define GOOGLE_APP_ID "271668553802-3sd3tubkf165ibgrqnrhe3id8mcgnaf7.apps.googleusercontent.com"
#include "../../../miranda-private-keys/Google/client_secret.h"

	class GetAccessTokenRequest : public HttpRequest
	{
	public:
		GetAccessTokenRequest(const char *code) :
			HttpRequest(REQUEST_POST, "https://www.googleapis.com/oauth2/v4/token")
		{
			AddHeader("Content-Type", "application/x-www-form-urlencoded");

			CMStringA data(CMStringDataFormat::FORMAT,
				"redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_id=%s&client_secret=%s&grant_type=authorization_code&code=%s",
				GOOGLE_APP_ID, GOOGLE_CLIENT_SECRET, code);
			SetData(data.GetBuffer(), data.GetLength());
		}
	};

	class RevokeAccessTokenRequest : public HttpRequest
	{
	public:
		RevokeAccessTokenRequest(const char *token) :
			HttpRequest(REQUEST_POST, GOOGLE_OAUTH "/revoke")
		{
			AddUrlParameter("token=%s", token);
		}
	};

	class StartUploadFileRequest : public HttpRequest
	{
	public:
		StartUploadFileRequest(const char *token) :
			HttpRequest(REQUEST_POST, GDRIVE_API)
		{
			AddBearerAuthHeader(token);
			AddHeader("Content-Type", "application/json");
			AddUrlParameter("uploadType=resumable");
		}
	};

	class UploadFileRequest : public HttpRequest
	{
	public:
		UploadFileRequest(const char *token, const char *data, size_t size) :
			HttpRequest(REQUEST_POST, GDRIVE_API)
		{
			AddBearerAuthHeader(token);
			AddUrlParameter("uploadType=resumable");

			SetData(data, size);
		}
	};

	class CreateFolderRequest : public HttpRequest
	{
	public:
		CreateFolderRequest(const char *token, const char *path) :
			HttpRequest(REQUEST_PUT, GDRIVE_API)
		{
			AddBearerAuthHeader(token);
			AddHeader("Content-Type", "application/json");

			JSONNode params(JSON_NODE);
			params
				<< JSONNode("name", path)
				<< JSONNode("mimeType", "pplication/vnd.google-apps.folder");

			json_string data = params.write();
			SetData(data.c_str(), data.length());
		}
	};

	class ShareRequest : public HttpRequest
	{
	public:
		ShareRequest(const char *token, const char *fileId) :
			HttpRequest(REQUEST_PUT, FORMAT, GDRIVE_API "/%s/permissions", fileId)
		{
			AddBearerAuthHeader(token);
			AddHeader("Content-Type", "application/json");

			JSONNode params(JSON_NODE);
			params
				<< JSONNode("role", "reader")
				<< JSONNode("type", "anyone");

			json_string data = params.write();
			SetData(data.c_str(), data.length());
		}
	};
};

#endif //_GDRIVESERVICE_API_H_