mirror of
https://github.com/coder/coder.git
synced 2026-10-28 02:42:54 +08:00
feat: add regions endpoint for proxies feature (#7277)
* feat: add regions endpoint for proxies feature
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package coderd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"net/http"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/coder/coder/coderd/database/dbauthz"
|
||||
"github.com/coder/coder/coderd/httpapi"
|
||||
"github.com/coder/coder/codersdk"
|
||||
)
|
||||
|
||||
func (api *API) PrimaryRegion(ctx context.Context) (codersdk.Region, error) {
|
||||
deploymentIDStr, err := api.Database.GetDeploymentID(ctx)
|
||||
if xerrors.Is(err, sql.ErrNoRows) {
|
||||
// This shouldn't happen but it's pretty easy to avoid this causing
|
||||
// issues by falling back to a nil UUID.
|
||||
deploymentIDStr = uuid.Nil.String()
|
||||
} else if err != nil {
|
||||
return codersdk.Region{}, xerrors.Errorf("get deployment ID: %w", err)
|
||||
}
|
||||
deploymentID, err := uuid.Parse(deploymentIDStr)
|
||||
if err != nil {
|
||||
// This also shouldn't happen but we fallback to nil UUID.
|
||||
deploymentID = uuid.Nil
|
||||
}
|
||||
|
||||
return codersdk.Region{
|
||||
ID: deploymentID,
|
||||
// TODO: provide some way to customize these fields for the primary
|
||||
// region
|
||||
Name: "primary",
|
||||
DisplayName: "Default",
|
||||
IconURL: "/emojis/1f60e.png", // face with sunglasses
|
||||
Healthy: true,
|
||||
PathAppURL: api.AccessURL.String(),
|
||||
WildcardHostname: api.AppHostname,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// @Summary Get site-wide regions for workspace connections
|
||||
// @ID get-site-wide-regions-for-workspace-connections
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags WorkspaceProxies
|
||||
// @Success 200 {object} codersdk.RegionsResponse
|
||||
// @Router /regions [get]
|
||||
func (api *API) regions(rw http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
//nolint:gocritic // this route intentionally requests resources that users
|
||||
// cannot usually access in order to give them a full list of available
|
||||
// regions.
|
||||
ctx = dbauthz.AsSystemRestricted(ctx)
|
||||
|
||||
region, err := api.PrimaryRegion(ctx)
|
||||
if err != nil {
|
||||
httpapi.InternalServerError(rw, err)
|
||||
return
|
||||
}
|
||||
|
||||
httpapi.Write(ctx, rw, http.StatusOK, codersdk.RegionsResponse{
|
||||
Regions: []codersdk.Region{region},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user