mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-21 23:18:06 +00:00
67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
|
|
kubeValidate "k8s.io/apimachinery/pkg/util/validation"
|
|
)
|
|
|
|
var invalidDNS1123Chars = regexp.MustCompile("[^a-z0-9-.]+")
|
|
|
|
func ContainsString(slice []string, s string) bool {
|
|
for _, item := range slice {
|
|
if item == s {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func RemoveString(slice []string, s string) (result []string) {
|
|
for _, item := range slice {
|
|
if item == s {
|
|
continue
|
|
}
|
|
result = append(result, item)
|
|
}
|
|
return
|
|
}
|
|
|
|
func StringToBool(str string) (bool, error) {
|
|
restartDeploymentBool, err := strconv.ParseBool(strings.ToLower(str))
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return restartDeploymentBool, nil
|
|
}
|
|
|
|
// formatSecretName rewrites a value to be a valid Secret name.
|
|
//
|
|
// The Secret meta.name and data keys must be valid DNS subdomain names
|
|
// (https://kubernetes.io/docs/concepts/configuration/secret/#overview-of-secrets)
|
|
func FormatSecretName(value string) string {
|
|
if errs := kubeValidate.IsDNS1123Subdomain(value); len(errs) == 0 {
|
|
return value
|
|
}
|
|
return CreateValidSecretName(value)
|
|
}
|
|
|
|
func CreateValidSecretName(value string) string {
|
|
result := strings.ToLower(value)
|
|
result = invalidDNS1123Chars.ReplaceAllString(result, "-")
|
|
|
|
if len(result) > kubeValidate.DNS1123SubdomainMaxLength {
|
|
result = result[0:kubeValidate.DNS1123SubdomainMaxLength]
|
|
}
|
|
|
|
// first and last character MUST be alphanumeric
|
|
return strings.Trim(result, "-.")
|
|
}
|
|
|
|
func BuildInjectedOnePasswordItemName(vaultId, injectedId string) string {
|
|
return FormatSecretName(fmt.Sprintf("injectedsecret-%s-%s", vaultId, injectedId))
|
|
}
|