mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add user-level parameter autofill (#11731)
This PR solves #10478 by auto-filling previously used template values in create and update workspace flows. I decided against explicit user values in settings for these reasons: * Autofill is far easier to implement * Users benefit from autofill _by default_ — we don't need to teach them new concepts * If we decide that autofill creates more harm than good, we can remove it without breaking compatibility
This commit is contained in:
+25
-23
@@ -3,29 +3,30 @@ package codersdk
|
||||
type RBACResource string
|
||||
|
||||
const (
|
||||
ResourceWorkspace RBACResource = "workspace"
|
||||
ResourceWorkspaceProxy RBACResource = "workspace_proxy"
|
||||
ResourceWorkspaceExecution RBACResource = "workspace_execution"
|
||||
ResourceWorkspaceApplicationConnect RBACResource = "application_connect"
|
||||
ResourceAuditLog RBACResource = "audit_log"
|
||||
ResourceTemplate RBACResource = "template"
|
||||
ResourceGroup RBACResource = "group"
|
||||
ResourceFile RBACResource = "file"
|
||||
ResourceProvisionerDaemon RBACResource = "provisioner_daemon"
|
||||
ResourceOrganization RBACResource = "organization"
|
||||
ResourceRoleAssignment RBACResource = "assign_role"
|
||||
ResourceOrgRoleAssignment RBACResource = "assign_org_role"
|
||||
ResourceAPIKey RBACResource = "api_key"
|
||||
ResourceUser RBACResource = "user"
|
||||
ResourceUserData RBACResource = "user_data"
|
||||
ResourceOrganizationMember RBACResource = "organization_member"
|
||||
ResourceLicense RBACResource = "license"
|
||||
ResourceDeploymentValues RBACResource = "deployment_config"
|
||||
ResourceDeploymentStats RBACResource = "deployment_stats"
|
||||
ResourceReplicas RBACResource = "replicas"
|
||||
ResourceDebugInfo RBACResource = "debug_info"
|
||||
ResourceSystem RBACResource = "system"
|
||||
ResourceTemplateInsights RBACResource = "template_insights"
|
||||
ResourceWorkspace RBACResource = "workspace"
|
||||
ResourceWorkspaceProxy RBACResource = "workspace_proxy"
|
||||
ResourceWorkspaceExecution RBACResource = "workspace_execution"
|
||||
ResourceWorkspaceApplicationConnect RBACResource = "application_connect"
|
||||
ResourceAuditLog RBACResource = "audit_log"
|
||||
ResourceTemplate RBACResource = "template"
|
||||
ResourceGroup RBACResource = "group"
|
||||
ResourceFile RBACResource = "file"
|
||||
ResourceProvisionerDaemon RBACResource = "provisioner_daemon"
|
||||
ResourceOrganization RBACResource = "organization"
|
||||
ResourceRoleAssignment RBACResource = "assign_role"
|
||||
ResourceOrgRoleAssignment RBACResource = "assign_org_role"
|
||||
ResourceAPIKey RBACResource = "api_key"
|
||||
ResourceUser RBACResource = "user"
|
||||
ResourceUserData RBACResource = "user_data"
|
||||
ResourceUserWorkspaceBuildParameters RBACResource = "user_workspace_build_parameters"
|
||||
ResourceOrganizationMember RBACResource = "organization_member"
|
||||
ResourceLicense RBACResource = "license"
|
||||
ResourceDeploymentValues RBACResource = "deployment_config"
|
||||
ResourceDeploymentStats RBACResource = "deployment_stats"
|
||||
ResourceReplicas RBACResource = "replicas"
|
||||
ResourceDebugInfo RBACResource = "debug_info"
|
||||
ResourceSystem RBACResource = "system"
|
||||
ResourceTemplateInsights RBACResource = "template_insights"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -52,6 +53,7 @@ var (
|
||||
ResourceAPIKey,
|
||||
ResourceUser,
|
||||
ResourceUserData,
|
||||
ResourceUserWorkspaceBuildParameters,
|
||||
ResourceOrganizationMember,
|
||||
ResourceLicense,
|
||||
ResourceDeploymentValues,
|
||||
|
||||
@@ -221,6 +221,27 @@ type OIDCAuthMethod struct {
|
||||
IconURL string `json:"iconUrl"`
|
||||
}
|
||||
|
||||
type UserParameter struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
// UserAutofillParameters returns all recently used parameters for the given user.
|
||||
func (c *Client) UserAutofillParameters(ctx context.Context, user string, templateID uuid.UUID) ([]UserParameter, error) {
|
||||
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/users/%s/autofill-parameters?template_id=%s", user, templateID), nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
if res.StatusCode != http.StatusOK {
|
||||
return nil, ReadBodyAsError(res)
|
||||
}
|
||||
|
||||
var params []UserParameter
|
||||
return params, json.NewDecoder(res.Body).Decode(¶ms)
|
||||
}
|
||||
|
||||
// HasFirstUser returns whether the first user has been created.
|
||||
func (c *Client) HasFirstUser(ctx context.Context) (bool, error) {
|
||||
res, err := c.Request(ctx, http.MethodGet, "/api/v2/users/first", nil)
|
||||
|
||||
Reference in New Issue
Block a user