File: test_legacy_key_generator.py

package info (click to toggle)
djangorestframework-api-key 3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 392 kB
  • sloc: python: 926; makefile: 53; sh: 3
file content (42 lines) | stat: -rw-r--r-- 1,345 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from typing import Tuple

import pytest
from django.contrib.auth.hashers import make_password
from django.utils.crypto import get_random_string

from rest_framework_api_key.crypto import KeyGenerator
from rest_framework_api_key.models import APIKey, BaseAPIKeyManager

pytestmark = pytest.mark.django_db


class LegacyKeyGenerator(KeyGenerator):
    """
    Pre-1.4 key generator.

    The key generator interface was updated in v1.4 via:
    https://github.com/florimondmanca/djangorestframework-api-key/pull/62

    We must ensure that custom key generators created based on the pre-1.4 interface
    continue to work in 1.x.
    """

    def generate(self) -> Tuple[str, str]:  # type: ignore
        # NOTE: this method should replicate the behavior before #62, and
        # have no dependencies on the current `rest_framework_api_key` package.
        prefix = get_random_string(8)
        secret_key = get_random_string(32)
        key = prefix + "." + secret_key
        key_id = prefix + "." + make_password(key)
        return key, key_id


def test_manager_with_legacy_key_generator() -> None:
    class Manager(BaseAPIKeyManager):
        key_generator = LegacyKeyGenerator()

    manager = Manager()
    manager.model = APIKey

    api_key, generated_key = manager.create_key(name="test")
    assert api_key.is_valid(generated_key)