Update WebAPITokenManager to use token generators

Review Request #12419 — Created June 28, 2022 and submitted

Information

Djblets
release-3.x

Reviewers

Currently, token generation is baked into
djblets.webapi.managers.WebAPITokenManager. With our move to API Tokens v2,
we don't want token generation to be tightly coupled with Web API tokens. We
want tokens to be usable outside of just the API.

This change moves token generation out of WebAPITokenManager by making use of
token generators instead of directly generating tokens in WebAPITokenManager.
To do this we add two new parameters to WebAPITokenManager,
token_generator_id to decide what token generator to use and token_info to
pass along information needed for token generation to the token generator.

  • Updated WebAPITokenManager's unit tests to account for the use
    of token generators.
  • Ran all unit tests in djblets.webapi.tests with success.
Summary ID
Update WebAPITokenManager to use Token Generators
d39b84516abefb900321e80dd1d18f4524b0eb5d
Description From Last Updated

SyntaxError: invalid syntax Column: 1 Error code: E999

reviewbotreviewbot

Switch these two lines

daviddavid

Instead of instantiating the registry as an attribute on this manager class, we shoud have a global within djblets. That …

daviddavid

We should probably verify that this returns a value, and if not, raise WebAPITokenGenerationError.

daviddavid

Can we swap these two args? That way all the query args are together.

daviddavid

While you're here, can you move this import up into the 3rd party modules group?

daviddavid

Let's put a Version Added in each of these new ones. Helps to have a high-level in the function's description, …

chipx86chipx86

No need for the parens here, or the trailing comma.

chipx86chipx86

No need for the parens here, or the trailing comma.

chipx86chipx86

No blank line here.

chipx86chipx86

Let's do import kgb and use attribute accesses from there. That's the pattern we've been establishing elsewhere.

chipx86chipx86

Can we also check the warning text, to ensure we're getting what we think we're getting?

chipx86chipx86

Let's move this after auto_generated. Since Python by default allows positional arguments to be specified for keyword arguments (unless using …

chipx86chipx86
david
  1. Ship It!

  2. 
      
maubin
Review request changed

Change Summary:

  • Added deprecation warnings for when token_generator_id or token_info aren't set.

Commits:

Summary ID
Update WebAPITokenManager to use Token Generators
1bc481db2f099cc4127f48a2c3e6961a42bae5e0
Update WebAPITokenManager to use Token Generators
6fe60bdab5c0235031d62e7a701f672cf524a7d9

Diff:

Revision 2 (+244 -26)

Show changes

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

maubin
david
  1. 
      
  2. djblets/webapi/managers.py (Diff revision 3)
     
     
     
    Show all issues

    Switch these two lines

  3. djblets/webapi/managers.py (Diff revision 3)
     
     
    Show all issues

    Instead of instantiating the registry as an attribute on this manager class, we shoud have a global within djblets. That way extensions or other code can register additional generators easily.

    This should live in djblets/secrets/token_generators/__init__.py and use djblets.registries.importer.lazy_import_registry.

  4. djblets/webapi/tests/test_api_token.py (Diff revision 3)
     
     
    Show all issues

    While you're here, can you move this import up into the 3rd party modules group?

  5. 
      
maubin
maubin
david
  1. 
      
  2. djblets/webapi/managers.py (Diff revisions 3 - 5)
     
     
     
    Show all issues

    We should probably verify that this returns a value, and if not, raise WebAPITokenGenerationError.

  3. djblets/webapi/managers.py (Diff revisions 3 - 5)
     
     
     
    Show all issues

    Can we swap these two args? That way all the query args are together.

  4. 
      
chipx86
  1. 
      
  2. djblets/webapi/managers.py (Diff revision 5)
     
     
     
     
    Show all issues

    Let's put a Version Added in each of these new ones.

    Helps to have a high-level in the function's description, but also to see this on each parameter.

  3. djblets/webapi/managers.py (Diff revision 5)
     
     
     
    Show all issues

    No need for the parens here, or the trailing comma.

  4. djblets/webapi/managers.py (Diff revision 5)
     
     
     
    Show all issues

    No need for the parens here, or the trailing comma.

  5. djblets/webapi/managers.py (Diff revision 5)
     
     
     
     
     
     
     
     
    Show all issues

    No blank line here.

  6. djblets/webapi/tests/test_api_token.py (Diff revision 5)
     
     
    Show all issues

    Let's do import kgb and use attribute accesses from there. That's the pattern we've been establishing elsewhere.

  7. djblets/webapi/tests/test_api_token.py (Diff revision 5)
     
     
     
    Show all issues

    Can we also check the warning text, to ensure we're getting what we think we're getting?

  8. 
      
maubin
chipx86
  1. 
      
  2. djblets/webapi/managers.py (Diff revision 6)
     
     
     
     
     
     
     
     
    Show all issues

    Let's move this after auto_generated. Since Python by default allows positional arguments to be specified for keyword arguments (unless using keyword-only arguments in Python 3), introducing a new argument in the middle is technically an API-breaking change.

    This is why I want to eventually move more things to keyword-only arguments (but that has its own deprecation challenges).

  3. 
      
maubin
chipx86
  1. Ship It!
  2. 
      
maubin
Review request changed

Status: Closed (submitted)

Change Summary:

Pushed to release-3.x (b7f84ba)
Loading...