コード例 #1
0
 def create_code(
         cls,
         *,
         data: dict[str, typing.Union[str, int, float, dict, list,
                                      bool]] = None,
         aud: CodeAudiences = CodeAudiences.ACCESS_TOKEN,  # Audience
         iat: datetime.datetime = None,  # Issued at datetime
         exp: datetime.datetime = None,  # Expired at datetime
         nbf: datetime.datetime = None,  # Not before datetime
         iss: str = "",  # Issuer
 ) -> str:
     if data is None:
         data = {}
     now = utc_now()
     if iat is None:
         iat = now
     if exp is None:
         exp = now + datetime.timedelta(minutes=30)
     if nbf is None:
         nbf = now
     payload = data.copy()
     payload |= {"iat": iat, "aud": aud, "exp": exp, "nbf": nbf, "iss": iss}
     return jwt.encode(payload=payload,
                       key=settings.Settings.SECRET_KEY,
                       algorithm="HS512")
コード例 #2
0
    def test_utc_now(self):
        expected_result = datetime.datetime.now(tz=zoneinfo.ZoneInfo("UTC"))
        datetime_mock = self.create_patch(target="fastapi_mongodb.helpers.datetime.datetime")
        datetime_mock.now.return_value = expected_result

        result = utc_now()

        datetime_mock.now.assert_called_once_with(tz=get_utc_timezone())
        self.assertEqual(expected_result, result)
コード例 #3
0
    def test_read_code_exception_nbf(self):
        now = utc_now()
        code = self.tokens_handler.create_code(nbf=now +
                                               datetime.timedelta(seconds=1))

        with self.assertRaises(
                expected_exception=HandlerException) as exception_context:
            self.tokens_handler.read_code(code=code)
        self.assertEqual("The token is not valid yet.",
                         str(exception_context.exception))
コード例 #4
0
    def test_read_code_exception_exp(self):
        now = utc_now()
        code = self.tokens_handler.create_code(exp=now -
                                               datetime.timedelta(seconds=1))

        with self.assertRaises(
                expected_exception=HandlerException) as exception_context:
            self.tokens_handler.read_code(code=code)
        self.assertEqual("Expired JWT token.",
                         str(exception_context.exception))
コード例 #5
0
    def test_create_read_code_custom(self):
        test_data = self.get_test_data()
        now = utc_now()
        custom_claims = self.get_custom_claims()
        test_data |= custom_claims

        code = self.tokens_handler.create_code(data=test_data,
                                               iat=now,
                                               exp=now,
                                               nbf=now,
                                               aud=CodeAudiences.EMAIL_RESET,
                                               **custom_claims)

        parsed = self.tokens_handler.read_code(code=code,
                                               aud=CodeAudiences.EMAIL_RESET,
                                               leeway=self.faker.pyint(),
                                               convert_to=self.TestModel,
                                               **custom_claims)

        self.assertIsInstance(code, str)
        self.assertIsInstance(parsed, self.TestModel)  # convert_to kwarg
        self.assertDictEqual(
            test_data, parsed.dict(include={key
                                            for key in test_data.keys()}))