Files
go-sam-go/utils.go

123 lines
2.6 KiB
Go
Raw Normal View History

2025-05-29 19:47:50 -04:00
package sam3
import (
"crypto/rand"
"math/big"
"os"
"strconv"
"strings"
"github.com/sirupsen/logrus"
)
// getEnv gets environment variable with fallback
func getEnv(key, fallback string) string {
if value := os.Getenv(key); value != "" {
return value
}
return fallback
}
// RandString generates a random string
func RandString() string {
const chars = "abcdefghijklmnopqrstuvwxyz"
result := make([]byte, 12)
for i := range result {
n, _ := rand.Int(rand.Reader, big.NewInt(int64(len(chars))))
result[i] = chars[n.Int64()]
}
return string(result)
}
// PrimarySessionString returns primary session string
func PrimarySessionString() string {
return "primary"
}
// SAMDefaultAddr returns default SAM address
func SAMDefaultAddr(fallforward string) string {
if fallforward != "" {
return fallforward
}
return SAM_HOST + ":" + SAM_PORT
}
// ExtractDest extracts destination from input
func ExtractDest(input string) string {
parts := strings.Fields(input)
for _, part := range parts {
if strings.HasPrefix(part, "DEST=") {
return part[5:]
}
}
return ""
}
// ExtractPairString extracts string value from key=value pair
func ExtractPairString(input, value string) string {
prefix := value + "="
parts := strings.Fields(input)
for _, part := range parts {
if strings.HasPrefix(part, prefix) {
return part[len(prefix):]
}
}
return ""
}
// ExtractPairInt extracts integer value from key=value pair
func ExtractPairInt(input, value string) int {
str := ExtractPairString(input, value)
if str == "" {
return 0
}
i, _ := strconv.Atoi(str)
return i
}
// GenerateOptionString generates option string from slice
func GenerateOptionString(opts []string) string {
return strings.Join(opts, " ")
}
// IgnorePortError ignores port-related errors
func IgnorePortError(err error) error {
if err != nil && strings.Contains(err.Error(), "port") {
return nil
}
return err
}
// Logging functions
var sam3Logger *logrus.Logger
// InitializeSAM3Logger initializes the logger
func InitializeSAM3Logger() {
sam3Logger = logrus.New()
sam3Logger.SetLevel(logrus.InfoLevel)
}
// GetSAM3Logger returns the initialized logger
func GetSAM3Logger() *logrus.Logger {
if sam3Logger == nil {
InitializeSAM3Logger()
}
return sam3Logger
}
// Additional utility functions that may be needed for compatibility
func ConvertOptionsToSlice(opts Options) []string {
return opts.AsList()
}
func ConvertSliceToOptions(slice []string) Options {
opts := make(Options)
for _, opt := range slice {
parts := strings.SplitN(opt, "=", 2)
if len(parts) == 2 {
opts[parts[0]] = parts[1]
}
}
return opts
}