• 
      

    [OAuth2Provider] Add dependencies and urls to provide OAuth2 support for external services

    Review Request #7897 — Created Jan. 20, 2016 and discarded

    Information

    Review Board
    master

    Reviewers

    Added into list of installed apps package django-tool-kit which provides
    end-points and basic logic to manage client applications. All the end-points
    for OAuth2 authorization with external services is moved to /oauth2/.
    All the tool to manage client applications is a part of preference menu

    Added package django-tool-kit into setup.py so that it will get install
    with ReviewBoard during setup time. Even though the lastest version is 0.10,
    the chosen version is 0.9 in order to be compatible with Django 1.6.

    Note: please contact lehoangminh@live.com when you try to land the feature into master. I am more than happy to support the final integration

    Manually tested the urls are setup correctly
    Reran python setup.py develop

    Description From Last Updated

    The first import should be: from __future__ import unicode_literals

    brenniebrennie

    Docstrings should be of the form: """Single line summary. Multi-line description. """

    brenniebrennie

    Blank line between these.

    brenniebrennie

    Col: 5 E265 block comment should start with '# '

    reviewbotreviewbot

    Col: 9 W292 no newline at end of file

    reviewbotreviewbot

    Unnecessary.

    brenniebrennie

    We're only importing one set of views here. I think we should do: from oauth2_provider import views

    brenniebrennie

    "Review Board" "OAuth" Missing a period.

    brenniebrennie

    Single quotes. Same below.

    brenniebrennie

    "OAuth" Also missing a period.

    brenniebrennie

    Use patterns()

    brenniebrennie

    No blank line here.

    brenniebrennie

    Col: 2 W292 no newline at end of file

    reviewbotreviewbot

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    Missing a trailing comma.

    brenniebrennie

    Please keep these imports in alphabetical order.

    brenniebrennie

    Unnecessary comment.

    brenniebrennie

    This isn't the right place for this. account/ URLs should go in reviewboard/accounts/urls.py. There, you can leave off the account/ …

    brenniebrennie

    Col: 34 W292 no newline at end of file

    reviewbotreviewbot

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    Alphabetize these.

    brenniebrennie

    This import doesn't need the as ... clause. When you do from x import y as y it is the …

    brenniebrennie

    url(r'^preferences/oauth2/', include(apps_urlpatterns, namespace='oauth2_provider'))

    brenniebrennie

    Why are we including this with a namespace?

    brenniebrennie

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    Should use url().

    chipx86chipx86

    I might be wrong, but I think since we're just doing an include, you can put this up above where …

    chipx86chipx86

    Alignment issue here.

    chipx86chipx86

    No space after """. I'd also change this to "An OAuth2 client application registered by a user."

    chipx86chipx86

    "URL" and "users".

    chipx86chipx86

    Let's name this oauth2_apps_urlpatterns.

    chipx86chipx86

    Let's put the view on its own line, for consistency.

    chipx86chipx86

    Blank line between these.

    chipx86chipx86

    This should probably go before the reviewboard imports. Ours should be last. Also, reviewboard.oauth2 should be in alphabetical order.

    chipx86chipx86

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    Can you document this?

    chipx86chipx86

    Should be listed in alphabetical order.

    chipx86chipx86

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    No space after """.

    chipx86chipx86

    Blank line between these.

    chipx86chipx86

    Is this covered in a future change? (I'll find out in a moment I'm sure). If so, we'll want to …

    chipx86chipx86

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot

    'PIPELINE_CSS' imported but unused

    reviewbotreviewbot

    'PIPELINE_JS' imported but unused

    reviewbotreviewbot

    'django_reset' imported but unused

    reviewbotreviewbot

    'from settings_local import *' used; unable to detect undefined names

    reviewbotreviewbot
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/oauth2/models.py (Diff revision 1)
       
       
      Show all issues
      Col: 5
       E265 block comment should start with '# '
      
    3. reviewboard/oauth2/models.py (Diff revision 1)
       
       
      Show all issues
      Col: 9
       W292 no newline at end of file
      
    4. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues
      Col: 2
       W292 no newline at end of file
      
    5. reviewboard/settings.py (Diff revision 1)
       
       
      Show all issues
       'django_reset' imported but unused
      
    6. reviewboard/settings.py (Diff revision 1)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    7. reviewboard/settings.py (Diff revision 1)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    8. reviewboard/settings.py (Diff revision 1)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    9. reviewboard/urls.py (Diff revision 1)
       
       
      Show all issues
      Col: 34
       W292 no newline at end of file
      
    10. 
        
    brennie
    1. 
        
    2. reviewboard/oauth2/models.py (Diff revision 1)
       
       
      Show all issues

      The first import should be:

      from __future__ import unicode_literals
      
    3. reviewboard/oauth2/models.py (Diff revision 1)
       
       
       
       
       
       
       
      Show all issues

      Docstrings should be of the form:

      """Single line summary.
      
      Multi-line description.
      """
      
    4. reviewboard/oauth2/models.py (Diff revision 1)
       
       
       
      Show all issues

      Blank line between these.

    5. reviewboard/oauth2/models.py (Diff revision 1)
       
       
      Show all issues

      Unnecessary.

    6. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      We're only importing one set of views here. I think we should do:

      from oauth2_provider import views
      
    7. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      "Review Board"
      "OAuth"

      Missing a period.

    8. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      Single quotes. Same below.

    9. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      "OAuth"

      Also missing a period.

    10. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      Use patterns()

    11. reviewboard/oauth2/urls.py (Diff revision 1)
       
       
      Show all issues

      No blank line here.

    12. reviewboard/settings.py (Diff revision 1)
       
       
      Show all issues

      Missing a trailing comma.

    13. reviewboard/urls.py (Diff revision 1)
       
       
       
       
       
       
       
       
      Show all issues

      Please keep these imports in alphabetical order.

    14. reviewboard/urls.py (Diff revision 1)
       
       
      Show all issues

      Unnecessary comment.

    15. reviewboard/urls.py (Diff revision 1)
       
       
       
       
       
       
       
       
       
      Show all issues

      This isn't the right place for this. account/ URLs should go in reviewboard/accounts/urls.py. There, you can leave off the account/ prefix (because all URLs there will have it automatically prepended because of how they are included).

      1. I agree with the suggestion, so I will move them into reviewboard/accounts/urls.py but note that we will end up with multiple places that dealing with OAuth2

    16. 
        
    LE
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 2)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 2)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 2)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 2)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 3)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 3)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 3)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 3)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    brennie
    1. So I think you may be heading in the wrong direction here. You will probably want to expose setting OAuth2 configuration per-user via the API. You should ask Christian about this to double check.

      1. I will ask Christian to clarify more

      2. Clarification:
        oauth2_provider package provide me some oauth2 end points and some forms to manage list of applications.
        Right now I am just put those end points and forms in a more proper place
        Questions:
        Do we plan to provide api support to manage oauth2 applications?
        Should I rewrite the management api or try to wrap around and use as much as possible what oauth2_provider have for me ?

      3. I discussed with Christian and it seems that there is no point adding API to manage OAuth2 client apps. Hence we are sticking to the form method for now

    2. reviewboard/accounts/urls.py (Diff revision 3)
       
       
      Show all issues

      Alphabetize these.

    3. reviewboard/accounts/urls.py (Diff revision 3)
       
       
      Show all issues

      This import doesn't need the as ... clause. When you do from x import y as y it is the same as doing from x import y.

    4. reviewboard/accounts/urls.py (Diff revision 3)
       
       
       
      Show all issues

      url(r'^preferences/oauth2/',
          include(apps_urlpatterns, namespace='oauth2_provider'))
      
    5. reviewboard/accounts/urls.py (Diff revision 3)
       
       
      Show all issues

      Why are we including this with a namespace?

      1. oauth2_provider looking for that name space in the template system. Without this name space the current default template of oauth2_provider with throw errors.
        Let's me add a TODO to remove this if needed since I am not very sure we still need this name space when we create our own template for OAuth2 forms.

      2. Removed URL

    6. 
        
    LE
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 4)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 4)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 4)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 4)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 5)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 5)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 5)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 5)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    LE
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 6)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 6)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 6)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 6)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    chipx86
    1. 
        
    2. reviewboard/accounts/urls.py (Diff revision 6)
       
       
      Show all issues

      Should use url().

    3. reviewboard/accounts/urls.py (Diff revision 6)
       
       
       
      Show all issues

      I might be wrong, but I think since we're just doing an include, you can put this up above where we define the "preferences/" URL without having to worry about that view prefix argument to patterns causing problems.

      1. I dont understand what you mean here. I just want oauth2 to be under preferences and under oauth2

      2. I removed this to move all the management into the My Account page

    4. reviewboard/accounts/urls.py (Diff revision 6)
       
       
       
      Show all issues

      Alignment issue here.

      1. I dont see any alignment issue here...

      2. I removed this to move all the management into the My Account page

    5. reviewboard/oauth2/models.py (Diff revision 6)
       
       
      Show all issues

      No space after """.

      I'd also change this to "An OAuth2 client application registered by a user."

    6. reviewboard/oauth2/urls.py (Diff revision 6)
       
       
      Show all issues

      "URL" and "users".

    7. reviewboard/oauth2/urls.py (Diff revision 6)
       
       
      Show all issues

      Let's name this oauth2_apps_urlpatterns.

    8. reviewboard/oauth2/urls.py (Diff revision 6)
       
       
      Show all issues

      Let's put the view on its own line, for consistency.

    9. reviewboard/oauth2/urls.py (Diff revision 6)
       
       
       
      Show all issues

      Blank line between these.

    10. reviewboard/settings.py (Diff revision 6)
       
       
      Show all issues

      This should probably go before the reviewboard imports. Ours should be last.

      Also, reviewboard.oauth2 should be in alphabetical order.

    11. reviewboard/settings.py (Diff revision 6)
       
       
       
       
       
      Show all issues

      Can you document this?

      1. What document and where should I do it ?

      2. Just need to put comments above saying what this is for, and maybe explain that scopes are computing dynamically based on the API resources. Something like that. Just so people know what this structure is for when looking through the file.

    12. setup.py (Diff revision 6)
       
       
      Show all issues

      Should be listed in alphabetical order.

    13. 
        
    LE
    reviewbot
    1. Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: Pyflakes
      Processed Files:
          reviewboard/settings.py
          reviewboard/oauth2/models.py
          reviewboard/accounts/urls.py
          reviewboard/oauth2/urls.py
          reviewboard/urls.py
          setup.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 7)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 7)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 7)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 7)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 8)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 8)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. reviewboard/settings.py (Diff revision 8)
       
       
      Show all issues
       'PIPELINE_CSS' imported but unused
      
    5. reviewboard/settings.py (Diff revision 8)
       
       
      Show all issues
       'PIPELINE_JS' imported but unused
      
    6. 
        
    LE
    chipx86
    1. 
        
    2. reviewboard/oauth2/models.py (Diff revision 8)
       
       
      Show all issues

      No space after """.

    3. reviewboard/oauth2/models.py (Diff revision 8)
       
       
       
      Show all issues

      Blank line between these.

    4. reviewboard/oauth2/models.py (Diff revision 8)
       
       
      Show all issues

      Is this covered in a future change? (I'll find out in a moment I'm sure). If so, we'll want to make sure one change has all the fields needed for a given model.

      1. Apparently after not having restriction on what localsite and what scope that an allication can be authenticated for, then we dont even need to change the original application class. Is it be better to remove this and use what from OAuth2 provider instead?

      2. Hmm... I think we probably want to have our own, because this may change in the future, and it'd be hard to update from another model. We should leave a comment (outside of the docstring) saying that we're subclassing this in order to have a model we can extend in the future.

        Now that said, looking into this more, we actually can't subclass from Application. If you look at the code in oauth2_provider/models.py, you'll see that Application is a subclass (and therefore a working model in the database) of AbstractApplication. We're meant to be subclassing the latter. That's probably why you needed the app_label, which we also don't want (it'll result in conflicts between the two models).

      3. Even though, subclassing AbstractApplication creates unused table, after Slack discussion we agree that an extra table is not an issue so we should subclass the AbstractApplication

        app_label can be removed, look at https://docs.djangoproject.com/en/dev/topics/auth/customizing/#auth-custom-user for more info

    5. 
        
    LE
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/oauth2/urls.py
          reviewboard/oauth2/models.py
          reviewboard/settings.py
          setup.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/oauth2/__init__.py
      
      
    2. reviewboard/settings.py (Diff revision 9)
       
       
      Show all issues
       'django_reset' imported but unused
      
    3. reviewboard/settings.py (Diff revision 9)
       
       
      Show all issues
       'from settings_local import *' used; unable to detect undefined names
      
    4. 
        
    LE
    brennie
    Review request changed
    Status:
    Discarded