From eafaf4823363609ab5488e7aa51802e6f2d37054 Mon Sep 17 00:00:00 2001 From: DutchEllie Date: Wed, 8 Sep 2021 22:19:05 +0200 Subject: [PATCH] pepe server --- pepeservice/Dockerfile | 13 +++++++++ pepeservice/go.mod | 3 ++ pepeservice/main.go | 64 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 pepeservice/Dockerfile create mode 100644 pepeservice/go.mod create mode 100644 pepeservice/main.go diff --git a/pepeservice/Dockerfile b/pepeservice/Dockerfile new file mode 100644 index 0000000..5093085 --- /dev/null +++ b/pepeservice/Dockerfile @@ -0,0 +1,13 @@ +# syntax=docker/dockerfile:1 +FROM golang:1.17 AS builder +WORKDIR /go/src/quenten.nl/pepeservice + +COPY . ./ +RUN go mod download +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app ./ + +FROM alpine:latest +RUN apk --no-cache add ca-certificates +WORKDIR /app +COPY --from=builder /go/src/quenten.nl/pepeservice/app . +CMD ["./app"] \ No newline at end of file diff --git a/pepeservice/go.mod b/pepeservice/go.mod new file mode 100644 index 0000000..c8229ad --- /dev/null +++ b/pepeservice/go.mod @@ -0,0 +1,3 @@ +module quenten.nl/pepeservice + +go 1.17 diff --git a/pepeservice/main.go b/pepeservice/main.go new file mode 100644 index 0000000..af19fdc --- /dev/null +++ b/pepeservice/main.go @@ -0,0 +1,64 @@ +package main + +import ( + "log" + "math/rand" + "net/http" + "os" + "time" +) + +type application struct { + errorLog *log.Logger + infoLog *log.Logger + + pepe_dir string +} + +func main() { + pepe_dir := os.Getenv("PEPE_DIR") + + infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) + errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) + + app := &application{ + infoLog: infoLog, + errorLog: errorLog, + pepe_dir: pepe_dir, + } + + mux := http.NewServeMux() + mux.HandleFunc("/pepe", app.sendPepe) + + app.infoLog.Printf("Starting server at :4000\n") + err := http.ListenAndServe(":4000", mux) + log.Fatal(err) + +} + +func (app *application) sendPepe(w http.ResponseWriter, r *http.Request) { + file, err := os.Open(app.pepe_dir) + if err != nil { + app.errorLog.Printf("Error opening pepe directory\n") + http.Error(w, "Internal Server Error", 500) + return + } + defer file.Close() + + names, err := file.Readdirnames(0) + if err != nil { + app.errorLog.Printf("Error reading pepe directory file names\n") + http.Error(w, "Internal Server Error", 500) + return + } + + // Random number generator + s := rand.NewSource(time.Now().UnixMicro()) + rd := rand.New(s) // Init pseudorandom generator + number := rd.Intn(len(names)) + + baseURL := "https://cdn.nicecock.eu/pepe/1.00/" + URL := baseURL + names[number] + + w.Write([]byte(URL)) +}