self.reset_session()
def _validate_jwt_token(self, token, username, permissions):
- payload = jwt.decode(token, verify=False)
+ payload = jwt.decode(token, options={'verify_signature': False})
self.assertIn('username', payload)
self.assertEqual(payload['username'], username)
CherryPy==13.1.0
enum34==1.1.6
more-itertools==4.1.0
-PyJWT==1.6.4
+PyJWT==2.0.1
bcrypt==3.1.4
python3-saml==1.4.1
requests==2.20.0
mgr.ACCESS_CTRL_DB.reset_attempt(username)
mgr.ACCESS_CTRL_DB.save()
token = JwtManager.gen_token(username)
- token = token.decode('utf-8')
+
+ # For backward-compatibility: PyJWT versions < 2.0.0 return bytes.
+ token = token.decode('utf-8') if isinstance(token, bytes) else token
+
set_cookies(url_prefix, token)
return {
'token': token,
@classmethod
def blacklist_token(cls, token):
- token = jwt.decode(token, verify=False)
+ token = cls.decode_token(token)
blacklist_json = mgr.get_store(cls.JWT_TOKEN_BLACKLIST_KEY)
if not blacklist_json:
blacklist_json = "{}"
--- /dev/null
+import unittest
+
+from .. import mgr
+from ..services.auth import JwtManager
+
+
+class JwtManagerTest(unittest.TestCase):
+
+ def test_generate_token_and_decode(self):
+ mgr.get_module_option.return_value = JwtManager.JWT_TOKEN_TTL
+ mgr.get_store.return_value = 'jwt_secret'
+
+ token = JwtManager.gen_token('my-username')
+ self.assertIsInstance(token, str)
+ self.assertTrue(token)
+
+ decoded_token = JwtManager.decode_token(token)
+ self.assertIsInstance(decoded_token, dict)
+ self.assertEqual(decoded_token['iss'], 'ceph-dashboard')
+ self.assertEqual(decoded_token['username'], 'my-username')