mastodonpp  0.5.7
C++ wrapper for the Mastodon and Pleroma APIs.
instance.hpp
1 /* This file is part of mastodonpp.
2  * Copyright © 2020 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 Affero 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 Affero General Public License for more details.
12  *
13  * You should have received a copy of the GNU Affero General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef MASTODONPP_INSTANCE_HPP
18 #define MASTODONPP_INSTANCE_HPP
19 
20 #include "curl_wrapper.hpp"
21 #include "types.hpp"
22 
23 #include <cstdint>
24 #include <string>
25 #include <string_view>
26 #include <utility>
27 #include <vector>
28 
29 namespace mastodonpp
30 {
31 
32 using std::string;
33 using std::string_view;
34 using std::uint64_t;
35 using std::vector;
36 
48 class Instance : public CURLWrapper
49 {
50 public:
59  explicit Instance(string_view hostname, string_view access_token);
60 
66  Instance(const Instance &other);
67 
69  Instance(Instance &&other) noexcept = delete;
70 
72  ~Instance() noexcept override = default;
73 
75  Instance &operator=(const Instance &other) = delete;
76 
78  Instance &operator=(Instance &&other) noexcept = delete;
79 
90  inline void copy_connection_properties(CURLWrapper &curlwrapper) const
91  {
92  curlwrapper.setup_connection_properties(_proxy, _access_token, _cainfo,
93  _useragent);
94  }
95 
101  [[nodiscard]] inline string_view get_hostname() const noexcept
102  {
103  return _hostname;
104  }
105 
113  [[nodiscard]] inline string_view get_baseuri() const noexcept
114  {
115  return _baseuri;
116  }
117 
123  [[nodiscard]] inline string_view get_access_token() const noexcept
124  {
125  return _access_token;
126  }
127 
136  inline void set_access_token(const string_view access_token)
137  {
138  _access_token = access_token;
139  CURLWrapper::set_access_token(access_token);
140  }
141 
153  [[nodiscard]] uint64_t get_max_chars() noexcept;
154 
160  void set_proxy(const string_view proxy) override
161  {
162  _proxy = proxy;
163  CURLWrapper::set_proxy(proxy);
164  }
165 
175  [[nodiscard]] answer_type get_nodeinfo();
176 
188  vector<string> get_post_formats() noexcept;
189 
198  void set_cainfo(string_view path) override
199  {
200  _cainfo = path;
202  }
203 
212  void set_useragent(const string_view useragent) override
213  {
214  _useragent = useragent;
215  CURLWrapper::set_useragent(useragent);
216  }
217 
248  class ObtainToken : public CURLWrapper
249  {
250  public:
256  explicit ObtainToken(Instance &instance)
257  : _instance{instance}
258  , _baseuri{instance.get_baseuri()}
259  {
260  _instance.copy_connection_properties(*this);
261  }
262 
282  [[nodiscard]] answer_type step_1(string_view client_name,
283  string_view scopes,
284  string_view website);
285 
301  [[nodiscard]] answer_type step_2(string_view code);
302 
303  private:
304  Instance &_instance;
305  const string _baseuri;
306  string _scopes;
307  string _client_id;
308  string _client_secret;
309  };
310 
311 private:
312  const string _hostname;
313  const string _baseuri;
314  string _access_token;
315  uint64_t _max_chars;
316  string _proxy;
317  vector<string> _post_formats;
318  string _cainfo;
319  string _useragent;
320 };
321 
322 } // namespace mastodonpp
323 
324 #endif // MASTODONPP_INSTANCE_HPP
Handles the details of network connections.
Definition: curl_wrapper.hpp:58
virtual void set_proxy(string_view proxy)
Set the proxy to use.
Definition: curl_wrapper.cpp:229
void set_access_token(string_view access_token)
Set OAuth 2.0 Bearer Access Token.
Definition: curl_wrapper.cpp:240
virtual void set_useragent(string_view useragent)
Sets the User-Agent.
Definition: curl_wrapper.cpp:276
virtual void set_cainfo(string_view path)
Set path to Certificate Authority (CA) bundle.
Definition: curl_wrapper.cpp:266
Simplifies obtaining an OAuth 2.0 Bearer Access Token.
Definition: instance.hpp:249
answer_type step_1(string_view client_name, string_view scopes, string_view website)
Creates an application via /api/v1/apps.
ObtainToken(Instance &instance)
Constructor.
Definition: instance.hpp:256
answer_type step_2(string_view code)
Creates a token via /oauth/token.
Holds the access data of an instance.
Definition: instance.hpp:49
void set_cainfo(string_view path) override
Set path to Certificate Authority (CA) bundle.
Definition: instance.hpp:198
Instance(const Instance &other)
Copy constructor. A new CURLWrapper is constructed.
Instance(string_view hostname, string_view access_token)
Construct a new Instance object.
void set_access_token(const string_view access_token)
Set OAuth 2.0 Bearer Access Token.
Definition: instance.hpp:136
uint64_t get_max_chars() noexcept
Returns the maximum number of characters per post.
void set_useragent(const string_view useragent) override
Sets the User-Agent.
Definition: instance.hpp:212
string_view get_access_token() const noexcept
Returns the access token.
Definition: instance.hpp:123
answer_type get_nodeinfo()
Returns the NodeInfo of the instance.
Instance(Instance &&other) noexcept=delete
Move constructor.
vector< string > get_post_formats() noexcept
Returns the allowed mime types for statuses.
string_view get_baseuri() const noexcept
Returns the base URI.
Definition: instance.hpp:113
string_view get_hostname() const noexcept
Returns the hostname.
Definition: instance.hpp:101
void copy_connection_properties(CURLWrapper &curlwrapper) const
Set the properties of the connection of the calling class up.
Definition: instance.hpp:90
void set_proxy(const string_view proxy) override
Set the proxy to use.
Definition: instance.hpp:160
~Instance() noexcept override=default
Destructor.
C++ wrapper for the Mastodon API.
Definition: api.hpp:25
Return type for Requests.
Definition: types.hpp:80