81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
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
|
|
}
|
|
}
|