| 398 | } |
| 399 | |
| 400 | func isValidTemplateParameterOption(buildParameter codersdk.WorkspaceBuildParameter, templateVersionParameter codersdk.TemplateVersionParameter) bool { |
| 401 | // Multi-select parameters store values as a JSON array (e.g. |
| 402 | // '["vim","emacs"]'), so we need to parse the array and validate |
| 403 | // each element individually against the allowed options. |
| 404 | if templateVersionParameter.Type == "list(string)" { |
| 405 | var values []string |
| 406 | if err := json.Unmarshal([]byte(buildParameter.Value), &values); err != nil { |
| 407 | return false |
| 408 | } |
| 409 | for _, v := range values { |
| 410 | found := false |
| 411 | for _, opt := range templateVersionParameter.Options { |
| 412 | if opt.Value == v { |
| 413 | found = true |
| 414 | break |
| 415 | } |
| 416 | } |
| 417 | if !found { |
| 418 | return false |
| 419 | } |
| 420 | } |
| 421 | return true |
| 422 | } |
| 423 | |
| 424 | for _, opt := range templateVersionParameter.Options { |
| 425 | if opt.Value == buildParameter.Value { |
| 426 | return true |
| 427 | } |
| 428 | } |
| 429 | return false |
| 430 | } |
| 431 | |
| 432 | func templateVersionParametersNotFound(unknown string, params []codersdk.TemplateVersionParameter) error { |
| 433 | var sb strings.Builder |