providers/okta/helpers.go (55 lines of code) (raw):
// Copyright 2019 The Terraformer Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package okta
import (
"fmt"
"math/rand"
"regexp"
"strings"
)
// Making resource's name less ugly
func normalizeResourceName(s string) string {
specialChars := `<>()*#{}[]|@_ .%'",&`
for _, c := range specialChars {
s = strings.ReplaceAll(s, string(c), "-")
}
s = regexp.MustCompile(`^[^a-zA-Z_]+`).ReplaceAllLiteralString(s, "")
s = strings.TrimSuffix(s, "-")
return strings.ToLower(s)
}
func normalizeResourceNameWithRandom(s string, rand bool) string {
specialChars := `-<>()*#{}[]|@_ .%'",&`
for _, c := range specialChars {
s = strings.ReplaceAll(s, string(c), "_")
}
s = regexp.MustCompile(`^[^a-zA-Z_]+`).ReplaceAllLiteralString(s, "")
s = strings.TrimSuffix(s, "`_")
if rand {
randString := RandStringBytes(4)
return fmt.Sprintf("%s_%s", strings.ToLower(s), randString)
}
return strings.ToLower(s)
}
const letterBytes = "abcdefghijklmnopqrstuvwxyz0123456789"
func RandStringBytes(n int) string {
b := make([]byte, n)
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
return string(b)
}
// escapeDollar modifies ${ into $${ recursively
func escapeDollar(item map[string]interface{}) map[string]interface{} {
for k, f := range item {
switch v := f.(type) {
case string:
item[k] = strings.ReplaceAll(v, "${", "$${")
case map[string]interface{}:
item[k] = escapeDollar(v)
case []interface{}:
for i, s := range v {
if str, ok := s.(string); ok {
v[i] = strings.ReplaceAll(str, "${", "$${")
}
}
item[k] = v
}
}
return item
}