diff options
-rw-r--r-- | docs/index.rst | 2 | ||||
-rw-r--r-- | mastodon/Mastodon.py | 34 |
2 files changed, 30 insertions, 6 deletions
diff --git a/docs/index.rst b/docs/index.rst index 3cf236c..4efebc6 100644 --- a/docs/index.rst +++ b/docs/index.rst | |||
@@ -674,6 +674,7 @@ is specified, Mastodon.py defaults to https. | |||
674 | .. automethod:: Mastodon.__init__ | 674 | .. automethod:: Mastodon.__init__ |
675 | .. _log_in(): | 675 | .. _log_in(): |
676 | .. automethod:: Mastodon.log_in | 676 | .. automethod:: Mastodon.log_in |
677 | .. _auth_request_url(): | ||
677 | .. automethod:: Mastodon.auth_request_url | 678 | .. automethod:: Mastodon.auth_request_url |
678 | 679 | ||
679 | Versioning | 680 | Versioning |
@@ -712,6 +713,7 @@ and local timelines. | |||
712 | .. automethod:: Mastodon.timeline | 713 | .. automethod:: Mastodon.timeline |
713 | .. automethod:: Mastodon.timeline_home | 714 | .. automethod:: Mastodon.timeline_home |
714 | .. automethod:: Mastodon.timeline_local | 715 | .. automethod:: Mastodon.timeline_local |
716 | .. _timeline_public(): | ||
715 | .. automethod:: Mastodon.timeline_public | 717 | .. automethod:: Mastodon.timeline_public |
716 | .. _timeline_hashtag(): | 718 | .. _timeline_hashtag(): |
717 | .. automethod:: Mastodon.timeline_hashtag | 719 | .. automethod:: Mastodon.timeline_hashtag |
diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index abd6b42..5ba33d4 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py | |||
@@ -190,14 +190,19 @@ class Mastodon: | |||
190 | Create a new app with given `client_name` and `scopes` (The basic scropse are "read", "write", "follow" and "push" | 190 | Create a new app with given `client_name` and `scopes` (The basic scropse are "read", "write", "follow" and "push" |
191 | - more granular scopes are available, please refere to Mastodon documentation for which). | 191 | - more granular scopes are available, please refere to Mastodon documentation for which). |
192 | 192 | ||
193 | Specify `redirect_uris` if you want users to be redirected to a certain page after authenticating. | 193 | Specify `redirect_uris` if you want users to be redirected to a certain page after authenticating in an oauth flow. |
194 | You can specify multiple URLs by passing a list. Note that if you wish to use OAuth authentication with redirects, | ||
195 | the redirect URI must be one of the URLs specified here. | ||
196 | |||
194 | Specify `to_file` to persist your apps info to a file so you can use them in the constructor. | 197 | Specify `to_file` to persist your apps info to a file so you can use them in the constructor. |
195 | Specify `api_base_url` if you want to register an app on an instance different from the flagship one. | 198 | Specify `api_base_url` if you want to register an app on an instance different from the flagship one. |
199 | Specify `website` to give a website for your app. | ||
196 | 200 | ||
197 | Specify `session` with a requests.Session for it to be used instead of the deafult. | 201 | Specify `session` with a requests.Session for it to be used instead of the deafult. |
198 | 202 | ||
199 | Presently, app registration is open by default, but this is not guaranteed to be the case for all | 203 | Presently, app registration is open by default, but this is not guaranteed to be the case for all |
200 | future mastodon instances or even the flagship instance in the future. | 204 | future mastodon instances or even the flagship instance in the future. |
205 | |||
201 | 206 | ||
202 | Returns `client_id` and `client_secret`, both as strings. | 207 | Returns `client_id` and `client_secret`, both as strings. |
203 | """ | 208 | """ |
@@ -210,6 +215,8 @@ class Mastodon: | |||
210 | 215 | ||
211 | try: | 216 | try: |
212 | if redirect_uris is not None: | 217 | if redirect_uris is not None: |
218 | if isinstance(redirect_uris, (list, tuple)): | ||
219 | redirect_uris = "\n".join(list(redirect_uris)) | ||
213 | request_data['redirect_uris'] = redirect_uris | 220 | request_data['redirect_uris'] = redirect_uris |
214 | else: | 221 | else: |
215 | request_data['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob' | 222 | request_data['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob' |
@@ -370,8 +377,20 @@ class Mastodon: | |||
370 | return Mastodon.__SUPPORTED_MASTODON_VERSION | 377 | return Mastodon.__SUPPORTED_MASTODON_VERSION |
371 | 378 | ||
372 | def auth_request_url(self, client_id=None, redirect_uris="urn:ietf:wg:oauth:2.0:oob", | 379 | def auth_request_url(self, client_id=None, redirect_uris="urn:ietf:wg:oauth:2.0:oob", |
373 | scopes=__DEFAULT_SCOPES): | 380 | scopes=__DEFAULT_SCOPES, force_login=False): |
374 | """Returns the url that a client needs to request the grant from the server. | 381 | """ |
382 | Returns the url that a client needs to request an oauth grant from the server. | ||
383 | |||
384 | To log in with oauth, send your user to this URL. The user will then log in and | ||
385 | get a code which you can pass to log_in. | ||
386 | |||
387 | scopes are as in `log_in()`_, redirect_uris is where the user should be redirected to | ||
388 | after authentication. Note that redirect_uris must be one of the URLs given during | ||
389 | app registration. When using urn:ietf:wg:oauth:2.0:oob, the code is simply displayed, | ||
390 | otherwise it is added to the given URL as the "code" request parameter. | ||
391 | |||
392 | Pass force_login if you want the user to always log in even when already logged | ||
393 | into web mastodon (i.e. when registering multiple different accounts in an app). | ||
375 | """ | 394 | """ |
376 | if client_id is None: | 395 | if client_id is None: |
377 | client_id = self.client_id | 396 | client_id = self.client_id |
@@ -385,6 +404,7 @@ class Mastodon: | |||
385 | params['response_type'] = "code" | 404 | params['response_type'] = "code" |
386 | params['redirect_uri'] = redirect_uris | 405 | params['redirect_uri'] = redirect_uris |
387 | params['scope'] = " ".join(scopes) | 406 | params['scope'] = " ".join(scopes) |
407 | params['force_login'] = force_login | ||
388 | formatted_params = urlencode(params) | 408 | formatted_params = urlencode(params) |
389 | return "".join([self.api_base_url, "/oauth/authorize?", formatted_params]) | 409 | return "".join([self.api_base_url, "/oauth/authorize?", formatted_params]) |
390 | 410 | ||
@@ -404,8 +424,10 @@ class Mastodon: | |||
404 | username / password credentials given are incorrect, and | 424 | username / password credentials given are incorrect, and |
405 | `MastodonAPIError` if all of the requested scopes were not granted. | 425 | `MastodonAPIError` if all of the requested scopes were not granted. |
406 | 426 | ||
407 | For OAuth2 documentation, compare | 427 | For OAuth2, obtain a code via having your user go to the url returned by |
408 | https://github.com/doorkeeper-gem/doorkeeper/wiki/Interacting-as-an-OAuth-client-with-Doorkeeper | 428 | `auth_request_url()`_ and pass it as the code parameter. In this case, |
429 | make sure to also pass the same redirect_uri parameter as you used when | ||
430 | generating the auth request URL. | ||
409 | 431 | ||
410 | Returns the access token as a string. | 432 | Returns the access token as a string. |
411 | """ | 433 | """ |