// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package acl import "regexp" const ( ServiceIdentityNameMaxLength = 256 NodeIdentityNameMaxLength = 256 ) var ( validServiceIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) validNodeIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) validPolicyName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) validRoleName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,256}$`) validAuthMethodName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) ) // IsValidServiceIdentityName returns true if the provided name can be used as // an ACLServiceIdentity ServiceName. This is more restrictive than standard // catalog registration, which basically takes the view that "everything is // valid". func IsValidServiceIdentityName(name string) bool { if len(name) < 1 || len(name) > ServiceIdentityNameMaxLength { return false } return validServiceIdentityName.MatchString(name) } // IsValidNodeIdentityName returns true if the provided name can be used as // an ACLNodeIdentity NodeName. This is more restrictive than standard // catalog registration, which basically takes the view that "everything is // valid". func IsValidNodeIdentityName(name string) bool { if len(name) < 1 || len(name) > NodeIdentityNameMaxLength { return false } return validNodeIdentityName.MatchString(name) } // IsValidPolicyName returns true if the provided name can be used as an // ACLPolicy Name. func IsValidPolicyName(name string) bool { return validPolicyName.MatchString(name) } // IsValidRoleName returns true if the provided name can be used as an // ACLRole Name. func IsValidRoleName(name string) bool { return validRoleName.MatchString(name) } // IsValidRoleName returns true if the provided name can be used as an // ACLAuthMethod Name. func IsValidAuthMethodName(name string) bool { return validAuthMethodName.MatchString(name) }