Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-oauthlib for openSUSE:Factory 
checked in at 2022-09-17 20:08:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oauthlib (Old)
 and      /work/SRC/openSUSE:Factory/.python-oauthlib.new.2083 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oauthlib"

Sat Sep 17 20:08:19 2022 rev:32 rq:1003122 version:3.2.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oauthlib/python-oauthlib.changes  
2022-02-06 23:54:00.694928550 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oauthlib.new.2083/python-oauthlib.changes    
    2022-09-17 20:08:26.704828892 +0200
@@ -1,0 +2,13 @@
+Mon Sep 12 14:39:20 UTC 2022 - Arun Persaud <a...@gmx.de>
+
+- specfile:
+  * update requirements
+
+- update to version 3.2.1:
+  * OAuth2.0 Provider: * #803: Metadata endpoint support of non-HTTPS
+    * CVE-2022-36087, bugzilla # 1203333
+  * OAuth1.0: * #818: Allow IPv6 being parsed by signature
+  * General: * Improved and fixed documentation warnings. * Cosmetic
+    changes based on isort
+
+-------------------------------------------------------------------

Old:
----
  oauthlib-3.2.0.tar.gz

New:
----
  oauthlib-3.2.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-oauthlib.spec ++++++
--- /var/tmp/diff_new_pack.4BFqqf/_old  2022-09-17 20:08:27.372830820 +0200
+++ /var/tmp/diff_new_pack.4BFqqf/_new  2022-09-17 20:08:27.376830831 +0200
@@ -19,23 +19,23 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-oauthlib
-Version:        3.2.0
+Version:        3.2.1
 Release:        0
 Summary:        A Generic Implementation of the OAuth Request-Signing Logic
 License:        BSD-3-Clause
 Group:          Development/Languages/Python
 URL:            https://github.com/oauthlib/oauthlib
 Source:         
https://files.pythonhosted.org/packages/source/o/oauthlib/oauthlib-%{version}.tar.gz
-BuildRequires:  %{python_module PyJWT >= 1.0.0}
-BuildRequires:  %{python_module blinker}
-BuildRequires:  %{python_module cryptography}
+BuildRequires:  %{python_module PyJWT >= 2.0.0}
+BuildRequires:  %{python_module blinker >= 1.4}
+BuildRequires:  %{python_module cryptography >= 3.0.0 }
 BuildRequires:  %{python_module pyasn1}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-PyJWT >= 1.0.0
-Requires:       python-blinker
-Requires:       python-cryptography
+Requires:       python-PyJWT >= 2.0.0
+Requires:       python-blinker >= 1.4
+Requires:       python-cryptography >= 3.0.0
 BuildArch:      noarch
 %python_subpackages
 

++++++ oauthlib-3.2.0.tar.gz -> oauthlib-3.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/CHANGELOG.rst 
new/oauthlib-3.2.1/CHANGELOG.rst
--- old/oauthlib-3.2.0/CHANGELOG.rst    2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/CHANGELOG.rst    2022-09-09 21:53:55.000000000 +0200
@@ -1,6 +1,19 @@
 Changelog
 =========
 
+3.2.1 (2022-09-09)
+------------------
+OAuth2.0 Provider:
+* #803: Metadata endpoint support of non-HTTPS
+* CVE-2022-36087
+
+OAuth1.0:
+* #818: Allow IPv6 being parsed by signature
+
+General:
+* Improved and fixed documentation warnings.
+* Cosmetic changes based on isort
+
 3.2.0 (2022-01-29)
 ------------------
 OAuth2.0 Client:
@@ -146,7 +159,7 @@
 General fixes:
 
 * $ and ' are allowed to be unencoded in query strings #564
-* Request attributes are no longer overriden by HTTP Headers #409
+* Request attributes are no longer overridden by HTTP Headers #409
 * Removed unnecessary code for handling python2.6
 * Add support of python3.7 #621
 * Several minors updates to setup.py and tox
@@ -204,7 +217,7 @@
 * Added log statements to except clauses.
 * According to RC7009 Section 2.1, a client should include authentication 
credentials when revoking its tokens.
   As discussed in #339, this is not make sense for public clients.
-  However, in that case, the public client should still be checked that is 
infact a public client (authenticate_client_id).
+  However, in that case, the public client should still be checked that is in 
fact a public client (authenticate_client_id).
 * Improved prompt parameter validation.
 * Added two error codes from RFC 6750.
 * Hybrid response types are now be fragment-encoded.
@@ -354,7 +367,7 @@
 Draft revocation endpoint features and numerous fixes including:
 
 * (OAuth 2 Provider) is_within_original_scope to check whether a refresh token
-  is trying to aquire a new set of scopes that are a subset of the original 
scope.
+  is trying to acquire a new set of scopes that are a subset of the original 
scope.
 
 * (OAuth 2 Provider) expires_in token lifetime can be set per request.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/PKG-INFO new/oauthlib-3.2.1/PKG-INFO
--- old/oauthlib-3.2.0/PKG-INFO 2022-01-29 22:59:32.000000000 +0100
+++ new/oauthlib-3.2.1/PKG-INFO 2022-09-09 22:17:50.956804500 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oauthlib
-Version: 3.2.0
+Version: 3.2.1
 Summary: A generic, spec-compliant, thorough implementation of the OAuth 
request-signing logic
 Home-page: https://github.com/oauthlib/oauthlib
 Author: The OAuthlib Community
@@ -42,8 +42,8 @@
 *A generic, spec-compliant, thorough implementation of the OAuth 
request-signing
 logic for Python 3.6+.*
 
-.. image:: https://travis-ci.org/oauthlib/oauthlib.svg?branch=master
-  :target: https://travis-ci.org/oauthlib/oauthlib
+.. image:: https://app.travis-ci.com/oauthlib/oauthlib.svg?branch=master
+  :target: https://app.travis-ci.com/oauthlib/oauthlib
   :alt: Travis
 .. image:: https://coveralls.io/repos/oauthlib/oauthlib/badge.svg?branch=master
   :target: https://coveralls.io/r/oauthlib/oauthlib
@@ -141,7 +141,7 @@
 
 Chances are you have run into something annoying that you wish there was
 documentation for, if you wish to gain eternal fame and glory, and a drink if 
we
-have the pleasure to run into eachother, please send a docs pull request =)
+have the pleasure to run into each other, please send a docs pull request =)
 
 .. _`Gitter community`: https://gitter.im/oauthlib/Lobby
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/README.rst 
new/oauthlib-3.2.1/README.rst
--- old/oauthlib-3.2.0/README.rst       2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/README.rst       2022-09-06 22:10:05.000000000 +0200
@@ -4,8 +4,8 @@
 *A generic, spec-compliant, thorough implementation of the OAuth 
