From 30ef1782e92b055ebb4dc30b0eebee2013e94132 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Thu, 8 Aug 2024 22:16:45 +0200 Subject: [PATCH] Initial commit --- deploy.sh | 1 + dockerfile | 21 ++++++++++++++ go.mod | 3 ++ main.go | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.log | 3 ++ 5 files changed, 108 insertions(+) create mode 100644 deploy.sh create mode 100644 dockerfile create mode 100644 go.mod create mode 100644 main.go create mode 100644 main.log diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..d0256a4 --- /dev/null +++ b/deploy.sh @@ -0,0 +1 @@ +docker build -t directory-forbidder . \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..5c514db --- /dev/null +++ b/dockerfile @@ -0,0 +1,21 @@ +FROM golang:1.22.4 as base + +WORKDIR $GOPATH/src/app/ + +COPY . . + +RUN go mod download +RUN go mod verify + +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /main . + +FROM scratch + +COPY --from=base /usr/share/zoneinfo /usr/share/zoneinfo +COPY --from=base /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=base /etc/passwd /etc/passwd +COPY --from=base /etc/group /etc/group + +COPY --from=base /main . + +CMD ["/main"] \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..9a9693e --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.22.4 diff --git a/main.go b/main.go new file mode 100644 index 0000000..8fbb604 --- /dev/null +++ b/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "flag" + "io" + "log" + "os" + "path" + "strings" + "time" +) + +const ( + Black = "\033[30m" + Red = "\033[31m" + Green = "\033[32m" + Yellow = "\033[33m" + Blue = "\033[34m" + Magenta = "\033[35m" + Cyan = "\033[36m" + White = "\033[37m" + Reset = "\033[0m" + PathColor = Magenta + ErrorColor = Red +) + +func init() { + log.SetFlags(log.Lmicroseconds | log.Lshortfile) + logFile, err := os.Create("main.log") + if err != nil { + log.Printf("Error creating log file: %v", err) + os.Exit(1) + } + logger := io.MultiWriter(os.Stdout, logFile) + log.SetOutput(logger) +} + +func main() { + wd := flag.String("wd", "", "working directory") + scanTimer := flag.Int("scan", 60, "scan interval in seconds") + flag.Parse() + + workdir := path.Clean(*wd) + forbidden := flag.Args() + envForbidden, ok := os.LookupEnv("FORBIDDEN") + if ok { + forbidden = append(forbidden, strings.Split(envForbidden, ",")...) + } + pathPrefix, ok := os.LookupEnv("PATH_PREFIX") + if ok { + workdir = path.Join(workdir, pathPrefix) + } + log.Printf("Working directory: %s%s%s", PathColor, workdir, Reset) + log.Printf("Forbidden files: %v", forbidden) + + ticker := time.NewTicker(time.Duration(*scanTimer) * time.Second) + for { + log.Printf("Running at %s", time.Now().Format(time.RFC3339)) + for _, f := range forbidden { + log.Printf("Checking file %s%s%s", PathColor, f, Reset) + f = strings.Trim(f, " ") + fullPath := path.Join(workdir, f) + fullPath = path.Clean(fullPath) + + _, err := os.Stat(fullPath) + if err != nil { + log.Printf("Error stating file %s%s%s: %s%v%s", PathColor, fullPath, Reset, ErrorColor, err, Reset) + continue + } + + log.Printf("Removing file %s%s%s", PathColor, fullPath, Reset) + err = os.RemoveAll(fullPath) + if err != nil { + log.Printf("Error removing file %s%s%s: %s%v%s", PathColor, fullPath, Reset, ErrorColor, err, Reset) + continue + } + } + <-ticker.C + } +} diff --git a/main.log b/main.log new file mode 100644 index 0000000..ff5f1a0 --- /dev/null +++ b/main.log @@ -0,0 +1,3 @@ +10:28:29.544933 main.go:53: Working directory: . +10:28:29.545433 main.go:54: Forbidden files: [] +10:28:29.545433 main.go:58: Running at 2024-07-05T10:28:29+02:00