mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
91 lines
1.9 KiB
SQL
91 lines
1.9 KiB
SQL
-- name: InsertWorkspaceProxy :one
|
|
INSERT INTO
|
|
workspace_proxies (
|
|
id,
|
|
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 *;
|
|
|
|
-- name: UpdateWorkspaceProxy :one
|
|
UPDATE
|
|
workspace_proxies
|
|
SET
|
|
name = @name,
|
|
display_name = @display_name,
|
|
url = @url,
|
|
wildcard_hostname = @wildcard_hostname,
|
|
icon = @icon,
|
|
updated_at = Now()
|
|
WHERE
|
|
id = @id
|
|
RETURNING *;
|
|
|
|
|
|
-- name: UpdateWorkspaceProxyDeleted :exec
|
|
UPDATE
|
|
workspace_proxies
|
|
SET
|
|
updated_at = Now(),
|
|
deleted = @deleted
|
|
WHERE
|
|
id = @id;
|
|
|
|
-- name: GetWorkspaceProxyByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_proxies
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- Finds a workspace proxy that has an access URL or app hostname that matches
|
|
-- the provided hostname. This is to check if a hostname matches any workspace
|
|
-- proxy.
|
|
--
|
|
-- The hostname must be sanitized to only contain [a-zA-Z0-9.-] before calling
|
|
-- this query. The scheme, port and path should be stripped.
|
|
--
|
|
-- name: GetWorkspaceProxyByHostname :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_proxies
|
|
WHERE
|
|
-- Validate that the @hostname has been sanitized and is not empty. This
|
|
-- doesn't prevent SQL injection (already prevented by using prepared
|
|
-- queries), but it does prevent carefully crafted hostnames from matching
|
|
-- when they shouldn't.
|
|
--
|
|
-- Periods don't need to be escaped because they're not special characters
|
|
-- in SQL matches unlike regular expressions.
|
|
@hostname :: text SIMILAR TO '[a-zA-Z0-9.-]+' AND
|
|
deleted = false AND
|
|
|
|
-- Validate that the hostname matches either the wildcard hostname or the
|
|
-- access URL (ignoring scheme, port and path).
|
|
(
|
|
url SIMILAR TO '[^:]*://' || @hostname :: text || '([:/]?%)*' OR
|
|
@hostname :: text LIKE replace(wildcard_hostname, '*', '%')
|
|
)
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetWorkspaceProxies :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_proxies
|
|
WHERE
|
|
deleted = false;
|