• 
      

    Redirect some views in read-only mode, hide links to these views

    Review Request #8811 — Created March 11, 2017 and submitted

    Information

    khp
    Review Board
    master

    Reviewers

    Read-only mode is a setting an admin can enable to prevent writes to
    the database. This can be used when the site is under maintenence or
    being upgraded. This commit adds a decorator that wraps
    login_required. If no arguments are passed into the new
    login_required it will behave the same as django's login_required.
    If a boolean value for redirect_read_only is set to true, a decorator
    that checks whether the user is in read-only mode and should redirect
    will be returned.

    "New Review Request" and "My Accounts" now redirect to a Read-Only page
    and "Register" redirects to "Log-in". Buttons to these pages are
    removed for users affected in read-only mode.

    • Check that accessing New Review Request and My Accounts redirects to
      503 page logged in as non-admin in read-only mode
    • Check that accessing Register when logged in or not redirects to the
      log-in page
    • Check that links to New Review/My Accounts/Register are removed for
      non-admins/unauthenticated users
    • Check that submitting Register form when in read-only mode does not
      do any writes
    Description From Last Updated

    Mind wrapping your description & testing done at 72 characters?

    brenniebrennie

    Col: 80 E501 line too long (82 > 79 characters)

    reviewbotreviewbot

    'django_login_required' imported but unused

    reviewbotreviewbot

    Col: 80 E501 line too long (82 > 79 characters)

    reviewbotreviewbot

    Col: 5 E128 continuation line under-indented for visual indent

    reviewbotreviewbot

    Col: 5 E128 continuation line under-indented for visual indent

    reviewbotreviewbot

    Needs Args and Returns. The return type here is callable.

    brenniebrennie

    No blank line here.

    brenniebrennie

    No blank line here.

    brenniebrennie

    No blank line here.

    brenniebrennie

    We prefer to use a hanging indent here. Reformat as: if (auth_backends[0].supports_registration and siteconfig.get('auth_enable_registration') and not siteconfig.get('site_read_only')): Also, mind changing …

    brenniebrennie

    The request arg is not used, so I don't think we need to have it here. It can live in …

    brenniebrennie

    Comments should end with a period.

    brenniebrennie

    redefinition of unused 'login_required' from line 3

    reviewbotreviewbot
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
    2. reviewboard/accounts/decorators.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (82 > 79 characters)
      
    3. reviewboard/accounts/views.py (Diff revision 1)
       
       
      Show all issues
       'django_login_required' imported but unused
      
    4. reviewboard/accounts/views.py (Diff revision 1)
       
       
      Show all issues
      Col: 80
       E501 line too long (82 > 79 characters)
      
    5. reviewboard/urls.py (Diff revision 1)
       
       
      Show all issues
      Col: 5
       E128 continuation line under-indented for visual indent
      
    6. reviewboard/urls.py (Diff revision 1)
       
       
      Show all issues
      Col: 5
       E128 continuation line under-indented for visual indent
      
    7. 
        
    KH
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
    2. 
        
    brennie
    1. 
        
    2. reviewboard/accounts/decorators.py (Diff revision 2)
       
       
      Show all issues

      Needs Args and Returns. The return type here is callable.

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

      No blank line here.

    4. 
        
    KH
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/reviews/views.py
          reviewboard/accounts/decorators.py
          reviewboard/accounts/views.py
          reviewboard/urls.py
      
      Ignored Files:
          reviewboard/templates/503.html
          reviewboard/templates/accounts/login.html
          reviewboard/templates/base/_nav_support_menu.html
      
      
    2. 
        
    brennie
    1. Just a few nits.

    2. Show all issues

      Mind wrapping your description & testing done at 72 characters?

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

      No blank line here.

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

      No blank line here.

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

      We prefer to use a hanging indent here. Reformat as:

      if (auth_backends[0].supports_registration and
          siteconfig.get('auth_enable_registration') and
          not siteconfig.get('site_read_only')):
      

      Also, mind changing that other string to single quotes?

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

      The request arg is not used, so I don't think we need to have it here. It can live in *args.

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

      Comments should end with a period.

    8. 
        
    KH
    Review request changed
    Description:
    ~  

    Read-only mode is a setting an admin can enable to prevent writes to the database. This can be used when the site is under maintenence or being upgraded. This commit adds a decorator that wraps login_required. If no arguments are passed into the new login_required it will behave the same as django's login_required. If a boolean value for redirect_read_only is set to true, a decorator that checks whether the user is in read-only mode and redirect apprpriately will be returned.

      ~

    Read-only mode is a setting an admin can enable to prevent writes to

      + the database. This can be used when the site is under maintenence or
      + being upgraded. This commit adds a decorator that wraps
      + login_required. If no arguments are passed into the new
      + login_required it will behave the same as django's login_required.
      + If a boolean value for redirect_read_only is set to true, a decorator
      + that checks whether the user is in read-only mode and should redirect
      + will be returned.

       
    ~  

    "New Review Request" and "My Accounts" now redirect to a Read-Only page and "Register" redirects to "Log-in". Buttons to these pages are removed for users affected in read-only mode.

      ~

    "New Review Request" and "My Accounts" now redirect to a Read-Only page

      + and "Register" redirects to "Log-in". Buttons to these pages are
      + removed for users affected in read-only mode.

    Testing Done:
    ~  

    Check that accessing New Review Request and My Accounts redirects to 503 page logged in as non-admin in read-only mode

    ~   Check that accessing Register when logged in or not redirects to the log-in page
    ~   Check that links to New Review/My Accounts/Register are removed for non-admins/unauthenticated users
    ~   Check that submitting Register form when in read-only mode does not do any writes

      ~
    • Check that accessing New Review Request and My Accounts redirects to
      503 page logged in as non-admin in read-only mode
      ~
    • Check that accessing Register when logged in or not redirects to the
      log-in page
      ~
    • Check that links to New Review/My Accounts/Register are removed for
      non-admins/unauthenticated users
      ~
    • Check that submitting Register form when in read-only mode does not
      do any writes

    Checks run (1 failed, 1 succeeded, 1 failed with error)

    JSHint passed.
    PEP8 Style Checker internal error.
    Pyflakes failed.

    Pyflakes

    KH
    KH
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-4.0.x (e0e7431)