diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index a934f4f6cb657..68505e1fde9ff 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -6899,12 +6899,6 @@ const docTemplate = `{ }, "name": { "type": "string" - }, - "url": { - "type": "string" - }, - "wildcard_hostname": { - "type": "string" } } }, diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index aea4a4111ad93..98390434b134e 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -6146,12 +6146,6 @@ }, "name": { "type": "string" - }, - "url": { - "type": "string" - }, - "wildcard_hostname": { - "type": "string" } } }, diff --git a/coderd/database/dbfake/databasefake.go b/coderd/database/dbfake/databasefake.go index b12551e32c03a..f976ca225062a 100644 --- a/coderd/database/dbfake/databasefake.go +++ b/coderd/database/dbfake/databasefake.go @@ -5191,8 +5191,6 @@ func (q *fakeQuerier) InsertWorkspaceProxy(_ context.Context, arg database.Inser Name: arg.Name, DisplayName: arg.DisplayName, Icon: arg.Icon, - Url: arg.Url, - WildcardHostname: arg.WildcardHostname, TokenHashedSecret: arg.TokenHashedSecret, CreatedAt: arg.CreatedAt, UpdatedAt: arg.UpdatedAt, diff --git a/coderd/database/dbgen/generator.go b/coderd/database/dbgen/generator.go index dcaebc6639f48..b53a749aa0f49 100644 --- a/coderd/database/dbgen/generator.go +++ b/coderd/database/dbgen/generator.go @@ -343,19 +343,27 @@ func WorkspaceProxy(t testing.TB, db database.Store, orig database.WorkspaceProx require.NoError(t, err, "generate secret") hashedSecret := sha256.Sum256([]byte(secret)) - resource, err := db.InsertWorkspaceProxy(context.Background(), database.InsertWorkspaceProxyParams{ + proxy, err := db.InsertWorkspaceProxy(context.Background(), database.InsertWorkspaceProxyParams{ ID: takeFirst(orig.ID, uuid.New()), Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)), DisplayName: takeFirst(orig.DisplayName, namesgenerator.GetRandomName(1)), Icon: takeFirst(orig.Icon, namesgenerator.GetRandomName(1)), - Url: takeFirst(orig.Url, fmt.Sprintf("https://%s.com", namesgenerator.GetRandomName(1))), - WildcardHostname: takeFirst(orig.WildcardHostname, fmt.Sprintf("*.%s.com", namesgenerator.GetRandomName(1))), TokenHashedSecret: hashedSecret[:], CreatedAt: takeFirst(orig.CreatedAt, database.Now()), UpdatedAt: takeFirst(orig.UpdatedAt, database.Now()), }) require.NoError(t, err, "insert proxy") - return resource, secret + + // Also set these fields if the caller wants them. + if orig.Url != "" || orig.WildcardHostname != "" { + proxy, err = db.RegisterWorkspaceProxy(context.Background(), database.RegisterWorkspaceProxyParams{ + Url: orig.Url, + WildcardHostname: orig.WildcardHostname, + ID: proxy.ID, + }) + require.NoError(t, err, "update proxy") + } + return proxy, secret } func File(t testing.TB, db database.Store, orig database.File) database.File { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 0aa9dd2e077bd..01a383932645b 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -2971,18 +2971,18 @@ const insertWorkspaceProxy = `-- name: InsertWorkspaceProxy :one INSERT INTO workspace_proxies ( id, + url, + wildcard_hostname, name, display_name, icon, - url, - wildcard_hostname, token_hashed_secret, created_at, updated_at, deleted ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, false) RETURNING id, name, display_name, icon, url, wildcard_hostname, created_at, updated_at, deleted, token_hashed_secret + ($1, '', '', $2, $3, $4, $5, $6, $7, false) RETURNING id, name, display_name, icon, url, wildcard_hostname, created_at, updated_at, deleted, token_hashed_secret ` type InsertWorkspaceProxyParams struct { @@ -2990,8 +2990,6 @@ type InsertWorkspaceProxyParams struct { Name string `db:"name" json:"name"` DisplayName string `db:"display_name" json:"display_name"` Icon string `db:"icon" json:"icon"` - Url string `db:"url" json:"url"` - WildcardHostname string `db:"wildcard_hostname" json:"wildcard_hostname"` TokenHashedSecret []byte `db:"token_hashed_secret" json:"token_hashed_secret"` CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` @@ -3003,8 +3001,6 @@ func (q *sqlQuerier) InsertWorkspaceProxy(ctx context.Context, arg InsertWorkspa arg.Name, arg.DisplayName, arg.Icon, - arg.Url, - arg.WildcardHostname, arg.TokenHashedSecret, arg.CreatedAt, arg.UpdatedAt, diff --git a/coderd/database/queries/proxies.sql b/coderd/database/queries/proxies.sql index b8b92f2885894..a5b158e3bdfa3 100644 --- a/coderd/database/queries/proxies.sql +++ b/coderd/database/queries/proxies.sql @@ -2,18 +2,18 @@ INSERT INTO workspace_proxies ( id, + url, + wildcard_hostname, name, display_name, icon, - url, - wildcard_hostname, token_hashed_secret, created_at, updated_at, deleted ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, false) RETURNING *; + ($1, '', '', $2, $3, $4, $5, $6, $7, false) RETURNING *; -- name: RegisterWorkspaceProxy :one UPDATE diff --git a/codersdk/workspaceproxy.go b/codersdk/workspaceproxy.go index 9b3521bcb4098..9a902a6b17835 100644 --- a/codersdk/workspaceproxy.go +++ b/codersdk/workspaceproxy.go @@ -26,11 +26,9 @@ type WorkspaceProxy struct { } type CreateWorkspaceProxyRequest struct { - Name string `json:"name"` - DisplayName string `json:"display_name"` - Icon string `json:"icon"` - URL string `json:"url"` - WildcardHostname string `json:"wildcard_hostname"` + Name string `json:"name"` + DisplayName string `json:"display_name"` + Icon string `json:"icon"` } type CreateWorkspaceProxyResponse struct { diff --git a/docs/api/enterprise.md b/docs/api/enterprise.md index a6bc536bb27e6..41bb8b8816673 100644 --- a/docs/api/enterprise.md +++ b/docs/api/enterprise.md @@ -1236,9 +1236,7 @@ curl -X POST http://coder-server:8080/api/v2/workspaceproxies \ { "display_name": "string", "icon": "string", - "name": "string", - "url": "string", - "wildcard_hostname": "string" + "name": "string" } ``` diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 5f55f961423a6..bdbe79732bf1c 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -1557,21 +1557,17 @@ CreateParameterRequest is a structure used to create a new parameter value for a { "display_name": "string", "icon": "string", - "name": "string", - "url": "string", - "wildcard_hostname": "string" + "name": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------- | ------ | -------- | ------------ | ----------- | -| `display_name` | string | false | | | -| `icon` | string | false | | | -| `name` | string | false | | | -| `url` | string | false | | | -| `wildcard_hostname` | string | false | | | +| Name | Type | Required | Restrictions | Description | +| -------------- | ------ | -------- | ------------ | ----------- | +| `display_name` | string | false | | | +| `icon` | string | false | | | +| `name` | string | false | | | ## codersdk.CreateWorkspaceRequest diff --git a/enterprise/cli/workspaceproxy.go b/enterprise/cli/workspaceproxy.go index d40872257bfa3..959ab3b509dce 100644 --- a/enterprise/cli/workspaceproxy.go +++ b/enterprise/cli/workspaceproxy.go @@ -55,13 +55,11 @@ func (r *RootCmd) deleteProxy() *clibase.Cmd { func (r *RootCmd) createProxy() *clibase.Cmd { var ( - proxyName string - displayName string - proxyIcon string - proxyURL string - proxyWildcardHostname string - onlyToken bool - formatter = cliui.NewOutputFormatter( + proxyName string + displayName string + proxyIcon string + onlyToken bool + formatter = cliui.NewOutputFormatter( // Text formatter should be human readable. cliui.ChangeFormatterData(cliui.TextFormat(), func(data any) (any, error) { response, ok := data.(codersdk.CreateWorkspaceProxyResponse) @@ -94,11 +92,9 @@ func (r *RootCmd) createProxy() *clibase.Cmd { Handler: func(inv *clibase.Invocation) error { ctx := inv.Context() resp, err := client.CreateWorkspaceProxy(ctx, codersdk.CreateWorkspaceProxyRequest{ - Name: proxyName, - DisplayName: displayName, - Icon: proxyIcon, - URL: proxyURL, - WildcardHostname: proxyWildcardHostname, + Name: proxyName, + DisplayName: displayName, + Icon: proxyIcon, }) if err != nil { return xerrors.Errorf("create workspace proxy: %w", err) @@ -136,16 +132,6 @@ func (r *RootCmd) createProxy() *clibase.Cmd { Description: "Display icon of the proxy.", Value: clibase.StringOf(&proxyIcon), }, - clibase.Option{ - Flag: "access-url", - Description: "Access URL of the proxy.", - Value: clibase.StringOf(&proxyURL), - }, - clibase.Option{ - Flag: "wildcard-access-url", - Description: "(Optional) Access url of the proxy for subdomain based apps.", - Value: clibase.StringOf(&proxyWildcardHostname), - }, clibase.Option{ Flag: "only-token", Description: "Only print the token. This is useful for scripting.", diff --git a/enterprise/cli/workspaceproxy_test.go b/enterprise/cli/workspaceproxy_test.go index 0c94d9136d977..6e486b4c94d3b 100644 --- a/enterprise/cli/workspaceproxy_test.go +++ b/enterprise/cli/workspaceproxy_test.go @@ -49,7 +49,6 @@ func Test_ProxyCRUD(t *testing.T) { "--name", expectedName, "--display-name", "Test Proxy", "--icon", "/emojis/1f4bb.png", - "--access-url", "http://localhost:3010", "--only-token", ) @@ -99,7 +98,6 @@ func Test_ProxyCRUD(t *testing.T) { Name: expectedName, DisplayName: "Test Proxy", Icon: "/emojis/us.png", - URL: "http://localhost:3010", }) require.NoError(t, err, "failed to create workspace proxy") diff --git a/enterprise/coderd/coderdenttest/proxytest.go b/enterprise/coderd/coderdenttest/proxytest.go index aa453f68c5867..6b517a5994ca4 100644 --- a/enterprise/coderd/coderdenttest/proxytest.go +++ b/enterprise/coderd/coderdenttest/proxytest.go @@ -108,10 +108,8 @@ func NewWorkspaceProxy(t *testing.T, coderdAPI *coderd.API, owner *codersdk.Clie } proxyRes, err := owner.CreateWorkspaceProxy(ctx, codersdk.CreateWorkspaceProxyRequest{ - Name: options.Name, - Icon: "/emojis/flag.png", - URL: accessURL.String(), - WildcardHostname: options.AppHostname, + Name: options.Name, + Icon: "/emojis/flag.png", }) require.NoError(t, err, "failed to create workspace proxy") diff --git a/enterprise/coderd/workspaceproxy.go b/enterprise/coderd/workspaceproxy.go index 150c5b4f45fd8..55b33cc3c7e02 100644 --- a/enterprise/coderd/workspaceproxy.go +++ b/enterprise/coderd/workspaceproxy.go @@ -89,24 +89,6 @@ func (api *API) postWorkspaceProxy(rw http.ResponseWriter, r *http.Request) { return } - if err := validateProxyURL(req.URL); err != nil { - httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ - Message: "URL is invalid.", - Detail: err.Error(), - }) - return - } - - if req.WildcardHostname != "" { - if _, err := httpapi.CompileHostnamePattern(req.WildcardHostname); err != nil { - httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ - Message: "Wildcard URL is invalid.", - Detail: err.Error(), - }) - return - } - } - id := uuid.New() secret, err := cryptorand.HexString(64) if err != nil { @@ -121,8 +103,6 @@ func (api *API) postWorkspaceProxy(rw http.ResponseWriter, r *http.Request) { Name: req.Name, DisplayName: req.DisplayName, Icon: req.Icon, - Url: req.URL, - WildcardHostname: req.WildcardHostname, TokenHashedSecret: hashedSecret[:], CreatedAt: database.Now(), UpdatedAt: database.Now(), diff --git a/enterprise/coderd/workspaceproxy_test.go b/enterprise/coderd/workspaceproxy_test.go index 71b85ddda284b..509581fd5d4af 100644 --- a/enterprise/coderd/workspaceproxy_test.go +++ b/enterprise/coderd/workspaceproxy_test.go @@ -49,10 +49,8 @@ func TestWorkspaceProxyCRUD(t *testing.T) { }) ctx := testutil.Context(t, testutil.WaitLong) proxyRes, err := client.CreateWorkspaceProxy(ctx, codersdk.CreateWorkspaceProxyRequest{ - Name: namesgenerator.GetRandomName(1), - Icon: "/emojis/flag.png", - URL: "https://" + namesgenerator.GetRandomName(1) + ".com", - WildcardHostname: "*.sub.example.com", + Name: namesgenerator.GetRandomName(1), + Icon: "/emojis/flag.png", }) require.NoError(t, err) @@ -84,10 +82,8 @@ func TestWorkspaceProxyCRUD(t *testing.T) { }) ctx := testutil.Context(t, testutil.WaitLong) proxyRes, err := client.CreateWorkspaceProxy(ctx, codersdk.CreateWorkspaceProxyRequest{ - Name: namesgenerator.GetRandomName(1), - Icon: "/emojis/flag.png", - URL: "https://" + namesgenerator.GetRandomName(1) + ".com", - WildcardHostname: "*.sub.example.com", + Name: namesgenerator.GetRandomName(1), + Icon: "/emojis/flag.png", }) require.NoError(t, err) @@ -153,10 +149,8 @@ func TestIssueSignedAppToken(t *testing.T) { createProxyCtx := testutil.Context(t, testutil.WaitLong) proxyRes, err := client.CreateWorkspaceProxy(createProxyCtx, codersdk.CreateWorkspaceProxyRequest{ - Name: namesgenerator.GetRandomName(1), - Icon: "/emojis/flag.png", - URL: "https://" + namesgenerator.GetRandomName(1) + ".com", - WildcardHostname: "*.sub.example.com", + Name: namesgenerator.GetRandomName(1), + Icon: "/emojis/flag.png", }) require.NoError(t, err) diff --git a/scripts/develop.sh b/scripts/develop.sh index 13e8cd1da01f9..e5a194bc26168 100755 --- a/scripts/develop.sh +++ b/scripts/develop.sh @@ -183,7 +183,7 @@ fatal() { # Attempt to delete the proxy first, in case it already exists. "${CODER_DEV_SHIM}" proxy delete local-proxy || true # Create the proxy - proxy_session_token=$("${CODER_DEV_SHIM}" proxy create --name=local-proxy --display-name="Local Proxy" --icon="/emojis/1f4bb.png" --access-url=http://localhost:3010 --only-token) + proxy_session_token=$("${CODER_DEV_SHIM}" proxy create --name=local-proxy --display-name="Local Proxy" --icon="/emojis/1f4bb.png" --only-token) # Start the proxy start_cmd PROXY "" "${CODER_DEV_SHIM}" proxy server --http-address=localhost:3010 --proxy-session-token="${proxy_session_token}" --primary-access-url=http://localhost:3000 ) || echo "Failed to create workspace proxy. No workspace proxy created." diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 6917b89456bab..df8ee08875226 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -260,8 +260,6 @@ export interface CreateWorkspaceProxyRequest { readonly name: string readonly display_name: string readonly icon: string - readonly url: string - readonly wildcard_hostname: string } // From codersdk/workspaceproxy.go