Initial commit

This commit is contained in:
2024-08-08 22:16:45 +02:00
commit 30ef1782e9
5 changed files with 108 additions and 0 deletions

1
deploy.sh Normal file
View File

@@ -0,0 +1 @@
docker build -t directory-forbidder .

21
dockerfile Normal file
View 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"]

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module main
go 1.22.4

80
main.go Normal file
View 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
}
}

3
main.log Normal file
View File

@@ -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