From cdc62c50c5afd6904dea41fed38c464e716c9327 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Sat, 30 Oct 2021 10:54:41 +0200 Subject: [PATCH] Initial version --- .drone.yml | 21 ++++++++++++++++++++ Dockerfile | 9 +++++++++ go.mod | 3 +++ main.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 .drone.yml create mode 100644 Dockerfile create mode 100644 go.mod create mode 100644 main.go diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..5cc4136 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,21 @@ +kind: pipeline +name: default +type: docker + +steps: + - name: publish + image: plugins/docker + settings: + username: nologin + password: + from_secret: docker_password + repo: rg.fr-par.scw.cloud/jlelse/proxyexposer + registry: rg.fr-par.scw.cloud/jlelse + tags: latest + mirror: https://mirror.gcr.io + +trigger: + branch: + - master + event: + - push \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ea6f4ad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM golang:1.17-alpine3.14 as build +WORKDIR /app +ADD *.go go.mod /app/ +RUN go build -ldflags '-w -s' -o proxyexposer + +FROM alpine:3.14 +WORKDIR /app +CMD ["proxyexposer"] +COPY --from=build /app/proxyexposer /bin/ \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..6753eb8 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.jlel.se/jlelse/ProxyExposer + +go 1.17 diff --git a/main.go b/main.go new file mode 100644 index 0000000..a33d6ff --- /dev/null +++ b/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" + "strconv" +) + +func main() { + + proxy := os.Getenv("PE_PROXY") + if proxy == "" { + log.Fatal("PE_PROXY not specified") + return + } + proxyUrl, err := url.Parse(proxy) + if err != nil { + log.Fatal(err.Error()) + return + } + + upstream := os.Getenv("PE_UPSTREAM") + if upstream == "" { + log.Fatal("PE_UPSTREAM not specified") + return + } + upstreamUrl, err := url.Parse(upstream) + if err != nil { + log.Fatal(err.Error()) + return + } + + portString := os.Getenv("PE_PORT") + if portString == "" { + log.Fatal("PE_PORT not specified") + return + } + + port, err := strconv.Atoi(portString) + if err != nil { + log.Fatal(err.Error()) + return + } + + rp := httputil.NewSingleHostReverseProxy(upstreamUrl) + rp.Transport = &http.Transport{ + Proxy: http.ProxyURL(proxyUrl), + } + err = http.ListenAndServe(":"+strconv.Itoa(port), rp) + if err != nil { + log.Fatal(err.Error()) + return + } + +}