mirror of
https://github.com/get-drexa/drive.git
synced 2026-02-02 16:11:17 +00:00
feat(backend): add organization slugs
This commit is contained in:
34
apps/backend/internal/organization/slug.go
Normal file
34
apps/backend/internal/organization/slug.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package organization
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
slugMinLength = 1
|
||||
slugMaxLength = 63
|
||||
)
|
||||
|
||||
var (
|
||||
slugPattern = regexp.MustCompile(`^[a-z0-9]+(?:-[a-z0-9]+)*$`)
|
||||
reservedSlug = "my"
|
||||
)
|
||||
|
||||
var ErrInvalidSlug = errors.New("invalid organization slug")
|
||||
|
||||
// NormalizeSlug lowercases and validates an organization slug.
|
||||
func NormalizeSlug(input string) (string, error) {
|
||||
slug := strings.ToLower(strings.TrimSpace(input))
|
||||
if len(slug) < slugMinLength || len(slug) > slugMaxLength {
|
||||
return "", ErrInvalidSlug
|
||||
}
|
||||
if slug == reservedSlug {
|
||||
return "", ErrInvalidSlug
|
||||
}
|
||||
if !slugPattern.MatchString(slug) {
|
||||
return "", ErrInvalidSlug
|
||||
}
|
||||
return slug, nil
|
||||
}
|
||||
Reference in New Issue
Block a user