From c0a156ac40a686c625d6e8b0a1c427b331086faa Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 24 Sep 2024 08:12:38 +1000 Subject: [PATCH 1/5] Update dependencies --- go.mod | 24 ++++++++++++------------ go.sum | 32 ++++++++++++++++++++++++++++++++ switchhost.go | 5 ++--- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index faeaf63..8f6c407 100644 --- a/go.mod +++ b/go.mod @@ -5,25 +5,25 @@ go 1.21 require ( github.com/jaffee/commandeer v0.6.0 github.com/justinas/alice v1.2.0 - github.com/klauspost/compress v1.17.2 - github.com/rivo/tview v0.0.0-20231102183219-1b91b8131c43 - github.com/rs/zerolog v1.31.0 + github.com/klauspost/compress v1.17.10 + github.com/rivo/tview v0.0.0-20240921122403-a64fc48d7654 + github.com/rs/zerolog v1.33.0 goftp.io/server/v2 v2.0.1 ) require ( - github.com/gdamore/encoding v1.0.0 // indirect - github.com/gdamore/tcell/v2 v2.6.0 // indirect + github.com/gdamore/encoding v1.0.1 // indirect + github.com/gdamore/tcell/v2 v2.7.4 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/rivo/uniseg v0.4.4 // indirect - github.com/rs/xid v1.5.0 // indirect - github.com/spf13/cobra v1.7.0 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rs/xid v1.6.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/term v0.24.0 // indirect + golang.org/x/text v0.18.0 // indirect ) diff --git a/go.sum b/go.sum index 33e503a..d5325cb 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,7 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -23,8 +24,12 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw= +github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo= github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU= +github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -61,6 +66,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -78,6 +85,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/minio/minio-go/v6 v6.0.46/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= @@ -100,15 +109,23 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rivo/tview v0.0.0-20231102183219-1b91b8131c43 h1:2b19kXs3HdZLq3yRRFnEGIbLrbh5FdewdpcJJFHebg4= github.com/rivo/tview v0.0.0-20231102183219-1b91b8131c43/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE= +github.com/rivo/tview v0.0.0-20240921122403-a64fc48d7654 h1:oa+fljZiaJUVyiT7WgIM3OhirtwBm0LJA97LvWUlBu8= +github.com/rivo/tview v0.0.0-20240921122403-a64fc48d7654/go.mod h1:02iFIz7K/A9jGCvrizLPvoqr4cEIx7q54RH5Qudkrss= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -121,6 +138,8 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -149,6 +168,7 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -159,12 +179,14 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -183,11 +205,17 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -195,6 +223,9 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -203,6 +234,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= diff --git a/switchhost.go b/switchhost.go index 51129ad..ec6d6e4 100644 --- a/switchhost.go +++ b/switchhost.go @@ -2,12 +2,12 @@ package main import ( "fmt" - "github.com/ralim/switchhost/versionsdb" "os" "os/signal" "path" "path/filepath" + "github.com/ralim/switchhost/versionsdb" "github.com/ralim/switchhost/library" "github.com/ralim/switchhost/server" "github.com/ralim/switchhost/settings" @@ -108,13 +108,12 @@ func (m *SwitchHost) checkKeys(pathUsed string) { } } } else { - log.Warn().Err(err).Msg("Failed to copy the prod.keys file,as could not make folder; nsz.py may not work") + log.Warn().Err(err).Msg("Failed to copy the prod.keys file, as could not make folder; nsz.py may not work") } } } func (m *SwitchHost) loadTitlesDB() { - if m.ui != nil { titlesDBInfo := m.ui.RegisterTask("TitlesDB") titlesDBInfo.UpdateStatus("Downloading") From acc160f64e40de0eb7b26e682313190fbfb15825 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 24 Sep 2024 18:19:28 +1000 Subject: [PATCH 2/5] Update nsz --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index d26f1b8..5bd811d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,13 +12,13 @@ RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /bin/switchhost # Now create the runtime container from python base for nsz -FROM python:3.12-slim-bookworm +FROM python:3-slim-bookworm WORKDIR /switchhost/ -RUN pip3 install nsz==4.5.0 && apt-get update && apt-get install -y curl && apt-get purge +RUN pip3 install nsz==4.6.1 && apt-get update && apt-get install -y curl && apt-get purge COPY --from=build /bin/switchhost ./switchhost # Run healthcheck against the web ui -HEALTHCHECK CMD curl --fail http://localhost:8080/healthcheck || exit 1 +HEALTHCHECK CMD curl --fail http://localhost:8080/healthcheck || exit 1 ENTRYPOINT ["/switchhost/switchhost", "--config","/data/config.json","--keys","/data/prod.keys","--noCUI"] From 8a06f6c3dce2192cdadf0cd7cea39998ed998407 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Oct 2024 20:14:08 +1100 Subject: [PATCH 3/5] Force vIndex path --- server/http_virtual_index.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/http_virtual_index.go b/server/http_virtual_index.go index 99fa2ae..12d1617 100644 --- a/server/http_virtual_index.go +++ b/server/http_virtual_index.go @@ -130,7 +130,7 @@ func (server *Server) renderHTTPGameIndex(respWriter http.ResponseWriter, req *h allTitles := server.library.FileIndex.ListTitleFiles() for _, file := range allTitles { fileFinalName := fmt.Sprintf("%s [%016X]", utilities.CleanName(file.Name), file.TitleID) - base := fmt.Sprintf("%d/", file.TitleID) + base := fmt.Sprintf("vIndex/%d/", file.TitleID) _, _ = respWriter.Write([]byte(fmt.Sprintf("
  • %s/
  • \n", base, fileFinalName))) } From b27ccfce2ce613739fd73b4761d7df050bf5251e Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Oct 2024 20:32:19 +1100 Subject: [PATCH 4/5] Use URL param for auth --- server/http.go | 22 +++++++++++++++++++++- server/http_virtual_index.go | 25 ++++++++++++++++++------- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/server/http.go b/server/http.go index 2419b8c..fab9381 100644 --- a/server/http.go +++ b/server/http.go @@ -2,6 +2,7 @@ package server import ( "crypto/subtle" + "encoding/base64" "errors" "fmt" "io" @@ -179,7 +180,26 @@ func (server *Server) checkAuth(req *http.Request) bool { } username, password, ok := req.BasicAuth() if !ok { - return false + // If the url contains a token as a query parameter, use that as the auth + token := req.URL.Query().Get("token") + if token != "" { + // Split the token into username and password by the first colon after base64 decoding + decoded, err := base64.StdEncoding.DecodeString(token) + if err != nil { + // Split decoded on the colon into username/password + // If there is no colon, return false + decoded_str := string(decoded) + split := strings.SplitN(decoded_str, ":", 2) + if len(split) != 2 { + return false + } + username = split[0] + password = split[1] + } + + } else { + return false + } } match := false diff --git a/server/http_virtual_index.go b/server/http_virtual_index.go index 12d1617..8fbfb51 100644 --- a/server/http_virtual_index.go +++ b/server/http_virtual_index.go @@ -1,16 +1,18 @@ package server import ( + "encoding/base64" "fmt" - "github.com/ralim/switchhost/index" - "github.com/ralim/switchhost/utilities" - "github.com/rs/zerolog/log" "io" "net/http" "os" "path" "strconv" "strings" + + "github.com/ralim/switchhost/index" + "github.com/ralim/switchhost/utilities" + "github.com/rs/zerolog/log" ) // Virtual HTTP index @@ -34,7 +36,7 @@ func (server *Server) httpHandleVirtualIndex(respWriter http.ResponseWriter, req return } if len(req.URL.Path) <= 1 { - server.renderHTTPGameFiles(baseTitleID, respWriter) + server.renderHTTPGameFiles(baseTitleID, respWriter, req) return } //Otherwise its a file request @@ -98,18 +100,27 @@ func (server *Server) serveHTTPGameFiles(titleID uint64, version uint32, respWri _, _ = io.Copy(respWriter, file) } } -func (server *Server) renderHTTPGameFiles(titleID uint64, respWriter http.ResponseWriter) { +func (server *Server) renderHTTPGameFiles(titleID uint64, respWriter http.ResponseWriter, req *http.Request) { _, _ = respWriter.Write([]byte("\n\n \n Index of /\n \n \n

    Index of /

    \n
      • Parent Directory
      • ")) records, ok := server.library.FileIndex.GetTitleRecords(titleID) + username, password, ok := req.BasicAuth() + if !ok { + if !server.settings.AllowAnonHTTP { + return + } + username = "" + password = "" + } + encodedAuthparam := base64.URLEncoding.EncodeToString([]byte(username + ":" + password)) if ok { writeFile := func(w http.ResponseWriter, file index.FileOnDiskRecord, fType string) { ext := path.Ext(file.Path) ext = strings.ToLower(ext) fileFinalName := fmt.Sprintf("%s - %s - [%d][v%d]", utilities.CleanName(file.Name), fType, file.TitleID, file.Version) - base := fmt.Sprintf("%d-%d%s", file.TitleID, file.Version, ext) + base := fmt.Sprintf("%d-%d%s?token=%s", file.TitleID, file.Version, ext, encodedAuthparam) - _, _ = respWriter.Write([]byte(fmt.Sprintf("
      • %s
      • \n", base, fileFinalName))) + _, _ = w.Write([]byte(fmt.Sprintf("
      • %s
      • \n", base, fileFinalName))) } if records.BaseTitle != nil { writeFile(respWriter, *records.BaseTitle, "Base") From 634eb008085c5786f979f583cc7caeb76bbe352c Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Oct 2024 20:40:40 +1100 Subject: [PATCH 5/5] cleanup --- server/http_virtual_index.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/server/http_virtual_index.go b/server/http_virtual_index.go index 8fbfb51..7ed8494 100644 --- a/server/http_virtual_index.go +++ b/server/http_virtual_index.go @@ -29,7 +29,7 @@ func (server *Server) httpHandleVirtualIndex(respWriter http.ResponseWriter, req log.Info().Str("path", req.URL.Path).Str("head", head).Msg("HTTP Request") if head == "" { - server.renderHTTPGameIndex(respWriter, req) + server.renderHTTPGameIndex(respWriter) } baseTitleID, err := strconv.ParseUint(head, 10, 64) if err != nil { @@ -103,14 +103,8 @@ func (server *Server) serveHTTPGameFiles(titleID uint64, version uint32, respWri func (server *Server) renderHTTPGameFiles(titleID uint64, respWriter http.ResponseWriter, req *http.Request) { _, _ = respWriter.Write([]byte("\n\n \n Index of /\n \n \n

        Index of /

        \n
          • Parent Directory
          • ")) records, ok := server.library.FileIndex.GetTitleRecords(titleID) - username, password, ok := req.BasicAuth() - if !ok { - if !server.settings.AllowAnonHTTP { - return - } - username = "" - password = "" - } + username, password, _ := req.BasicAuth() // If no auth, goes to "" which is fine + encodedAuthparam := base64.URLEncoding.EncodeToString([]byte(username + ":" + password)) if ok { @@ -136,7 +130,7 @@ func (server *Server) renderHTTPGameFiles(titleID uint64, respWriter http.Respon } _, _ = respWriter.Write([]byte("
          \n")) } -func (server *Server) renderHTTPGameIndex(respWriter http.ResponseWriter, req *http.Request) { +func (server *Server) renderHTTPGameIndex(respWriter http.ResponseWriter) { _, _ = respWriter.Write([]byte("\n\n \n Index of /\n \n \n

          Index of /

          \n
            • Parent Directory
            • ")) allTitles := server.library.FileIndex.ListTitleFiles() for _, file := range allTitles {