@@ -571,14 +571,22 @@ def do_POST(self):
571571 self .server .SHARED ["schema" ] = self .headers .get ("Default-Schema" )
572572
573573 if self .headers .get ("Authorization" ) is not None :
574- auth_header = self .headers ["Authorization" ].replace ("Basic " , "" )
575- credentials = b64decode (auth_header ).decode ("utf-8" ).split (":" , 1 )
576- self .server .SHARED ["username" ] = credentials [0 ]
577- if len (credentials ) > 1 and credentials [1 ]:
578- self .server .SHARED ["password" ] = credentials [1 ]
579- else :
580- self .server .SHARED ["password" ] = None
574+ auth_header = self .headers ["Authorization" ]
575+ if "Basic" in auth_header :
576+ auth_header = auth_header .replace ("Basic " , "" )
577+ credentials = (
578+ b64decode (auth_header ).decode ("utf-8" ).split (":" , 1 )
579+ )
580+ self .server .SHARED ["username" ] = credentials [0 ]
581+ if len (credentials ) > 1 and credentials [1 ]:
582+ self .server .SHARED ["password" ] = credentials [1 ]
583+ else :
584+ self .server .SHARED ["password" ] = None
585+ elif "Bearer" in auth_header :
586+ jwt_token = auth_header .replace ("Bearer " , "" )
587+ self .server .SHARED ["jwt_token" ] = jwt_token
581588 else :
589+ self .server .SHARED ["jwt_token" ] = None
582590 self .server .SHARED ["username" ] = None
583591
584592 if self .headers .get ("X-User" ) is not None :
@@ -604,6 +612,7 @@ class TestingHTTPServer(HTTPServer):
604612 SHARED = manager .dict ()
605613 SHARED ["count" ] = 0
606614 SHARED ["usernameFromXUser" ] = None
615+ SHARED ["jwt_token" ] = None
607616 SHARED ["username" ] = None
608617 SHARED ["password" ] = None
609618 SHARED ["schema" ] = None
@@ -689,13 +698,17 @@ class TestUsernameSentAsHeader(TestingHttpServerTestCase):
689698 def setUp (self ):
690699 super ().setUp ()
691700 self .clientWithoutUsername = self .clientWithKwargs ()
701+ self .clientWithJwtToken = self .clientWithKwargs (
702+ jwt_token = "testJwtToken"
703+ )
692704 self .clientWithUsername = self .clientWithKwargs (username = "testDBUser" )
693705 self .clientWithUsernameAndPassword = self .clientWithKwargs (
694706 username = "testDBUser" , password = "test:password"
695707 )
696708
697709 def tearDown (self ):
698710 self .clientWithoutUsername .close ()
711+ self .clientWithJwtToken .close ()
699712 self .clientWithUsername .close ()
700713 self .clientWithUsernameAndPassword .close ()
701714 super ().tearDown ()
@@ -720,6 +733,13 @@ def test_username(self):
720733 self .assertEqual (TestingHTTPServer .SHARED ["username" ], "testDBUser" )
721734 self .assertEqual (TestingHTTPServer .SHARED ["password" ], "test:password" )
722735
736+ def test_jwt_token (self ):
737+ self .clientWithoutUsername .sql ("select * from fake" )
738+ self .assertEqual (TestingHTTPServer .SHARED ["jwt_token" ], None )
739+
740+ self .clientWithJwtToken .sql ("select * from fake" )
741+ self .assertEqual (TestingHTTPServer .SHARED ["jwt_token" ], "testJwtToken" )
742+
723743
724744class TestCrateJsonEncoder (TestCase ):
725745 def test_naive_datetime (self ):
0 commit comments