• 
      

    Add the initial "Connect a service" wizard flow.

    Review Request #15140 — Created June 26, 2026 and updated

    Information

    Review Board
    release-9.x

    Reviewers

    This adds the first step of the new "Connect a service" flow on the
    Connected Services admin page. Clicking "Connect a service" now opens a
    wizard dialog with a searchable, sectioned list of available hosting
    services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a
    service loads its connect UI as a server-rendered fragment and submits
    the authentication form over AJAX, creating the HostingServiceAccount.

    On the backend, this adds a ConnectServiceView that serves the
    per-service connect fragment (GET) and processes the auth form (POST),
    returning JSON with either a redirect on success or the re-rendered form
    with errors. Authorization, two-factor, and certificate errors are
    caught and surfaced inline, and unexpected errors are logged.

    BaseHostingService now has overridable methods so services can customize
    or replace the connect UI.

    The wizard view also includes back-navigation and deep-link hooks
    (initialConnectURL / data-connect-page) staged for the upcoming
    GitHub App connection flow.

    • Ran unit tests.
    • Used the wizard to connect new hosting service accounts, exercising
      the success case as well as form errors.
    Summary ID
    Add the initial "Connect a service" wizard flow.
    This adds the first step of the new "Connect a service" flow on the Connected Services admin page. Clicking "Connect a service" now opens a wizard dialog with a searchable, sectioned list of available hosting services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a service loads its connect UI as a server-rendered fragment and submits the authentication form over AJAX, creating the `HostingServiceAccount`. On the backend, this adds a `ConnectServiceView` that serves the per-service connect fragment (GET) and processes the auth form (POST), returning JSON with either a redirect on success or the re-rendered form with errors. Authorization, two-factor, and certificate errors are caught and surfaced inline, and unexpected errors are logged. BaseHostingService now has overridable methods so services can customize or replace the connect UI. The wizard view also includes back-navigation and deep-link hooks (`initialConnectURL` / `data-connect-page`) staged for the upcoming GitHub App connection flow. Testing Done: - Ran unit tests. - Used the wizard to connect new hosting service accounts, exercising the success case as well as form errors.
    ouuqozrxlzmxtvzmuqnpryzotlzyrzkv

    Description From Last Updated

    continuation line over-indented for visual indent Column: 54 Error code: E127

    reviewbot reviewbot

    This and the test case needs a Version Added.

    maubin maubin

    Can you put the arguments each on their own line.

    maubin maubin

    Can we put each entry on its own line.

    maubin maubin

    We don't actually pass the local_site in any of the calls. We could get rid of this arg and instead …

    maubin maubin

    This is missing the outer <div class="ink-c-dialog rb-c-connect-wizard">.

    maubin maubin

    'reviewboard.site.models.LocalSite' imported but unused Column: 5 Error code: F401

    reviewbot reviewbot
    Checks run (1 failed, 1 succeeded)
    flake8 failed.
    JSHint passed.

    flake8

    david
    maubin
    1. 
        
    2. Show all issues

      This and the test case needs a Version Added.

    3. Show all issues

      Can you put the arguments each on their own line.

    4. reviewboard/admin/views.py (Diff revision 2)
       
       
      Show all issues

      Can we put each entry on its own line.

    5. Show all issues

      We don't actually pass the local_site in any of the calls. We could get rid of this arg and instead pass request.local_site to the auth form.

    6. reviewboard/static/rb/css/pages/admin/connected-services.less (Diff revision 2)
       
       
       
       
       
       
       
       
       
      Show all issues

      This is missing the outer <div class="ink-c-dialog rb-c-connect-wizard">.

    7. 
        
    david
    Review request changed
    Commits:
    Summary ID
    Add the initial "Connect a service" wizard flow.
    This adds the first step of the new "Connect a service" flow on the Connected Services admin page. Clicking "Connect a service" now opens a wizard dialog with a searchable, sectioned list of available hosting services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a service loads its connect UI as a server-rendered fragment and submits the authentication form over AJAX, creating the `HostingServiceAccount`. On the backend, this adds a `ConnectServiceView` that serves the per-service connect fragment (GET) and processes the auth form (POST), returning JSON with either a redirect on success or the re-rendered form with errors. Authorization, two-factor, and certificate errors are caught and surfaced inline, and unexpected errors are logged. BaseHostingService now has overridable methods so services can customize or replace the connect UI. The wizard view also includes back-navigation and deep-link hooks (`initialConnectURL` / `data-connect-page`) staged for the upcoming GitHub App connection flow. Testing Done: - Ran unit tests. - Used the wizard to connect new hosting service accounts, exercising the success case as well as form errors.
    ouuqozrxlzmxtvzmuqnpryzotlzyrzkv
    Add the initial "Connect a service" wizard flow.
    This adds the first step of the new "Connect a service" flow on the Connected Services admin page. Clicking "Connect a service" now opens a wizard dialog with a searchable, sectioned list of available hosting services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a service loads its connect UI as a server-rendered fragment and submits the authentication form over AJAX, creating the `HostingServiceAccount`. On the backend, this adds a `ConnectServiceView` that serves the per-service connect fragment (GET) and processes the auth form (POST), returning JSON with either a redirect on success or the re-rendered form with errors. Authorization, two-factor, and certificate errors are caught and surfaced inline, and unexpected errors are logged. BaseHostingService now has overridable methods so services can customize or replace the connect UI. The wizard view also includes back-navigation and deep-link hooks (`initialConnectURL` / `data-connect-page`) staged for the upcoming GitHub App connection flow. Testing Done: - Ran unit tests. - Used the wizard to connect new hosting service accounts, exercising the success case as well as form errors.
    ouuqozrxlzmxtvzmuqnpryzotlzyrzkv

    Checks run (1 failed, 1 succeeded)

    flake8 failed.
    JSHint passed.

    flake8

    david
    Review request changed
    Commits:
    Summary ID
    Add the initial "Connect a service" wizard flow.
    This adds the first step of the new "Connect a service" flow on the Connected Services admin page. Clicking "Connect a service" now opens a wizard dialog with a searchable, sectioned list of available hosting services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a service loads its connect UI as a server-rendered fragment and submits the authentication form over AJAX, creating the `HostingServiceAccount`. On the backend, this adds a `ConnectServiceView` that serves the per-service connect fragment (GET) and processes the auth form (POST), returning JSON with either a redirect on success or the re-rendered form with errors. Authorization, two-factor, and certificate errors are caught and surfaced inline, and unexpected errors are logged. BaseHostingService now has overridable methods so services can customize or replace the connect UI. The wizard view also includes back-navigation and deep-link hooks (`initialConnectURL` / `data-connect-page`) staged for the upcoming GitHub App connection flow. Testing Done: - Ran unit tests. - Used the wizard to connect new hosting service accounts, exercising the success case as well as form errors.
    ouuqozrxlzmxtvzmuqnpryzotlzyrzkv
    Add the initial "Connect a service" wizard flow.
    This adds the first step of the new "Connect a service" flow on the Connected Services admin page. Clicking "Connect a service" now opens a wizard dialog with a searchable, sectioned list of available hosting services ("Popular", "Source Hosting", "Issue Tracking"). Choosing a service loads its connect UI as a server-rendered fragment and submits the authentication form over AJAX, creating the `HostingServiceAccount`. On the backend, this adds a `ConnectServiceView` that serves the per-service connect fragment (GET) and processes the auth form (POST), returning JSON with either a redirect on success or the re-rendered form with errors. Authorization, two-factor, and certificate errors are caught and surfaced inline, and unexpected errors are logged. BaseHostingService now has overridable methods so services can customize or replace the connect UI. The wizard view also includes back-navigation and deep-link hooks (`initialConnectURL` / `data-connect-page`) staged for the upcoming GitHub App connection flow. Testing Done: - Ran unit tests. - Used the wizard to connect new hosting service accounts, exercising the success case as well as form errors.
    ouuqozrxlzmxtvzmuqnpryzotlzyrzkv

    Checks run (2 succeeded)

    flake8 passed.
    JSHint passed.