This commit is contained in:
2022-05-17 01:56:44 +03:00
commit 3a9b8c8468
117 changed files with 7175 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
FROM golang:1.17 as go
COPY choose /choose
COPY rproxy /rproxy
RUN \
apt-get update && \
apt-get install -y upx-ucl && \
cd /choose && \
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" && \
upx /choose/choose && \
cd /rproxy && \
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" && \
upx /rproxy/rproxy
FROM ubuntu:18.04
COPY --from=go /choose/choose /usr/local/bin/
COPY --from=go /rproxy/rproxy /usr/local/bin/
RUN \
apt update && \
apt -y install xvfb x11-utils x11vnc tigervnc-common tigervnc-viewer
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
+16
View File
@@ -0,0 +1,16 @@
#browsers.json
```
"MicrosoftEdge": {
"default": "77",
"versions": {
"77": {
"image": "selenoid/external-host:1.0.0",
"port": "4444",
"path": "/",
"env": ["URLS=[\"http://172.17.0.1:4444/\"]","VNC_PASSWORD=longpassword","SCREEN_RESOLUTION=1921x1080x24"]
}
}
}
```
+30
View File
@@ -0,0 +1,30 @@
package main
import (
"os"
"time"
"fmt"
"encoding/json"
"math/rand"
)
var (
s rand.Source
r *rand.Rand
)
func init() {
s = rand.NewSource(time.Now().Unix())
r = rand.New(s)
}
func main() {
var hosts []string
if err := json.Unmarshal([]byte(os.Getenv("URLS")), &hosts); err != nil {
fmt.Printf("unmarshal json: %v", err)
os.Exit(1)
}
if l := len(hosts); l > 0 {
fmt.Println(hosts[r.Intn(l)])
}
}
+51
View File
@@ -0,0 +1,51 @@
#!/bin/bash
SCREEN_RESOLUTION=${SCREEN_RESOLUTION:-"1920x1080x24"}
DISPLAY_NUM=99
URLS=${URLS:-'["http://172.17.0.1:4444/"]'}
VNC_PASSWORD=${VNC_PASSWORD:-"password"}
export URLS
export VNC_PASSWORD
export DISPLAY=":$DISPLAY_NUM"
clean() {
if [ -n "$XVFB_PID" ]; then
kill -TERM "$XVFB_PID"
fi
if [ -n "$X11VNC_PID" ]; then
kill -TERM "$X11VNC_PID"
fi
if [ -n "$RPROXY_PID" ]; then
kill -TERM "$RPROXY_PID"
fi
}
trap clean SIGINT SIGTERM
URL=$(choose $URL)
HOST=$(echo $URL | sed -e 's@\(.*\)://@@' -e 's@[:/]\(.*\)$@@')
/bin/bash -c 'echo -e "$VNC_PASSWORD\n$VNC_PASSWORD\nn\n" | vncpasswd file.passwd'>/dev/null
xvfb-run -l -n $DISPLAY_NUM -s "-ac -screen 0 $SCREEN_RESOLUTION -noreset -listen tcp" \
vncviewer passwd=file.passwd $HOST &
XVFB_PID=$!
retcode=1
until [ $retcode -eq 0 ]; do
xdpyinfo -display $DISPLAY >/dev/null 2>&1
retcode=$?
if [ $retcode -ne 0 ]; then
echo Waiting xvfb...
sleep 1
fi
done
x11vnc -display $DISPLAY -passwd selenoid -shared -forever -loop500 -rfbport 5900 -rfbportv6 5900 -logfile /dev/null &
X11VNC_PID=$!
rproxy $URL &
RPROXY_PID=$!
wait
+17
View File
@@ -0,0 +1,17 @@
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
)
func main() {
u, err := url.Parse(os.Args[1])
if err != nil {
log.Fatalf("parse url: %v", err)
}
log.Fatal(http.ListenAndServe(":4444", httputil.NewSingleHostReverseProxy(u)))
}