new backend changes
This commit is contained in:
106
new-backend/utils/utils.go
Normal file
106
new-backend/utils/utils.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// DockerAvailable checks if Docker is available on the system
|
||||
func DockerAvailable() bool {
|
||||
cmd := exec.Command("docker", "--version")
|
||||
if err := cmd.Run(); err != nil {
|
||||
log.Printf("Docker not available: %v", err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// PullDockerImage pulls a Docker image if it doesn't exist
|
||||
func PullDockerImage(image string) error {
|
||||
// Check if image exists
|
||||
checkCmd := exec.Command("docker", "image", "inspect", image)
|
||||
if err := checkCmd.Run(); err == nil {
|
||||
// Image exists
|
||||
return nil
|
||||
}
|
||||
|
||||
// Pull the image
|
||||
log.Printf("Pulling Docker image: %s", image)
|
||||
pullCmd := exec.Command("docker", "pull", image)
|
||||
pullCmd.Stdout = os.Stdout
|
||||
pullCmd.Stderr = os.Stderr
|
||||
return pullCmd.Run()
|
||||
}
|
||||
|
||||
// ExtractJavaClassName extracts the class name from Java code
|
||||
func ExtractJavaClassName(code string) string {
|
||||
// Default class name as fallback
|
||||
defaultClass := "Solution"
|
||||
|
||||
// Look for public class
|
||||
re := regexp.MustCompile(`public\s+class\s+(\w+)`)
|
||||
matches := re.FindStringSubmatch(code)
|
||||
if len(matches) > 1 {
|
||||
return matches[1]
|
||||
}
|
||||
|
||||
// Look for any class if no public class
|
||||
re = regexp.MustCompile(`class\s+(\w+)`)
|
||||
matches = re.FindStringSubmatch(code)
|
||||
if len(matches) > 1 {
|
||||
return matches[1]
|
||||
}
|
||||
|
||||
return defaultClass
|
||||
}
|
||||
|
||||
// IsInputPrompt determines if a string is likely an input prompt
|
||||
func IsInputPrompt(text string) bool {
|
||||
// Early exit for empty or very long text
|
||||
text = strings.TrimSpace(text)
|
||||
if text == "" || len(text) > 100 {
|
||||
return false
|
||||
}
|
||||
|
||||
// Common prompt endings
|
||||
if strings.HasSuffix(text, ":") || strings.HasSuffix(text, ">") ||
|
||||
strings.HasSuffix(text, "?") || strings.HasSuffix(text, "...") {
|
||||
return true
|
||||
}
|
||||
|
||||
// Common prompt words
|
||||
promptWords := []string{"input", "enter", "type", "provide"}
|
||||
for _, word := range promptWords {
|
||||
if strings.Contains(strings.ToLower(text), word) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// SanitizeDockerArgs ensures safe Docker command arguments
|
||||
func SanitizeDockerArgs(args []string) []string {
|
||||
// This is a simplified version - in production, you'd want more robust checks
|
||||
sanitized := make([]string, 0, len(args))
|
||||
|
||||
// Disallow certain dangerous flags
|
||||
dangerousFlags := map[string]bool{
|
||||
"--privileged": true,
|
||||
"--net=host": true,
|
||||
"--pid=host": true,
|
||||
"--ipc=host": true,
|
||||
"--userns=host": true,
|
||||
}
|
||||
|
||||
for _, arg := range args {
|
||||
if _, isDangerous := dangerousFlags[arg]; !isDangerous {
|
||||
sanitized = append(sanitized, arg)
|
||||
}
|
||||
}
|
||||
|
||||
return sanitized
|
||||
}
|
||||
Reference in New Issue
Block a user