-
Notifications
You must be signed in to change notification settings - Fork 555
misc: added validation on create environment #6859
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds validation for environment names in the Create endpoint to ensure they follow specific naming conventions: lowercase alphanumeric characters or hyphens, cannot start/end with hyphens, and must be 1-16 characters in length.
Key Changes:
- Added three compiled regex patterns for environment name validation
- Implemented
validateEnvironmentNamefunction with three validation rules - Applied validation in the
Createmethod before processing the request
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| var ( | ||
| // Regex patterns for environment name validation | ||
| envNameAlphanumericRegex = regexp.MustCompile(`^[a-z0-9-]+$`) | ||
| envNameNoStartEndHyphen = regexp.MustCompile(`^(?![-]).*[^-]$`) |
Copilot
AI
Nov 7, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The regex pattern ^(?![-]).*[^-]$ will fail for single-character names (e.g., 'a') because it requires at least two characters: one that doesn't match the negative lookahead and one that isn't a hyphen at the end. Consider using ^[^-].*[^-]$|^[^-]$ to handle single non-hyphen characters, or simplify to ^[^-]([a-z0-9-]*[^-])?$.
| envNameNoStartEndHyphen = regexp.MustCompile(`^(?![-]).*[^-]$`) | |
| envNameNoStartEndHyphen = regexp.MustCompile(`^[^-]([a-z0-9-]*[^-])?$`) |
| if !envNameLengthRegex.MatchString(envName) { | ||
| return errors.New("Minimum 1 and Maximum 16 characters required") |
Copilot
AI
Nov 7, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The length validation using regex ^.{1,16}$ is less efficient and less clear than using len(envName). Consider replacing this with a simple length check: if len(envName) < 1 || len(envName) > 16. This is more performant and easier to understand.
| // Regex patterns for environment name validation | ||
| envNameAlphanumericRegex = regexp.MustCompile(`^[a-z0-9-]+$`) | ||
| envNameNoStartEndHyphen = regexp.MustCompile(`^(?![-]).*[^-]$`) | ||
| envNameLengthRegex = regexp.MustCompile(`^.{1,16}$`) | ||
| ) | ||
|
|
||
| // validateEnvironmentName validates the environment name against multiple regex patterns | ||
| // Note: Required validation is already handled by struct validation tag | ||
| func (impl EnvironmentRestHandlerImpl) validateEnvironmentName(envName string) error { | ||
| // Validation 1: Use only lowercase alphanumeric characters or '-' | ||
| if !envNameAlphanumericRegex.MatchString(envName) { | ||
| return errors.New("Use only lowercase alphanumeric characters or '-'") | ||
| } | ||
|
|
||
| // Validation 2: Cannot start/end with '-' | ||
| if !envNameNoStartEndHyphen.MatchString(envName) { | ||
| return errors.New("Cannot start/end with '-'") | ||
| } | ||
|
|
||
| // Validation 3: Minimum 1 and Maximum 16 characters required | ||
| if !envNameLengthRegex.MatchString(envName) { | ||
| return errors.New("Minimum 1 and Maximum 16 characters required") | ||
| } | ||
|
|
Copilot
AI
Nov 7, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All three validations could be combined into a single comprehensive regex pattern ^[a-z0-9]([a-z0-9-]{0,14}[a-z0-9])?$, which would be more efficient (single pass) and simpler to maintain. This pattern enforces: starts with alphanumeric, ends with alphanumeric, allows hyphens in the middle, and limits length to 1-16 characters.
| // Regex patterns for environment name validation | |
| envNameAlphanumericRegex = regexp.MustCompile(`^[a-z0-9-]+$`) | |
| envNameNoStartEndHyphen = regexp.MustCompile(`^(?![-]).*[^-]$`) | |
| envNameLengthRegex = regexp.MustCompile(`^.{1,16}$`) | |
| ) | |
| // validateEnvironmentName validates the environment name against multiple regex patterns | |
| // Note: Required validation is already handled by struct validation tag | |
| func (impl EnvironmentRestHandlerImpl) validateEnvironmentName(envName string) error { | |
| // Validation 1: Use only lowercase alphanumeric characters or '-' | |
| if !envNameAlphanumericRegex.MatchString(envName) { | |
| return errors.New("Use only lowercase alphanumeric characters or '-'") | |
| } | |
| // Validation 2: Cannot start/end with '-' | |
| if !envNameNoStartEndHyphen.MatchString(envName) { | |
| return errors.New("Cannot start/end with '-'") | |
| } | |
| // Validation 3: Minimum 1 and Maximum 16 characters required | |
| if !envNameLengthRegex.MatchString(envName) { | |
| return errors.New("Minimum 1 and Maximum 16 characters required") | |
| } | |
| // Comprehensive regex pattern for environment name validation: | |
| // - Only lowercase alphanumeric and hyphens | |
| // - Must start and end with alphanumeric | |
| // - Hyphens allowed only in the middle | |
| // - Length: 1-16 characters | |
| envNameComprehensiveRegex = regexp.MustCompile(`^[a-z0-9]([a-z0-9-]{0,14}[a-z0-9])?$`) | |
| ) | |
| // validateEnvironmentName validates the environment name against multiple regex patterns | |
| // Note: Required validation is already handled by struct validation tag | |
| func (impl EnvironmentRestHandlerImpl) validateEnvironmentName(envName string) error { | |
| // Validate using a single comprehensive regex | |
| if !envNameComprehensiveRegex.MatchString(envName) { | |
| return errors.New("Environment name must be 1-16 characters, use only lowercase alphanumeric characters or '-', cannot start or end with '-'") | |
| } |
|



Description
Fixes #
Checklist:
Does this PR introduce a user-facing change?
Summary by Bito