From b29cdf802d596b752ddd2c14ce40fdd0dd3f391c Mon Sep 17 00:00:00 2001 From: marcobaobao Date: Wed, 11 Jan 2023 12:41:20 +0100 Subject: [PATCH] pre frontend integration --- go.mod | 7 +++-- go.sum | 5 ++-- server/handlers.go | 68 ---------------------------------------------- server/process.go | 11 +++++++- 4 files changed, 16 insertions(+), 75 deletions(-) delete mode 100644 server/handlers.go diff --git a/go.mod b/go.mod index 838113d..e5d5f39 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,17 @@ module github.com/marcopeocchi/yt-dlp-web-ui go 1.19 require ( + github.com/goccy/go-json v0.10.0 github.com/gofiber/fiber/v2 v2.41.0 github.com/gofiber/websocket/v2 v2.1.2 + github.com/google/uuid v1.3.0 + github.com/marcopeocchi/fazzoletti v0.0.0-20221114144444-1e802380a7db + golang.org/x/sys v0.4.0 ) require ( github.com/andybalholm/brotli v1.0.4 // indirect github.com/fasthttp/websocket v1.5.0 // indirect - github.com/goccy/go-json v0.10.0 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/klauspost/compress v1.15.14 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.17 // indirect @@ -21,5 +23,4 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.43.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect - golang.org/x/sys v0.4.0 // indirect ) diff --git a/go.sum b/go.sum index 83c2916..5a88ba0 100644 --- a/go.sum +++ b/go.sum @@ -12,10 +12,11 @@ github.com/gofiber/websocket/v2 v2.1.2/go.mod h1:S+sKWo0xeC7Wnz5h4/8f6D/NxsrLFId github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/klauspost/compress v1.14.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.14 h1:i7WCKDToww0wA+9qrUZ1xOjp218vfFo3nTU6UHp+gOc= github.com/klauspost/compress v1.15.14/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/marcopeocchi/fazzoletti v0.0.0-20221114144444-1e802380a7db h1:SmKRgCLsImPxBTIzmUpbQyv+7FembiZaq/QTwtDqar4= +github.com/marcopeocchi/fazzoletti v0.0.0-20221114144444-1e802380a7db/go.mod h1:RvfVo/6Sbnfra9kkvIxDW8NYOOaYsHjF0DdtMCs9cdo= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -23,7 +24,6 @@ github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPn github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -48,7 +48,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/server/handlers.go b/server/handlers.go deleted file mode 100644 index acf5091..0000000 --- a/server/handlers.go +++ /dev/null @@ -1,68 +0,0 @@ -package server - -import ( - "log" - - "github.com/goccy/go-json" - "github.com/gofiber/websocket/v2" -) - -// Websocket handlers - -func download(c *websocket.Conn) { - req := DownloadRequest{} - c.ReadJSON(&req) - - p := Process{mem: &db, url: req.Url, params: req.Params} - p.Start() - - c.WriteJSON(req) -} - -func getFormats(c *websocket.Conn) { - log.Println("Requesting formats") - mtype, msg, _ := c.ReadMessage() - - req := DownloadRequest{} - json.Unmarshal(msg, &req) - - p := Process{mem: &db, url: req.Url} - p.GetFormatsSync() - - c.WriteMessage(mtype, msg) -} - -func status(c *websocket.Conn) { - mtype, _, _ := c.ReadMessage() - - all := db.All() - msg, _ := json.Marshal(all) - - c.WriteMessage(mtype, msg) -} - -func abort(c *websocket.Conn) { - mtype, msg, _ := c.ReadMessage() - - req := AbortRequest{} - json.Unmarshal(msg, &req) - - p := db.Get(req.Id) - p.Kill() - - c.WriteMessage(mtype, msg) -} - -func abortAll(c *websocket.Conn) { - keys := db.Keys() - for _, key := range keys { - proc := db.Get(key) - if proc != nil { - proc.Kill() - } - } -} - -func hotUpdate(c *websocket.Conn) { - -} diff --git a/server/process.go b/server/process.go index 0f92180..faab93b 100644 --- a/server/process.go +++ b/server/process.go @@ -2,6 +2,7 @@ package server import ( "bufio" + "regexp" "github.com/goccy/go-json" @@ -11,6 +12,7 @@ import ( "strings" "time" + "github.com/marcopeocchi/fazzoletti/slices" "github.com/marcopeocchi/yt-dlp-web-ui/server/rx" ) @@ -47,6 +49,13 @@ type Process struct { // This approach is anyhow not perfect: quotes are not escaped properly. // Each process is not identified by its PID but by a UUIDv2 func (p *Process) Start() { + // escape bash variable escaping and command piping, you'll never know + // what they might come with... + p.params = slices.Filter(p.params, func(e string) bool { + match, _ := regexp.MatchString(`(\$\{)|(\&\&)`, e) + return !match + }) + params := append([]string{ strings.Split(p.url, "?list")[0], //no playlist "--newline", @@ -87,7 +96,7 @@ func (p *Process) Start() { }() // --------------- progress block --------------- // - // unbuffered channe connected to stdout + // unbuffered channel connected to stdout eventChan := make(chan string) // spawn a goroutine that does the dirty job of parsing the stdout