diff --git a/coderd/workspaceapps/apptest/apptest.go b/coderd/workspaceapps/apptest/apptest.go index 2e91953d6709a..5ba60fbb58687 100644 --- a/coderd/workspaceapps/apptest/apptest.go +++ b/coderd/workspaceapps/apptest/apptest.go @@ -1165,6 +1165,7 @@ func Run(t *testing.T, appHostIsPrimary bool, factory DeploymentFactory) { appDetails := setupProxyTest(t, &DeploymentOptions{ ServeHTTPS: true, }) + // using the fact that Apps.Port and Apps.PortHTTPS are the same port here port, err := strconv.ParseInt(appDetails.Apps.Port.AppSlugOrPort, 10, 32) require.NoError(t, err) _, err = appDetails.SDKClient.UpsertWorkspaceAgentPortShare(ctx, appDetails.Workspace.ID, codersdk.UpsertWorkspaceAgentPortShareRequest{ @@ -1178,7 +1179,7 @@ func Run(t *testing.T, appHostIsPrimary bool, factory DeploymentFactory) { publicAppClient := appDetails.AppClient(t) publicAppClient.SetSessionToken("") - resp, err := requestWithRetries(ctx, t, publicAppClient, http.MethodGet, appDetails.SubdomainAppURL(appDetails.Apps.Port).String(), nil) + resp, err := requestWithRetries(ctx, t, publicAppClient, http.MethodGet, appDetails.SubdomainAppURL(appDetails.Apps.PortHTTPS).String(), nil) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode) diff --git a/coderd/workspaceapps/apptest/setup.go b/coderd/workspaceapps/apptest/setup.go index 702789e4cf76f..c27032c192b91 100644 --- a/coderd/workspaceapps/apptest/setup.go +++ b/coderd/workspaceapps/apptest/setup.go @@ -116,6 +116,7 @@ type Details struct { Authenticated App Public App Port App + PortHTTPS App } } @@ -247,6 +248,12 @@ func setupProxyTestWithFactory(t *testing.T, factory DeploymentFactory, opts *De AgentName: agnt.Name, AppSlugOrPort: strconv.Itoa(int(opts.port)), } + details.Apps.PortHTTPS = App{ + Username: me.Username, + WorkspaceName: workspace.Name, + AgentName: agnt.Name, + AppSlugOrPort: strconv.Itoa(int(opts.port)) + "s", + } return details } diff --git a/coderd/workspaceapps/appurl/appurl.go b/coderd/workspaceapps/appurl/appurl.go index 4daa05a7e3664..8b8cfd74d36bd 100644 --- a/coderd/workspaceapps/appurl/appurl.go +++ b/coderd/workspaceapps/appurl/appurl.go @@ -90,9 +90,10 @@ func (a ApplicationURL) Path() string { // // Subdomains should be in the form: // -// ({PREFIX}---)?{PORT/APP_SLUG}--{AGENT_NAME}--{WORKSPACE_NAME}--{USERNAME} +// ({PREFIX}---)?{PORT{s?}/APP_SLUG}--{AGENT_NAME}--{WORKSPACE_NAME}--{USERNAME} // e.g. // https://8080--main--dev--dean.hi.c8s.io +// https://8080s--main--dev--dean.hi.c8s.io // https://app--main--dev--dean.hi.c8s.io // https://prefix---8080--main--dev--dean.hi.c8s.io // https://prefix---app--main--dev--dean.hi.c8s.io diff --git a/coderd/workspaceapps/request.go b/coderd/workspaceapps/request.go index d0fba4256cf03..4f6a6f3a64e65 100644 --- a/coderd/workspaceapps/request.go +++ b/coderd/workspaceapps/request.go @@ -350,10 +350,6 @@ func (r Request) getDatabase(ctx context.Context, db database.Store) (*databaseR } // No port share found, so we keep default to owner. } else { - if ps.Protocol == database.PortShareProtocolHttps { - // Apply HTTPS protocol if specified. - appURL = fmt.Sprintf("https://127.0.0.1:%d", portUint) - } appSharingLevel = ps.ShareLevel } } else { diff --git a/site/src/modules/resources/PortForwardButton.tsx b/site/src/modules/resources/PortForwardButton.tsx index f9e1ccfff1afa..e445f99ea1ca3 100644 --- a/site/src/modules/resources/PortForwardButton.tsx +++ b/site/src/modules/resources/PortForwardButton.tsx @@ -393,6 +393,7 @@ export const PortForwardPopoverView: FC = ({ agent.name, workspaceName, username, + share.protocol === "https", ); const label = share.port; return ( diff --git a/site/src/utils/portForward.ts b/site/src/utils/portForward.ts index 6d2dc4cbefeb7..bd666823b2c23 100644 --- a/site/src/utils/portForward.ts +++ b/site/src/utils/portForward.ts @@ -4,12 +4,12 @@ export const portForwardURL = ( agentName: string, workspaceName: string, username: string, + https = false, ): string => { const { location } = window; + const suffix = https ? "s" : ""; - const subdomain = `${ - isNaN(port) ? 3000 : port - }--${agentName}--${workspaceName}--${username}`; + const subdomain = `${port}${suffix}--${agentName}--${workspaceName}--${username}`; return `${location.protocol}//${host}`.replace("*", subdomain); };