mastodon-cpp  0.106.0
mastodon-cpp.hpp
1 /* This file is part of mastodon-cpp.
2  * Copyright © 2018, 2019 tastytea <tastytea@tastytea.de>
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef MASTODON_CPP_HPP
18 #define MASTODON_CPP_HPP
19 
20 #include <string>
21 #include <vector>
22 #include <memory>
23 #include <array>
24 #include <mutex>
25 #include <ostream>
26 #include <thread>
27 #include <cstdint>
28 #include <curlpp/cURLpp.hpp>
29 #include <curlpp/Easy.hpp>
30 
31 #include "return_types.hpp"
32 #include "types.hpp"
33 
34 using std::string;
35 using std::uint8_t;
36 
46 namespace Mastodon
47 {
69  class API
70  {
71  public:
77  class http
78  {
79  public:
89  explicit http(const API &api, const string &instance,
90  const string &access_token);
91  ~http();
92  return_call request(const http_method &meth, const string &path);
93 
103  return_call request(const http_method &meth,
104  const string &path,
105  const curlpp::Forms &formdata);
106 
115  void request_stream(const string &path, string &stream);
116 
120  void get_headers(string &headers) const;
121 
131  void cancel_stream();
132 
143  std::mutex &get_mutex();
144 
145  private:
146  const API &parent;
147  const string _instance;
148  const string _access_token;
149  string _headers;
150  bool _cancel_stream;
151  std::mutex _mutex;
152  std::thread _streamthread;
153 
154  return_call request_common(const http_method &meth,
155  const string &path,
156  const curlpp::Forms &formdata,
157  string &answer);
158  size_t callback_write(char* data, size_t size, size_t nmemb,
159  string *oss);
160  double callback_progress(double /* dltotal */, double /* dlnow */,
161  double /* ultotal */, double /* ulnow */);
162  };
163 
171  enum class v1
172  {
173  // Mastodon
174  accounts_id,
175  accounts,
176  accounts_verify_credentials,
177  accounts_update_credentials,
178  accounts_id_followers,
179  accounts_id_following,
180  accounts_id_statuses,
181  accounts_id_follow,
182  accounts_id_unfollow,
183  accounts_relationships,
184  accounts_search,
185 
186  apps,
187  apps_verify_credentials,
188 
189  blocks,
190  accounts_id_block,
191  accounts_id_unblock,
192 
193  custom_emojis,
194 
195  domain_blocks,
196 
197  endorsements,
198  accounts_id_pin,
199  accounts_id_unpin,
200 
201  favourites,
202  statuses_id_favourite,
203  statuses_id_unfavourite,
204 
205  filters,
206  filters_id,
207 
208  follow_requests,
209  follow_requests_id_authorize,
210  follow_requests_id_reject,
211 
212  suggestions,
213  suggestions_accountid,
214 
215  instance,
216 
217  lists,
218  accounts_id_lists,
219  lists_id,
220  lists_id_accounts,
221 
222  media,
223  media_id,
224 
225  mutes,
226  accounts_id_mute,
227  accounts_id_unmute,
228  statuses_id_mute,
229  statuses_id_unmute,
230 
231  notifications,
232  notifications_id,
233  notifications_clear,
234  notifications_dismiss,
235  push_subscription,
236 
237  reports,
238 
239  // scheduled_statuses,
240  // scheduled_statuses_id,
241 
242  search,
243 
244  statuses,
245  statuses_id,
246  statuses_id_context,
247  statuses_id_card,
248  statuses_id_reblogged_by,
249  statuses_id_favourited_by,
250  statuses_id_reblog,
251  statuses_id_unreblog,
252  statuses_id_pin,
253  statuses_id_unpin,
254 
255  timelines_home,
256  // timelines_conversations,
257  timelines_public,
258  timelines_tag_hashtag,
259  timelines_list_list_id,
260 
261  streaming_user,
262  streaming_public,
263  streaming_public_local,
264  streaming_hashtag,
265  // streaming_hashtag_local,
266  streaming_list,
267  // streaming_direct,
268 
269  // Glitch-Soc
270  bookmarks,
271  statuses_id_bookmark,
272  statuses_id_unbookmark
273  };
274 
282  enum class v2
283  {
284  search
285  };
286 
298  explicit API(const string &instance, const string &access_token);
299 
305  virtual ~API();
306 
314  void set_useragent(const string &useragent);
315 
323  const string get_useragent() const;
324 
332  const string get_instance() const;
333 
343  [[deprecated("Replaced by Mastodon::urlencode")]]
344  static const string urlencode(const string &str);
345 
355  [[deprecated("Replaced by Mastodon::urldecode")]]
356  static const string urldecode(const string &str);
357 
373  return_call register_app1(const string &client_name,
374  const string &redirect_uri,
375  const string &scopes,
376  const string &website,
377  string &client_id,
378  string &client_secret,
379  string &url);
380 
381 
395  return_call register_app2(const string &client_id,
396  const string &client_secret,
397  const string &redirect_uri,
398  const string &code,
399  string &access_token);
400 
410  const string get_header(const string &header) const;
411 
424  bool exceptions(const bool &value);
425 
429  bool exceptions() const;
430 
436  [[deprecated("Replaced by Mastodon::unescape_html")]]
437  static const string unescape_html(const string &html);
438 
450  void set_proxy(const string &proxy, const string &userpw = "");
451 
460  void get_proxy(string &proxy, string &userpw) const;
461 
469  const return_call get(const Mastodon::API::v1 &call);
470 
480  const return_call get(const Mastodon::API::v1 &call,
481  const parameters &parameters);
482 
492  const return_call get(const Mastodon::API::v2 &call,
493  const parameters &parameters);
494 
502  const return_call get(const string &call);
503 
515  void get_stream(const Mastodon::API::v1 &call,
516  const parameters &parameters,
517  std::unique_ptr<Mastodon::API::http> &ptr,
518  string &stream);
519 
529  void get_stream(const Mastodon::API::v1 &call,
530  std::unique_ptr<Mastodon::API::http> &ptr,
531  string &stream);
532 
542  void get_stream(const string &call,
543  std::unique_ptr<Mastodon::API::http> &ptr,
544  string &stream);
545 
557  return_call patch(const Mastodon::API::v1 &call,
558  const parameters &parameters);
559 
567  return_call post(const Mastodon::API::v1 &call);
568 
580  return_call post(const Mastodon::API::v1 &call,
581  const parameters &parameters);
582 
594  return_call post(const string &call,
595  const parameters &parameters);
596 
606  return_call put(const Mastodon::API::v1 &call,
607  const parameters &parameters);
608 
618  return_call put(const string &call, const parameters &parameters);
619 
629  return_call del(const Mastodon::API::v1 &call,
630  const parameters &parameters);
631 
641  return_call del(const string &call, const parameters &parameters);
642 
643  private:
644  const string _instance;
645  string _access_token;
646  string _useragent;
647  http _http;
648  bool _exceptions;
649  string _proxy;
650  string _proxy_userpw;
651 
660  const string maptostr(const parameters &map,
661  const bool &firstparam = true);
662 
670  const curlpp::Forms maptoformdata(const parameters &map);
671 
682  const parameters delete_params(const parameters &params,
683  const vector<string> &keys);
684  };
685 
703  const string urlencode(const string &str);
704 
718  const string urldecode(const string &str);
719 
732  const string unescape_html(const string &html);
733 }
734 
735 #endif
void set_proxy(const string &proxy, const string &userpw="")
Sets the proxy.
Definition: mastodon-cpp.cpp:285
void get_proxy(string &proxy, string &userpw) const
For internal use.
Definition: mastodon-cpp.cpp:291
Interface to the Mastodon API.
Definition: mastodon-cpp.hpp:69
void get_headers(string &headers) const
Get all headers in a string.
Definition: http.cpp:227
return_call register_app2(const string &client_id, const string &client_secret, const string &redirect_uri, const string &code, string &access_token)
Register application, step 2/2.
Definition: mastodon-cpp.cpp:226
return_call register_app1(const string &client_name, const string &redirect_uri, const string &scopes, const string &website, string &client_id, string &client_secret, string &url)
Register application, step 1/2.
Definition: mastodon-cpp.cpp:176
v1
A list of all v1 API calls.
Definition: mastodon-cpp.hpp:171
Return type for API calls.
Definition: return_types.hpp:92
return_call patch(const Mastodon::API::v1 &call, const parameters &parameters)
Make a PATCH request.
Definition: patch.cpp:24
v2
A list of all v2 API calls.
Definition: mastodon-cpp.hpp:282
Vector of Mastodon::param, used for passing parameters in calls.
Definition: types.hpp:62
const string get_header(const string &header) const
Gets the header from the last answer.
Definition: mastodon-cpp.cpp:259
void get_stream(const Mastodon::API::v1 &call, const parameters &parameters, std::unique_ptr< Mastodon::API::http > &ptr, string &stream)
Make a streaming GET request.
Definition: get_stream.cpp:24
http_method
HTTP methods. Used in API calls.
Definition: types.hpp:87
virtual ~API()
Destroys the object.
Definition: mastodon-cpp.cpp:60
void request_stream(const string &path, string &stream)
HTTP Request for streams.
Definition: http.cpp:60
Mastodon::parameters parameters
Vector of Mastodon::param, used for passing parameters in calls.
API(const string &instance, const string &access_token)
Constructs a new API object.
Definition: mastodon-cpp.cpp:32
return_call post(const Mastodon::API::v1 &call)
Make a POST request that doesn&#39;t require parameters.
Definition: post.cpp:208
void cancel_stream()
Cancels the stream. Use only with streams.
Definition: http.cpp:252
bool exceptions() const
Returns true if exceptions are turned on, false otherwise.
Definition: mastodon-cpp.cpp:280
return_call del(const Mastodon::API::v1 &call, const parameters &parameters)
Make a DELETE request that requires parameters.
Definition: delete.cpp:23
return_call put(const Mastodon::API::v1 &call, const parameters &parameters)
Make a PUT request that requires parameters.
Definition: put.cpp:23
void set_useragent(const string &useragent)
Sets the useragent. Default is mastodon-cpp/version.
Definition: mastodon-cpp.cpp:63
Collection of things to interface with server software that implements the Mastodon API...
Definition: mastodon-cpp.hpp:46
static const string unescape_html(const string &html)
Alias for Mastodon::unescape_html.
Definition: mastodon-cpp.cpp:647
static const string urlencode(const string &str)
Alias for Mastodon::urlencode.
Definition: mastodon-cpp.cpp:637
const string get_instance() const
Returns the instance.
Definition: mastodon-cpp.cpp:73
http(const API &api, const string &instance, const string &access_token)
Constructs new http object.
Definition: http.cpp:33
http class. Do not use this directly.
Definition: mastodon-cpp.hpp:77
const string get_useragent() const
Gets the useragent.
Definition: mastodon-cpp.cpp:68
static const string urldecode(const string &str)
Alias for Mastodon::urldecode.
Definition: mastodon-cpp.cpp:642
std::mutex & get_mutex()
Gets the mutex guarding the string that is written to.
Definition: http.cpp:258