request-signing
 logic for Python 3.6+.*
 
-.. image:: https://travis-ci.org/oauthlib/oauthlib.svg?branch=master
-  :target: https://travis-ci.org/oauthlib/oauthlib
+.. image:: https://app.travis-ci.com/oauthlib/oauthlib.svg?branch=master
+  :target: https://app.travis-ci.com/oauthlib/oauthlib
   :alt: Travis
 .. image:: https://coveralls.io/repos/oauthlib/oauthlib/badge.svg?branch=master
   :target: https://coveralls.io/r/oauthlib/oauthlib
@@ -103,7 +103,7 @@
 
 Chances are you have run into something annoying that you wish there was
 documentation for, if you wish to gain eternal fame and glory, and a drink if 
we
-have the pleasure to run into eachother, please send a docs pull request =)
+have the pleasure to run into each other, please send a docs pull request =)
 
 .. _`Gitter community`: https://gitter.im/oauthlib/Lobby
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/__init__.py 
new/oauthlib-3.2.1/oauthlib/__init__.py
--- old/oauthlib-3.2.0/oauthlib/__init__.py     2022-01-29 22:58:41.000000000 
+0100
+++ new/oauthlib-3.2.1/oauthlib/__init__.py     2022-09-06 22:40:22.000000000 
+0200
@@ -12,7 +12,7 @@
 from logging import NullHandler
 
 __author__ = 'The OAuthlib Community'
-__version__ = '3.2.0'
+__version__ = '3.2.1'
 
 logging.getLogger('oauthlib').addHandler(NullHandler())
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/common.py 
new/oauthlib-3.2.1/oauthlib/common.py
--- old/oauthlib-3.2.0/oauthlib/common.py       2022-01-29 22:58:41.000000000 
+0100
+++ new/oauthlib-3.2.1/oauthlib/common.py       2022-09-06 22:10:05.000000000 
+0200
@@ -18,11 +18,9 @@
 from . import get_debug
 
 try:
-    from secrets import randbits
-    from secrets import SystemRandom
+    from secrets import SystemRandom, randbits
 except ImportError:
