@@ -1619,6 +1619,9 @@ def setUp(self):
1619
1619
user_agent = 'unittest-sample/1.0' ,
1620
1620
revoke_uri = 'dummy_revoke_uri' ,
1621
1621
)
1622
+ self .bad_verifier = b'__NOT_THE_VERIFIER_YOURE_LOOKING_FOR__'
1623
+ self .good_verifier = b'__TEST_VERIFIER__'
1624
+ self .good_challenger = b'__TEST_CHALLENGE__'
1622
1625
1623
1626
def test_construct_authorize_url (self ):
1624
1627
authorize_url = self .flow .step1_get_authorize_url (state = 'state+1' )
@@ -1691,19 +1694,42 @@ def test_step1_get_authorize_url_redirect_override(self, logger):
1691
1694
@mock .patch ('oauth2client.client._pkce.code_challenge' )
1692
1695
@mock .patch ('oauth2client.client._pkce.code_verifier' )
1693
1696
def test_step1_get_authorize_url_pkce (self , fake_verifier , fake_challenge ):
1694
- fake_verifier .return_value = b'__TEST_VERIFIER__'
1695
- fake_challenge .return_value = b'__TEST_CHALLENGE__'
1697
+ fake_verifier .return_value = self . good_verifier
1698
+ fake_challenge .return_value = self . good_challenger
1696
1699
flow = client .OAuth2WebServerFlow (
1697
- 'client_id+1' ,
1698
- scope = 'foo' ,
1699
- redirect_uri = 'http://example.com' ,
1700
- pkce = True )
1700
+ 'client_id+1' ,
1701
+ scope = 'foo' ,
1702
+ redirect_uri = 'http://example.com' ,
1703
+ pkce = True )
1704
+ auth_url = urllib .parse .urlparse (flow .step1_get_authorize_url ())
1705
+ self .assertEqual (flow .code_verifier , self .good_verifier )
1706
+ results = dict (urllib .parse .parse_qsl (auth_url .query ))
1707
+ self .assertEqual (
1708
+ results ['code_challenge' ], self .good_challenger .decode ())
1709
+ self .assertEqual (results ['code_challenge_method' ], 'S256' )
1710
+ fake_verifier .assert_called ()
1711
+ fake_challenge .assert_called_with (self .good_verifier )
1712
+
1713
+ @mock .patch ('oauth2client.client._pkce.code_challenge' )
1714
+ @mock .patch ('oauth2client.client._pkce.code_verifier' )
1715
+ def test_step1_get_authorize_url_pkce_invalid_verifier (
1716
+ self , fake_verifier , fake_challenge ):
1717
+ fake_verifier .return_value = self .good_verifier
1718
+ fake_challenge .return_value = self .good_challenger
1719
+ flow = client .OAuth2WebServerFlow (
1720
+ 'client_id+1' ,
1721
+ scope = 'foo' ,
1722
+ redirect_uri = 'http://example.com' ,
1723
+ pkce = True ,
1724
+ code_verifier = self .bad_verifier )
1701
1725
auth_url = urllib .parse .urlparse (flow .step1_get_authorize_url ())
1702
- self .assertEqual (flow .code_verifier , b'__TEST_VERIFIER__' )
1726
+ self .assertEqual (flow .code_verifier , self . bad_verifier )
1703
1727
results = dict (urllib .parse .parse_qsl (auth_url .query ))
1704
- self .assertEqual (results ['code_challenge' ], '__TEST_CHALLENGE__' )
1728
+ self .assertEqual (
1729
+ results ['code_challenge' ], self .good_challenger .decode ())
1705
1730
self .assertEqual (results ['code_challenge_method' ], 'S256' )
1706
- fake_challenge .assert_called_with (b'__TEST_VERIFIER__' )
1731
+ fake_verifier .assert_not_called ()
1732
+ fake_challenge .assert_called_with (self .bad_verifier )
1707
1733
1708
1734
def test_step1_get_authorize_url_without_redirect (self ):
1709
1735
flow = client .OAuth2WebServerFlow ('client_id+1' , scope = 'foo' ,
@@ -1955,17 +1981,18 @@ def test_exchange_with_pkce(self):
1955
1981
({'status' : http_client .OK }, b'access_token=SlAV32hkKG' ),
1956
1982
])
1957
1983
flow = client .OAuth2WebServerFlow (
1958
- 'client_id+1' ,
1959
- scope = 'foo' ,
1960
- redirect_uri = 'http://example.com' ,
1961
- pkce = True ,
1962
- code_verifier = b'__TEST_VERIFIER__'
1963
- )
1984
+ 'client_id+1' ,
1985
+ scope = 'foo' ,
1986
+ redirect_uri = 'http://example.com' ,
1987
+ pkce = True ,
1988
+ code_verifier = self .good_verifier )
1964
1989
flow .step2_exchange (code = 'some random code' , http = http )
1965
1990
1966
1991
self .assertEqual (len (http .requests ), 1 )
1967
1992
test_request = http .requests [0 ]
1968
- self .assertIn ('code_verifier=__TEST_VERIFIER__' , test_request ['body' ])
1993
+ self .assertIn (
1994
+ 'code_verifier={0}' .format (self .good_verifier .decode ()),
1995
+ test_request ['body' ])
1969
1996
1970
1997
def test_exchange_using_authorization_header (self ):
1971
1998
auth_header = 'Basic Y2xpZW50X2lkKzE6c2Vjexc_managerV0KzE=' ,
0 commit comments