Initial commit
This commit is contained in:
21
dockerfile
Normal file
21
dockerfile
Normal file
@@ -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"]
|
80
main.go
Normal file
80
main.go
Normal file
@@ -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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user