-    from random import getrandbits as randbits
-    from random import SystemRandom
+    from random import SystemRandom, getrandbits as randbits
 
 UNICODE_ASCII_CHARACTER_SET = ('abcdefghijklmnopqrstuvwxyz'
                                'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/oauth1/__init__.py 
new/oauthlib-3.2.1/oauthlib/oauth1/__init__.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/__init__.py      2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/__init__.py      2022-09-06 
22:10:05.000000000 +0200
@@ -5,24 +5,19 @@
 This module is a wrapper for the most recent implementation of OAuth 1.0 Client
 and Server classes.
 """
-from .rfc5849 import Client
-from .rfc5849 import (SIGNATURE_HMAC,
-                      SIGNATURE_HMAC_SHA1,
-                      SIGNATURE_HMAC_SHA256,
-                      SIGNATURE_HMAC_SHA512,
-                      SIGNATURE_RSA,
-                      SIGNATURE_RSA_SHA1,
-                      SIGNATURE_RSA_SHA256,
-                      SIGNATURE_RSA_SHA512,
-                      SIGNATURE_PLAINTEXT)
-from .rfc5849 import SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_QUERY
-from .rfc5849 import SIGNATURE_TYPE_BODY
+from .rfc5849 import (
+    SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256,
+    SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA,
+    SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512,
+    SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY,
+    Client,
+)
+from .rfc5849.endpoints import (
+    AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint,
+    ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer,
+)
+from .rfc5849.errors import (
+    InsecureTransportError, InvalidClientError, InvalidRequestError,
+    InvalidSignatureMethodError, OAuth1Error,
+)
 from .rfc5849.request_validator import RequestValidator
-from .rfc5849.endpoints import RequestTokenEndpoint, AuthorizationEndpoint
-from .rfc5849.endpoints import AccessTokenEndpoint, ResourceEndpoint
-from .rfc5849.endpoints import SignatureOnlyEndpoint, WebApplicationServer
-from .rfc5849.errors import (InsecureTransportError,
-                             InvalidClientError,
-                             InvalidRequestError,
-                             InvalidSignatureMethodError,
-                             OAuth1Error)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/base.py 
new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/base.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/base.py        
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/base.py        
2022-09-06 22:10:05.000000000 +0200
@@ -11,12 +11,11 @@
 from oauthlib.common import CaseInsensitiveDict, Request, generate_token
 
 from .. import (
-    CONTENT_TYPE_FORM_URLENCODED,
-    SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, SIGNATURE_HMAC_SHA512,
-    SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512,
-    SIGNATURE_PLAINTEXT,
-    SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY,
-    SIGNATURE_TYPE_QUERY, errors, signature, utils)
+    CONTENT_TYPE_FORM_URLENCODED, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256,
+    SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA_SHA1,
+    SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, SIGNATURE_TYPE_AUTH_HEADER,
+    SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, errors, signature, utils,
+)
 
 
 class BaseEndpoint:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/request_token.py 
new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/request_token.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/request_token.py       
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/request_token.py       
2022-09-06 22:10:05.000000000 +0200
@@ -152,7 +152,7 @@
             request.client_key = self.request_validator.dummy_client
 
         # Note that `realm`_ is only used in authorization headers and how
-        # it should be interepreted is not included in the OAuth spec.
+        # it should be interpreted is not included in the OAuth spec.
         # However they could be seen as a scope or realm to which the
         # client has access and as such every client should be checked
         # to ensure it is authorized access to that scope or realm.
@@ -164,7 +164,7 @@
         # workflow where a client requests access to a specific realm.
         # This first step (obtaining request token) need not require a realm
         # and can then be identified by checking the require_resource_owner
-        # flag and abscence of realm.
+        # flag and absence of realm.
         #
         # Clients obtaining an access token will not supply a realm and it will
         # not be checked. Instead the previously requested realm should be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/resource.py 
new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/resource.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/endpoints/resource.py    
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/endpoints/resource.py    
2022-09-06 22:10:05.000000000 +0200
@@ -113,7 +113,7 @@
             request.resource_owner_key = 
self.request_validator.dummy_access_token
 
         # Note that `realm`_ is only used in authorization headers and how
-        # it should be interepreted is not included in the OAuth spec.
+        # it should be interpreted is not included in the OAuth spec.
         # However they could be seen as a scope or realm to which the
         # client has access and as such every client should be checked
         # to ensure it is authorized access to that scope or realm.
@@ -125,7 +125,7 @@
         # workflow where a client requests access to a specific realm.
         # This first step (obtaining request token) need not require a realm
         # and can then be identified by checking the require_resource_owner
-        # flag and abscence of realm.
+        # flag and absence of realm.
         #
         # Clients obtaining an access token will not supply a realm and it will
         # not be checked. Instead the previously requested realm should be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/request_validator.py 
new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/request_validator.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/request_validator.py     
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/request_validator.py     
2022-09-06 22:10:05.000000000 +0200
@@ -19,7 +19,7 @@
     Methods used to check the format of input parameters. Common tests include
     length, character set, membership, range or pattern. These tests are
     referred to as `whitelisting or blacklisting`_. Whitelisting is better
-    but blacklisting can be usefull to spot malicious activity.
+    but blacklisting can be useful to spot malicious activity.
     The following have methods a default implementation:
 
     - check_client_key
@@ -443,7 +443,7 @@
         :type request: oauthlib.common.Request
         :returns: None
 
-        Per `Section 2.3`__ of the spec:
+        Per `Section 2.3`_ of the spec:
 
         "The server MUST (...) ensure that the temporary
         credentials have not expired or been used before."
@@ -831,7 +831,7 @@
         """Associate an authorization verifier with a request token.
 
         :param token: A request token string.
-        :param verifier A dictionary containing the oauth_verifier and
+        :param verifier: A dictionary containing the oauth_verifier and
                         oauth_token
         :param request: OAuthlib request.
         :type request: oauthlib.common.Request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/signature.py 
new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/signature.py
--- old/oauthlib-3.2.0/oauthlib/oauth1/rfc5849/signature.py     2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth1/rfc5849/signature.py     2022-09-06 
22:10:05.000000000 +0200
@@ -38,14 +38,13 @@
 import hashlib
 import hmac
 import logging
+import urllib.parse as urlparse
 import warnings
 
 from oauthlib.common import extract_params, safe_string_equals, urldecode
-import urllib.parse as urlparse
 
 from . import utils
 
-
 log = logging.getLogger(__name__)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/backend_application.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/backend_application.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/backend_application.py   
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/backend_application.py   
2022-09-06 22:10:05.000000000 +0200
@@ -39,7 +39,7 @@
         format per `Appendix B`_ in the HTTP request entity-body:
 
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
+                     into. This may contain extra parameters. Default ''.
         :param scope:   The scope of the access request as described by
                         `Section 3.3`_.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/base.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/base.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/base.py  2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/base.py  2022-09-06 
22:10:05.000000000 +0200
@@ -6,12 +6,12 @@
 This module is an implementation of various logic needed
 for consuming OAuth 2.0 RFC6749.
 """
+import base64
+import hashlib
+import re
+import secrets
 import time
 import warnings
-import secrets
-import re
-import hashlib
-import base64
 
 from oauthlib.common import generate_token
 from oauthlib.oauth2.rfc6749 import tokens
@@ -228,26 +228,21 @@
         required parameters to the authorization URL.
 
         :param authorization_url: Provider authorization endpoint URL.
-
         :param state: CSRF protection string. Will be automatically created if
-        not provided. The generated state is available via the ``state``
-        attribute. Clients should verify that the state is unchanged and
-        present in the authorization response. This verification is done
-        automatically if using the ``authorization_response`` parameter
-        with ``prepare_token_request``.
-
+            not provided. The generated state is available via the ``state``
+            attribute. Clients should verify that the state is unchanged and
+            present in the authorization response. This verification is done
+            automatically if using the ``authorization_response`` parameter
+            with ``prepare_token_request``.
         :param redirect_url: Redirect URL to which the user will be returned
-        after authorization. Must be provided unless previously setup with
-        the provider. If provided then it must also be provided in the
-        token request.
-
+            after authorization. Must be provided unless previously setup with
+            the provider. If provided then it must also be provided in the
+            token request.
         :param scope: List of scopes to request. Must be equal to
-        or a subset of the scopes granted when obtaining the refresh
-        token. If none is provided, the ones provided in the constructor are
-        used.
-
+            or a subset of the scopes granted when obtaining the refresh
+            token. If none is provided, the ones provided in the constructor 
are
+            used.
         :param kwargs: Additional parameters to included in the request.
-
         :returns: The prepared request tuple with (url, headers, body).
         """
         if not is_secure_transport(authorization_url):
@@ -271,22 +266,16 @@
         credentials.
 
         :param token_url: Provider token creation endpoint URL.
-
         :param authorization_response: The full redirection URL string, i.e.
-        the location to which the user was redirected after successfull
-        authorization. Used to mine credentials needed to obtain a token
-        in this step, such as authorization code.
-
+            the location to which the user was redirected after successful
+            authorization. Used to mine credentials needed to obtain a token
+            in this step, such as authorization code.
         :param redirect_url: The redirect_url supplied with the authorization
-        request (if there was one).
-
+            request (if there was one).
         :param state:
-
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
-
+                     into. This may contain extra parameters. Default ''.
         :param kwargs: Additional parameters to included in the request.
-
         :returns: The prepared request tuple with (url, headers, body).
         """
         if not is_secure_transport(token_url):
@@ -312,19 +301,14 @@
         obtain a new access token, and possibly a new refresh token.
 
         :param token_url: Provider token refresh endpoint URL.
-
         :param refresh_token: Refresh token string.
-
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
-
+            into. This may contain extra parameters. Default ''.
         :param scope: List of scopes to request. Must be equal to
-        or a subset of the scopes granted when obtaining the refresh
-        token. If none is provided, the ones provided in the constructor are
-        used.
-
+            or a subset of the scopes granted when obtaining the refresh
+            token. If none is provided, the ones provided in the constructor 
are
+            used.
         :param kwargs: Additional parameters to included in the request.
-
         :returns: The prepared request tuple with (url, headers, body).
         """
         if not is_secure_transport(token_url):
@@ -341,20 +325,14 @@
         """Prepare a token revocation request.
 
         :param revocation_url: Provider token revocation endpoint URL.
-
         :param token: The access or refresh token to be revoked (string).
-
         :param token_type_hint: ``"access_token"`` (default) or
-        ``"refresh_token"``. This is optional and if you wish to not pass it 
you
-        must provide ``token_type_hint=None``.
-
+            ``"refresh_token"``. This is optional and if you wish to not pass 
it you
+            must provide ``token_type_hint=None``.
         :param body:
-
         :param callback: A jsonp callback such as ``package.callback`` to be 
invoked
-        upon receiving the response. Not that it should not include a () 
suffix.
-
+            upon receiving the response. Not that it should not include a () 
suffix.
         :param kwargs: Additional parameters to included in the request.
-
         :returns: The prepared request tuple with (url, headers, body).
 
         Note that JSONP request may use GET requests as the parameters will
@@ -362,7 +340,7 @@
 
         An example of a revocation request
 
-        .. code-block: http
+        .. code-block:: http
 
             POST /revoke HTTP/1.1
             Host: server.example.com
@@ -373,7 +351,7 @@
 
         An example of a jsonp revocation request
 
-        .. code-block: http
+        .. code-block:: http
 
             GET /revoke?token=agabcdefddddafdd&callback=package.myCallback 
HTTP/1.1
             Host: server.example.com
@@ -382,9 +360,9 @@
 
         and an error response
 
-        .. code-block: http
+        .. code-block:: javascript
 
-        package.myCallback({"error":"unsupported_token_type"});
+            package.myCallback({"error":"unsupported_token_type"});
 
         Note that these requests usually require client credentials, client_id 
in
         the case for public clients and provider specific authentication
@@ -408,9 +386,10 @@
 
         :param body: The response body from the token request.
         :param scope: Scopes originally requested. If none is provided, the 
ones
-        provided in the constructor are used.
+            provided in the constructor are used.
         :return: Dictionary of token parameters.
-        :raises: Warning if scope has changed. OAuth2Error if response is 
invalid.
+        :raises: Warning if scope has changed. 
:py:class:`oauthlib.oauth2.errors.OAuth2Error`
+            if response is invalid.
 
         These response are json encoded and could easily be parsed without
         the assistance of OAuthLib. However, there are a few subtle issues
@@ -436,7 +415,7 @@
             If omitted, the authorization server SHOULD provide the
             expiration time via other means or document the default value.
 
-           **scope**
+         **scope**
             Providers may supply this in all responses but are required to only
             if it has changed since the authorization request.
 
@@ -454,20 +433,16 @@
 
         If the authorization server issued a refresh token to the client, the
         client makes a refresh request to the token endpoint by adding the
-        following parameters using the "application/x-www-form-urlencoded"
+        following parameters using the `application/x-www-form-urlencoded`
         format in the HTTP request entity-body:
 
-        grant_type
-                REQUIRED.  Value MUST be set to "refresh_token".
-        refresh_token
-                REQUIRED.  The refresh token issued to the client.
-        scope
-                OPTIONAL.  The scope of the access request as described by
-                Section 3.3.  The requested scope MUST NOT include any scope
-                not originally granted by the resource owner, and if omitted is
-                treated as equal to the scope originally granted by the
-                resource owner. Note that if none is provided, the ones 
provided
-                in the constructor are used if any.
+        :param refresh_token: REQUIRED.  The refresh token issued to the 
client.
+        :param scope:  OPTIONAL.  The scope of the access request as described 
by
+            Section 3.3.  The requested scope MUST NOT include any scope
+            not originally granted by the resource owner, and if omitted is
+            treated as equal to the scope originally granted by the
+            resource owner. Note that if none is provided, the ones provided
+            in the constructor are used if any.
         """
         refresh_token = refresh_token or self.refresh_token
         scope = self.scope if scope is None else scope
@@ -492,18 +467,21 @@
 
     def create_code_verifier(self, length):
         """Create PKCE **code_verifier** used in computing **code_challenge**. 
+        See `RFC7636 Section 4.1`_
+
+        :param length: REQUIRED. The length of the code_verifier.
 
-           :param length: REQUIRED. The length of the code_verifier.
+        The client first creates a code verifier, "code_verifier", for each
+        OAuth 2.0 [RFC6749] Authorization Request, in the following manner:
 
-            The client first creates a code verifier, "code_verifier", for each
-            OAuth 2.0 [RFC6749] Authorization Request, in the following manner:
+        .. code-block:: text
 
-            code_verifier = high-entropy cryptographic random STRING using the
-            unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"
-            from Section 2.3 of [RFC3986], with a minimum length of 43 
characters
-            and a maximum length of 128 characters.
-            
-            .. _`Section 4.1`: https://tools.ietf.org/html/rfc7636#section-4.1
+               code_verifier = high-entropy cryptographic random STRING using 
the
+               unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / 
"~"
+               from Section 2.3 of [RFC3986], with a minimum length of 43 
characters
+               and a maximum length of 128 characters.
+
+        .. _`RFC7636 Section 4.1`: 
https://tools.ietf.org/html/rfc7636#section-4.1
         """
         code_verifier = None
 
@@ -525,33 +503,30 @@
 
     def create_code_challenge(self, code_verifier, code_challenge_method=None):
         """Create PKCE **code_challenge** derived from the  **code_verifier**.
+        See `RFC7636 Section 4.2`_
 
-           :param code_verifier: REQUIRED. The **code_verifier** generated 
from create_code_verifier().
-           :param code_challenge_method: OPTIONAL. The method used to derive 
the **code_challenge**. Acceptable
-                values include "S256". DEFAULT is "plain".
-
+        :param code_verifier: REQUIRED. The **code_verifier** generated from 
`create_code_verifier()`.
+        :param code_challenge_method: OPTIONAL. The method used to derive the 
**code_challenge**. Acceptable values include `S256`. DEFAULT is `plain`.
 
-            The client then creates a code challenge derived from the code
+               The client then creates a code challenge derived from the code
                verifier by using one of the following transformations on the 
code
-               verifier:
-
-               plain
-                  code_challenge = code_verifier
-
-               S256
-                  code_challenge = 
BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
+               verifier::
 
-               If the client is capable of using "S256", it MUST use "S256", as
-               "S256" is Mandatory To Implement (MTI) on the server.  Clients 
are
-               permitted to use "plain" only if they cannot support "S256" for 
some
+                   plain
+                      code_challenge = code_verifier
+                   S256
+                      code_challenge = 
BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
+
+               If the client is capable of using `S256`, it MUST use `S256`, as
+               `S256` is Mandatory To Implement (MTI) on the server.  Clients 
are
+               permitted to use `plain` only if they cannot support `S256` for 
some
                technical reason and know via out-of-band configuration that the
-               server supports "plain".
+               server supports `plain`.
 
                The plain transformation is for compatibility with existing
-               deployments and for constrained environments that can't use the 
S256
-               transformation.
+               deployments and for constrained environments that can't use the 
S256 transformation.
 
-            .. _`Section 4.2`: https://tools.ietf.org/html/rfc7636#section-4.2
+        .. _`RFC7636 Section 4.2`: 
https://tools.ietf.org/html/rfc7636#section-4.2
         """
         code_challenge = None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/legacy_application.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/legacy_application.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/legacy_application.py    
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/legacy_application.py    
2022-09-06 22:10:05.000000000 +0200
@@ -49,7 +49,7 @@
         :param username:    The resource owner username.
         :param password:    The resource owner password.
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
+                     into. This may contain extra parameters. Default ''.
         :param scope:   The scope of the access request as described by
                         `Section 3.3`_.
         :param include_client_id: `True` to send the `client_id` in the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/mobile_application.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/mobile_application.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/mobile_application.py    
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/mobile_application.py    
2022-09-06 22:10:05.000000000 +0200
@@ -55,7 +55,7 @@
         using the "application/x-www-form-urlencoded" format, per `Appendix 
B`_:
 
         :param redirect_uri:  OPTIONAL. The redirect URI must be an absolute 
URI
-                              and it should have been registerd with the OAuth
+                              and it should have been registered with the OAuth
                               provider prior to use. As described in `Section 
3.1.2`_.
 
         :param scope:  OPTIONAL. The scope of the access request as described 
by
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/service_application.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/service_application.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/service_application.py   
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/service_application.py   
2022-09-06 22:10:05.000000000 +0200
@@ -31,7 +31,7 @@
 
     def __init__(self, client_id, private_key=None, subject=None, issuer=None,
                  audience=None, **kwargs):
-        """Initalize a JWT client with defaults for implicit use later.
+        """Initialize a JWT client with defaults for implicit use later.
 
         :param client_id: Client identifier given by the OAuth provider upon
                           registration.
@@ -99,7 +99,7 @@
         :param extra_claims: A dict of additional claims to include in the JWT.
 
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
+                     into. This may contain extra parameters. Default ''.
 
         :param scope: The scope of the access request.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/web_application.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/web_application.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/clients/web_application.py       
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/clients/web_application.py       
2022-09-06 22:10:05.000000000 +0200
@@ -49,7 +49,7 @@
         using the "application/x-www-form-urlencoded" format, per `Appendix 
B`_:
 
         :param redirect_uri:  OPTIONAL. The redirect URI must be an absolute 
URI
-                              and it should have been registerd with the OAuth
+                              and it should have been registered with the OAuth
                               provider prior to use. As described in `Section 
3.1.2`_.
 
         :param scope:  OPTIONAL. The scope of the access request as described 
by
@@ -117,7 +117,7 @@
                                 values MUST be identical.
 
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
+                     into. This may contain extra parameters. Default ''.
 
         :param include_client_id: `True` (default) to send the `client_id` in 
the
                                   body of the upstream request. This is 
required
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/introspect.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/introspect.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/introspect.py  
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/introspect.py  
2022-09-06 22:10:05.000000000 +0200
@@ -86,9 +86,9 @@
         an HTTP POST request with parameters sent as
         "application/x-www-form-urlencoded".
 
-        token REQUIRED.  The string value of the token.
+        * token REQUIRED.  The string value of the token.
+        * token_type_hint OPTIONAL.
 
-        token_type_hint OPTIONAL.
         A hint about the type of the token submitted for
         introspection.  The protected resource MAY pass this parameter to
         help the authorization server optimize the token lookup.  If the
@@ -96,11 +96,9 @@
         extend its search across all of its supported token types.  An
         authorization server MAY ignore this parameter, particularly if it
         is able to detect the token type automatically.
-            *  access_token: An Access Token as defined in [`RFC6749`],
-                `section 1.4`_
 
-            *  refresh_token: A Refresh Token as defined in [`RFC6749`],
-                `section 1.5`_
+        *  access_token: An Access Token as defined in [`RFC6749`], `section 
1.4`_
+        *  refresh_token: A Refresh Token as defined in [`RFC6749`], `section 
1.5`_
 
         The introspection endpoint MAY accept other OPTIONAL
         parameters to provide further context to the query.  For
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/metadata.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/metadata.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/metadata.py    
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/metadata.py    
2022-09-06 22:10:05.000000000 +0200
@@ -10,7 +10,7 @@
 import json
 import logging
 
-from .. import grant_types
+from .. import grant_types, utils
 from .authorization import AuthorizationEndpoint
 from .base import BaseEndpoint, catch_errors_and_unavailability
 from .introspect import IntrospectEndpoint
@@ -68,7 +68,7 @@
                 raise ValueError("key {} is a mandatory metadata.".format(key))
 
         elif is_issuer:
-            if not array[key].startswith("https"):
+            if not utils.is_secure_transport(array[key]):
                 raise ValueError("key {}: {} must be an HTTPS URL".format(key, 
array[key]))
             if "?" in array[key] or "&" in array[key] or "#" in array[key]:
                 raise ValueError("key {}: {} must not contain query or 
fragment components".format(key, array[key]))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/revocation.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/revocation.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/endpoints/revocation.py  
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/endpoints/revocation.py  
2022-09-06 22:10:05.000000000 +0200
@@ -42,7 +42,7 @@
 
 
         The authorization server responds with HTTP status code 200 if the
-        token has been revoked sucessfully or if the client submitted an
+        token has been revoked successfully or if the client submitted an
         invalid token.
 
         Note: invalid tokens do not cause an error response since the client
@@ -95,7 +95,7 @@
         submitted for revocation.  Clients MAY pass this parameter in order to
         help the authorization server to optimize the token lookup.  If the
         server is unable to locate the token using the given hint, it MUST
-        extend its search accross all of its supported token types.  An
+        extend its search across all of its supported token types.  An
         authorization server MAY ignore this parameter, particularly if it is
         able to detect the token type automatically.  This specification
         defines two such values:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py
--- 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py    
    2022-01-29 22:58:41.000000000 +0100
+++ 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py    
    2022-02-18 21:33:05.000000000 +0100
@@ -10,7 +10,6 @@
 from oauthlib import common
 
 from .. import errors
-from ..utils import is_secure_transport
 from .base import GrantTypeBase
 
 log = logging.getLogger(__name__)
@@ -547,20 +546,3 @@
         if challenge_method in self._code_challenge_methods:
             return self._code_challenge_methods[challenge_method](verifier, 
challenge)
         raise NotImplementedError('Unknown challenge_method %s' % 
challenge_method)
-
-    def _create_cors_headers(self, request):
-        """If CORS is allowed, create the appropriate headers."""
-        if 'origin' not in request.headers:
-            return {}
-
-        origin = request.headers['origin']
-        if not is_secure_transport(origin):
-            log.debug('Origin "%s" is not HTTPS, CORS not allowed.', origin)
-            return {}
-        elif not self.request_validator.is_origin_allowed(
-            request.client_id, origin, request):
-            log.debug('Invalid origin "%s", CORS not allowed.', origin)
-            return {}
-        else:
-            log.debug('Valid origin "%s", injecting CORS headers.', origin)
-            return {'Access-Control-Allow-Origin': origin}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/base.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/base.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/base.py      
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/base.py      
2022-02-18 21:33:05.000000000 +0100
@@ -10,6 +10,7 @@
 from oauthlib.uri_validate import is_absolute_uri
 
 from ..request_validator import RequestValidator
+from ..utils import is_secure_transport
 
 log = logging.getLogger(__name__)
 
@@ -248,3 +249,20 @@
                 raise errors.MissingRedirectURIError(request=request)
             if not is_absolute_uri(request.redirect_uri):
                 raise errors.InvalidRedirectURIError(request=request)
+
+    def _create_cors_headers(self, request):
+        """If CORS is allowed, create the appropriate headers."""
+        if 'origin' not in request.headers:
+            return {}
+
+        origin = request.headers['origin']
+        if not is_secure_transport(origin):
+            log.debug('Origin "%s" is not HTTPS, CORS not allowed.', origin)
+            return {}
+        elif not self.request_validator.is_origin_allowed(
+            request.client_id, origin, request):
+            log.debug('Invalid origin "%s", CORS not allowed.', origin)
+            return {}
+        else:
+            log.debug('Valid origin "%s", injecting CORS headers.', origin)
+            return {'Access-Control-Allow-Origin': origin}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/refresh_token.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/refresh_token.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/grant_types/refresh_token.py     
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/grant_types/refresh_token.py     
2022-02-18 21:33:05.000000000 +0100
@@ -69,6 +69,7 @@
 
         log.debug('Issuing new token to client id %r (%r), %r.',
                   request.client_id, request.client, token)
+        headers.update(self._create_cors_headers(request))
         return headers, json.dumps(token), 200
 
     def validate_token_request(self, request):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/parameters.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/parameters.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/parameters.py    2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/parameters.py    2022-09-06 
22:10:05.000000000 +0200
@@ -45,7 +45,7 @@
                   back to the client.  The parameter SHOULD be used for
                   preventing cross-site request forgery as described in
                   `Section 10.12`_.
-    :param code_challenge: PKCE paramater. A challenge derived from the 
+    :param code_challenge: PKCE parameter. A challenge derived from the 
                            code_verifier that is sent in the authorization 
                            request, to be verified against later.
     :param code_challenge_method: PKCE parameter. A method that was used to 
derive the 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/request_validator.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/request_validator.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/request_validator.py     
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/request_validator.py     
2022-09-06 22:10:05.000000000 +0200
@@ -191,6 +191,7 @@
         claims associated, or `None` in case the token is unknown.
 
         Below the list of registered claims you should be interested in:
+
         - scope : space-separated list of scopes
         - client_id : client identifier
         - username : human-readable identifier for the resource owner
@@ -204,10 +205,10 @@
         - jti : string identifier for the token
 
         Note that most of them are coming directly from JWT RFC. More details
-        can be found in `Introspect Claims`_ or `_JWT Claims`_.
+        can be found in `Introspect Claims`_ or `JWT Claims`_.
 
         The implementation can use *token_type_hint* to improve lookup
-        efficency, but must fallback to other types to be compliant with RFC.
+        efficiency, but must fallback to other types to be compliant with RFC.
 
         The dict of claims is added to request.token after this method.
 
@@ -443,6 +444,7 @@
             - request.user
             - request.scopes
             - request.claims (if given)
+
         OBS! The request.user attribute should be set to the resource owner
         associated with this authorization code. Similarly request.scopes
         must also be set.
@@ -451,6 +453,7 @@
 
         If PKCE is enabled (see 'is_pkce_required' and 
'save_authorization_code')
         you MUST set the following based on the information stored:
+
             - request.code_challenge
             - request.code_challenge_method
 
@@ -561,7 +564,7 @@
         OBS! The validation should also set the user attribute of the request
         to a valid resource owner, i.e. request.user = username or similar. If
         not set you will be unable to associate a token with a user in the
-        persistance method used (commonly, save_bearer_token).
+        persistence method used (commonly, save_bearer_token).
 
         :param username: Unicode username.
         :param password: Unicode password.
@@ -671,6 +674,7 @@
 
         Method is used by:
             - Authorization Code Grant
+            - Refresh Token Grant
 
         """
         return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/tokens.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/tokens.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc6749/tokens.py        2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc6749/tokens.py        2022-02-18 
21:33:05.000000000 +0100
@@ -257,6 +257,7 @@
 
 
 class TokenBase:
+    __slots__ = ()
 
     def __call__(self, request, refresh_token=False):
         raise NotImplementedError('Subclasses must implement this method.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/oauth2/rfc8628/clients/device.py 
new/oauthlib-3.2.1/oauthlib/oauth2/rfc8628/clients/device.py
--- old/oauthlib-3.2.0/oauthlib/oauth2/rfc8628/clients/device.py        
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/oauth2/rfc8628/clients/device.py        
2022-09-06 22:10:05.000000000 +0200
@@ -5,12 +5,11 @@
 This module is an implementation of various logic needed
 for consuming and providing OAuth 2.0 Device Authorization RFC8628.
 """
-
+from oauthlib.common import add_params_to_uri
 from oauthlib.oauth2 import BackendApplicationClient, Client
 from oauthlib.oauth2.rfc6749.errors import InsecureTransportError
 from oauthlib.oauth2.rfc6749.parameters import prepare_token_request
 from oauthlib.oauth2.rfc6749.utils import is_secure_transport, list_to_scope
-from oauthlib.common import add_params_to_uri
 
 
 class DeviceClient(Client):
@@ -62,7 +61,7 @@
         body.
 
         :param body: Existing request body (URL encoded string) to embed 
parameters
-                     into. This may contain extra paramters. Default ''.
+                     into. This may contain extra parameters. Default ''.
         :param scope:   The scope of the access request as described by
                         `Section 3.3`_.
 
@@ -84,6 +83,8 @@
             >>> client.prepare_request_body(scope=['hello', 'world'])
             
'grant_type=urn:ietf:params:oauth:grant-type:device_code&scope=hello+world'
 
+        .. _`Section 3.2.1`: 
https://datatracker.ietf.org/doc/html/rfc6749#section-3.2.1
+        .. _`Section 3.3`: 
https://datatracker.ietf.org/doc/html/rfc6749#section-3.3
         .. _`Section 3.4`: 
https://datatracker.ietf.org/doc/html/rfc8628#section-3.4
         """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/openid/connect/core/endpoints/userinfo.py 
new/oauthlib-3.2.1/oauthlib/openid/connect/core/endpoints/userinfo.py
--- old/oauthlib-3.2.0/oauthlib/openid/connect/core/endpoints/userinfo.py       
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/openid/connect/core/endpoints/userinfo.py       
2022-09-06 22:10:05.000000000 +0200
@@ -69,7 +69,7 @@
         5.3.1.  UserInfo Request
         The Client sends the UserInfo Request using either HTTP GET or HTTP
         POST. The Access Token obtained from an OpenID Connect Authentication
-        Request MUST be sent as a Bearer Token, per Section 2 of OAuth 2.0
+        Request MUST be sent as a Bearer Token, per `Section 2`_ of OAuth 2.0
         Bearer Token Usage [RFC6750].
 
         It is RECOMMENDED that the request use the HTTP GET method and the
@@ -77,21 +77,28 @@
 
         The following is a non-normative example of a UserInfo Request:
 
-        GET /userinfo HTTP/1.1
-        Host: server.example.com
-        Authorization: Bearer SlAV32hkKG
+        .. code-block:: http
+
+            GET /userinfo HTTP/1.1
+            Host: server.example.com
+            Authorization: Bearer SlAV32hkKG
 
         5.3.3. UserInfo Error Response
         When an error condition occurs, the UserInfo Endpoint returns an Error
-        Response as defined in Section 3 of OAuth 2.0 Bearer Token Usage
+        Response as defined in `Section 3`_ of OAuth 2.0 Bearer Token Usage
         [RFC6750]. (HTTP errors unrelated to RFC 6750 are returned to the User
         Agent using the appropriate HTTP status code.)
 
         The following is a non-normative example of a UserInfo Error Response:
 
-        HTTP/1.1 401 Unauthorized
-        WWW-Authenticate: Bearer error="invalid_token",
+        .. code-block:: http
+
+            HTTP/1.1 401 Unauthorized
+            WWW-Authenticate: Bearer error="invalid_token",
                 error_description="The Access Token expired"
+
+        .. _`Section 2`: 
https://datatracker.ietf.org/doc/html/rfc6750#section-2
+        .. _`Section 3`: 
https://datatracker.ietf.org/doc/html/rfc6750#section-3
         """
         if not self.bearer.validate_request(request):
             raise errors.InvalidTokenError()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/openid/connect/core/grant_types/base.py 
new/oauthlib-3.2.1/oauthlib/openid/connect/core/grant_types/base.py
--- old/oauthlib-3.2.0/oauthlib/openid/connect/core/grant_types/base.py 
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/openid/connect/core/grant_types/base.py 
2022-09-06 22:10:05.000000000 +0200
@@ -8,7 +8,6 @@
     ConsentRequired, InvalidRequestError, LoginRequired,
 )
 
-
 log = logging.getLogger(__name__)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/openid/connect/core/grant_types/dispatchers.py 
new/oauthlib-3.2.1/oauthlib/openid/connect/core/grant_types/dispatchers.py
--- old/oauthlib-3.2.0/oauthlib/openid/connect/core/grant_types/dispatchers.py  
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/openid/connect/core/grant_types/dispatchers.py  
2022-09-06 22:10:05.000000000 +0200
@@ -84,7 +84,7 @@
         code = parameters.get('code', None)
         redirect_uri = parameters.get('redirect_uri', None)
 
-        # If code is not pressent fallback to `default_grant` which will
+        # If code is not present fallback to `default_grant` which will
         # raise an error for the missing `code` in `create_token_response` 
step.
         if code:
             scopes = 
self.request_validator.get_authorization_code_scopes(client_id, code, 
redirect_uri, request)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/oauthlib/openid/connect/core/tokens.py 
new/oauthlib-3.2.1/oauthlib/openid/connect/core/tokens.py
--- old/oauthlib-3.2.0/oauthlib/openid/connect/core/tokens.py   2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib/openid/connect/core/tokens.py   2022-09-06 
22:10:05.000000000 +0200
@@ -4,7 +4,9 @@
 
 This module contains methods for adding JWT tokens to requests.
 """
-from oauthlib.oauth2.rfc6749.tokens import TokenBase, random_token_generator, 
get_token_from_header
+from oauthlib.oauth2.rfc6749.tokens import (
+    TokenBase, get_token_from_header, random_token_generator,
+)
 
 
 class JWTToken(TokenBase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oauthlib-3.2.0/oauthlib.egg-info/PKG-INFO 
new/oauthlib-3.2.1/oauthlib.egg-info/PKG-INFO
--- old/oauthlib-3.2.0/oauthlib.egg-info/PKG-INFO       2022-01-29 
22:59:32.000000000 +0100
+++ new/oauthlib-3.2.1/oauthlib.egg-info/PKG-INFO       2022-09-09 
22:17:50.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oauthlib
-Version: 3.2.0
+Version: 3.2.1
 Summary: A generic, spec-compliant, thorough implementation of the OAuth 
request-signing logic
 Home-page: https://github.com/oauthlib/oauthlib
 Author: The OAuthlib Community
@@ -42,8 +42,8 @@
 *A generic, spec-compliant, thorough implementation of the OAuth 
request-signing
 logic for Python 3.6+.*
 
-.. image:: https://travis-ci.org/oauthlib/oauthlib.svg?branch=master
-  :target: https://travis-ci.org/oauthlib/oauthlib
+.. image:: https://app.travis-ci.com/oauthlib/oauthlib.svg?branch=master
+  :target: https://app.travis-ci.com/oauthlib/oauthlib
   :alt: Travis
 .. image:: https://coveralls.io/repos/oauthlib/oauthlib/badge.svg?branch=master
   :target: https://coveralls.io/r/oauthlib/oauthlib
@@ -141,7 +141,7 @@
 
 Chances are you have run into something annoying that you wish there was
 documentation for, if you wish to gain eternal fame and glory, and a drink if 
we
-have the pleasure to run into eachother, please send a docs pull request =)
+have the pleasure to run into each other, please send a docs pull request =)
 
 .. _`Gitter community`: https://gitter.im/oauthlib/Lobby
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/tests/oauth1/rfc5849/test_signatures.py 
new/oauthlib-3.2.1/tests/oauth1/rfc5849/test_signatures.py
--- old/oauthlib-3.2.0/tests/oauth1/rfc5849/test_signatures.py  2022-01-29 
22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/tests/oauth1/rfc5849/test_signatures.py  2022-09-06 
22:10:05.000000000 +0200
@@ -1,26 +1,15 @@
 # -*- coding: utf-8 -*-
 from oauthlib.oauth1.rfc5849.signature import (
-    collect_parameters,
-    signature_base_string,
-    base_string_uri,
-    normalize_parameters,
-    sign_hmac_sha1_with_client,
-    sign_hmac_sha256_with_client,
-    sign_hmac_sha512_with_client,
-    sign_rsa_sha1_with_client,
-    sign_rsa_sha256_with_client,
-    sign_rsa_sha512_with_client,
-    sign_plaintext_with_client,
-    verify_hmac_sha1,
-    verify_hmac_sha256,
-    verify_hmac_sha512,
-    verify_rsa_sha1,
-    verify_rsa_sha256,
-    verify_rsa_sha512,
-    verify_plaintext
+    base_string_uri, collect_parameters, normalize_parameters,
+    sign_hmac_sha1_with_client, sign_hmac_sha256_with_client,
+    sign_hmac_sha512_with_client, sign_plaintext_with_client,
+    sign_rsa_sha1_with_client, sign_rsa_sha256_with_client,
+    sign_rsa_sha512_with_client, signature_base_string, verify_hmac_sha1,
+    verify_hmac_sha256, verify_hmac_sha512, verify_plaintext, verify_rsa_sha1,
+    verify_rsa_sha256, verify_rsa_sha512,
 )
-from tests.unittest import TestCase
 
+from tests.unittest import TestCase
 
 # ################################################################
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/tests/oauth2/rfc6749/clients/test_web_application.py 
new/oauthlib-3.2.1/tests/oauth2/rfc6749/clients/test_web_application.py
--- old/oauthlib-3.2.0/tests/oauth2/rfc6749/clients/test_web_application.py     
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/tests/oauth2/rfc6749/clients/test_web_application.py     
2022-09-06 22:10:05.000000000 +0200
@@ -45,7 +45,7 @@
 
     body_code = 
"not=empty&grant_type=authorization_code&code={}&client_id={}".format(code, 
client_id)
     body_redirect = body_code + 
"&redirect_uri=http%3A%2F%2Fmy.page.com%2Fcallback"
-    bode_code_verifier = body_code + "&code_verifier=code_verifier"
+    body_code_verifier = body_code + "&code_verifier=code_verifier"
     body_kwargs = body_code + "&some=providers&require=extra+arguments"
 
     response_uri = "https://client.example.com/cb?code=zzzzaaaa&state=xyz";
@@ -115,7 +115,7 @@
 
         # With code verifier
         body = client.prepare_request_body(body=self.body, 
code_verifier=self.code_verifier)
-        self.assertFormBodyEqual(body, self.bode_code_verifier)
+        self.assertFormBodyEqual(body, self.body_code_verifier)
 
         # With extra parameters
         body = client.prepare_request_body(body=self.body, **self.kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/tests/oauth2/rfc6749/endpoints/test_metadata.py 
new/oauthlib-3.2.1/tests/oauth2/rfc6749/endpoints/test_metadata.py
--- old/oauthlib-3.2.0/tests/oauth2/rfc6749/endpoints/test_metadata.py  
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/tests/oauth2/rfc6749/endpoints/test_metadata.py  
2022-09-06 22:10:05.000000000 +0200
@@ -1,7 +1,8 @@
 # -*- coding: utf-8 -*-
+import json
+
 from oauthlib.oauth2 import MetadataEndpoint, Server, TokenEndpoint
 
-import json
 from tests.unittest import TestCase
 
 
@@ -135,3 +136,13 @@
         sort_list(metadata.claims)
         sort_list(expected_claims)
         self.assertEqual(sorted(metadata.claims.items()), 
sorted(expected_claims.items()))
+
+    def test_metadata_validate_issuer(self):
+        with self.assertRaises(ValueError):
+            endpoint = TokenEndpoint(
+                None, None, grant_types={"password": None},
+            )
+            metadata = MetadataEndpoint([endpoint], {
+                "issuer": 'http://foo.bar',
+                "token_endpoint": "https://foo.bar/token";,
+            })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oauthlib-3.2.0/tests/oauth2/rfc6749/grant_types/test_refresh_token.py 
new/oauthlib-3.2.1/tests/oauth2/rfc6749/grant_types/test_refresh_token.py
--- old/oauthlib-3.2.0/tests/oauth2/rfc6749/grant_types/test_refresh_token.py   
2022-01-29 22:58:41.000000000 +0100
+++ new/oauthlib-3.2.1/tests/oauth2/rfc6749/grant_types/test_refresh_token.py   
2022-02-18 21:33:05.000000000 +0100
@@ -18,6 +18,7 @@
         self.request = Request('http://a.b/path')
         self.request.grant_type = 'refresh_token'
         self.request.refresh_token = 'lsdkfhj230'
+        self.request.client_id = 'abcdef'
         self.request.client = mock_client
         self.request.scope = 'foo'
         self.mock_validator = mock.MagicMock()
@@ -168,3 +169,43 @@
         del self.request.scope
         self.auth.validate_token_request(self.request)
         self.assertEqual(self.request.scopes, 'foo bar baz'.split())
+
+    # CORS
+
+    def test_create_cors_headers(self):
+        bearer = BearerToken(self.mock_validator)
+        self.request.headers['origin'] = 'https://foo.bar'
+        self.mock_validator.is_origin_allowed.return_value = True
+
+        headers = self.auth.create_token_response(self.request, bearer)[0]
+        self.assertEqual(
+            headers['Access-Control-Allow-Origin'], 'https://foo.bar'
+        )
+        self.mock_validator.is_origin_allowed.assert_called_once_with(
+            'abcdef', 'https://foo.bar', self.request
+        )
+
+    def test_create_cors_headers_no_origin(self):
+        bearer = BearerToken(self.mock_validator)
+        headers = self.auth.create_token_response(self.request, bearer)[0]
+        self.assertNotIn('Access-Control-Allow-Origin', headers)
+        self.mock_validator.is_origin_allowed.assert_not_called()
+
+    def test_create_cors_headers_insecure_origin(self):
+        bearer = BearerToken(self.mock_validator)
+        self.request.headers['origin'] = 'http://foo.bar'
+
+        headers = self.auth.create_token_response(self.request, bearer)[0]
+        self.assertNotIn('Access-Control-Allow-Origin', headers)
+        self.mock_validator.is_origin_allowed.assert_not_called()
+
+    def test_create_cors_headers_invalid_origin(self):
+        bearer = BearerToken(self.mock_validator)
+        self.request.headers['origin'] = 'https://foo.bar'
+        self.mock_validator.is_origin_allowed.return_value = False
+
+        headers = self.auth.create_token_response(self.request, bearer)[0]
+        self.assertNotIn('Access-Control-Allow-Origin', headers)
+        self.mock_validator.is_origin_allowed.assert_called_once_with(
+            'abcdef', 'https://foo.bar', self.request
+        )

Reply via email to