- commit
- 4cef657
- parent
- 429d656
- author
- Antonio Mika
- date
- 2023-11-09 02:07:02 +0000 UTC
Merge pull request #50 from picosh/am/update-sftp Fixed issues with sftp file listing and downloading from minio
+18,
-2
1@@ -8,14 +8,24 @@ inputs:
2 required: true
3 platforms:
4 description: The docker platforms to build for
5- required: false
6+ required: true
7 default: |
8 linux/amd64
9 linux/arm64
10 registry:
11 description: The docker registry to use
12- required: false
13+ required: true
14 default: ghcr.io
15+ web:
16+ description: Whether or not to build the web image
17+ required: true
18+ default: true
19+ type: boolean
20+ ssh:
21+ description: Whether or not to build the ssh image
22+ required: true
23+ default: true
24+ type: boolean
25
26 runs:
27 using: composite
28@@ -31,6 +41,7 @@ runs:
29 with:
30 images: ${{ inputs.REGISTRY }}/${{ github.repository }}/${{ inputs.app }}-ssh
31 - name: Build and push web
32+ if: inputs.web == 'true'
33 uses: docker/build-push-action@v3
34 with:
35 context: .
36@@ -39,9 +50,12 @@ runs:
37 labels: ${{ steps.webmeta.outputs.labels }}
38 target: release-web
39 platforms: ${{ inputs.platforms }}
40+ cache-from: type=gha
41+ cache-to: type=gha,mode=max
42 build-args: |
43 APP=${{ inputs.app }}
44 - name: Build and push ssh
45+ if: inputs.ssh == 'true'
46 uses: docker/build-push-action@v3
47 with:
48 context: .
49@@ -50,5 +64,7 @@ runs:
50 labels: ${{ steps.sshmeta.outputs.labels }}
51 target: release-ssh
52 platforms: ${{ inputs.platforms }}
53+ cache-from: type=gha
54+ cache-to: type=gha,mode=max
55 build-args: |
56 APP=${{ inputs.app }}
+34,
-0
1@@ -0,0 +1,34 @@
2+name: Setup main action
3+
4+description: Runs the setup required for docker building
5+
6+inputs:
7+ registry:
8+ description: The docker registry to use
9+ required: true
10+ default: ghcr.io
11+ username:
12+ description: The docker registry to use
13+ required: true
14+ password:
15+ description: The docker registry to use
16+ required: true
17+
18+runs:
19+ using: composite
20+ steps:
21+ - name: Set up QEMU
22+ uses: docker/setup-qemu-action@v2
23+ with:
24+ platforms: all
25+ - name: Set up Docker Buildx
26+ id: buildx
27+ uses: docker/setup-buildx-action@v2
28+ with:
29+ version: latest
30+ - name: Login to Docker Hub
31+ uses: docker/login-action@v2
32+ with:
33+ registry: ${{ inputs.registry }}
34+ username: ${{ inputs.username }}
35+ password: ${{ inputs.password }}
+51,
-48
1@@ -39,86 +39,87 @@ jobs:
2 run: |
3 go test -v ./... -cover -race -coverprofile=coverage.out
4 go tool cover -func=coverage.out -o=coverage.out
5- build:
6+ build-main:
7 runs-on: ubuntu-22.04
8 needs: test
9+ strategy:
10+ matrix:
11+ APP: [lists, prose, pastes, imgs, pgs, feeds]
12 steps:
13 - name: Checkout repo
14 uses: actions/checkout@v3
15- - name: Set up QEMU
16- uses: docker/setup-qemu-action@v2
17- with:
18- platforms: all
19- - name: Set up Docker Buildx
20- id: buildx
21- uses: docker/setup-buildx-action@v2
22- with:
23- version: latest
24- - name: Login to Docker Hub
25- uses: docker/login-action@v2
26+ - name: Setup docker
27+ uses: ./.github/actions/setup
28 with:
29 registry: ${{ env.REGISTRY }}
30 username: ${{ github.actor }}
31 password: ${{ secrets.GITHUB_TOKEN }}
32- - name: Run docker build for lists
33+ - name: Run docker build for ${{ matrix.APP }}
34 uses: ./.github/actions/build
35 with:
36- app: lists
37+ app: ${{ matrix.APP }}
38 platforms: ${{ env.PLATFORMS }}
39 registry: ${{ env.REGISTRY }}
40- - name: Run docker build for prose
41- uses: ./.github/actions/build
42+ build-auth:
43+ runs-on: ubuntu-22.04
44+ needs: test
45+ steps:
46+ - name: Checkout repo
47+ uses: actions/checkout@v3
48+ - name: Setup docker
49+ uses: ./.github/actions/setup
50 with:
51- app: prose
52- platforms: ${{ env.PLATFORMS }}
53 registry: ${{ env.REGISTRY }}
54- - name: Run docker build for pastes
55+ username: ${{ github.actor }}
56+ password: ${{ secrets.GITHUB_TOKEN }}
57+ - name: Run docker build for auth
58 uses: ./.github/actions/build
59 with:
60- app: pastes
61+ app: auth
62 platforms: ${{ env.PLATFORMS }}
63 registry: ${{ env.REGISTRY }}
64- - name: Run docker build for imgs
65- uses: ./.github/actions/build
66+ ssh: false
67+ build-bouncer:
68+ runs-on: ubuntu-22.04
69+ needs: test
70+ steps:
71+ - name: Checkout repo
72+ uses: actions/checkout@v3
73+ - name: Setup docker
74+ uses: ./.github/actions/setup
75 with:
76- app: imgs
77- platforms: ${{ env.PLATFORMS }}
78 registry: ${{ env.REGISTRY }}
79- - name: Run docker build for pgs
80- uses: ./.github/actions/build
81+ username: ${{ github.actor }}
82+ password: ${{ secrets.GITHUB_TOKEN }}
83+ - name: Collect bouncer image metadata
84+ id: bouncermeta
85+ uses: docker/metadata-action@v4
86 with:
87- app: pgs
88- platforms: ${{ env.PLATFORMS }}
89- registry: ${{ env.REGISTRY }}
90- - name: Run docker build for feeds
91- uses: ./.github/actions/build
92+ images: ${{ env.REGISTRY }}/${{ github.repository }}/bouncer
93+ - name: Build and push
94+ uses: docker/build-push-action@v3
95 with:
96- app: feeds
97+ context: ./bouncer
98+ push: true
99+ tags: ${{ steps.bouncermeta.outputs.tags }}
100+ labels: ${{ steps.bouncermeta.outputs.labels }}
101 platforms: ${{ env.PLATFORMS }}
102- registry: ${{ env.REGISTRY }}
103+ cache-from: type=gha
104+ cache-to: type=gha,mode=max
105 build-caddy:
106 runs-on: ubuntu-22.04
107 needs: test
108 steps:
109 - name: Checkout repo
110 uses: actions/checkout@v3
111- - name: Set up QEMU
112- uses: docker/setup-qemu-action@v2
113- with:
114- platforms: all
115- - name: Set up Docker Buildx
116- id: buildx
117- uses: docker/setup-buildx-action@v2
118- with:
119- version: latest
120- - name: Login to Docker Hub
121- uses: docker/login-action@v2
122+ - name: Setup docker
123+ uses: ./.github/actions/setup
124 with:
125 registry: ${{ env.REGISTRY }}
126 username: ${{ github.actor }}
127 password: ${{ secrets.GITHUB_TOKEN }}
128- - name: Collect image metadata
129- id: meta
130+ - name: Collect caddy image metadata
131+ id: caddymeta
132 uses: docker/metadata-action@v4
133 with:
134 images: ${{ env.REGISTRY }}/${{ github.repository }}/caddy
135@@ -127,6 +128,8 @@ jobs:
136 with:
137 context: ./caddy
138 push: true
139- tags: ${{ steps.meta.outputs.tags }}
140- labels: ${{ steps.meta.outputs.labels }}
141+ tags: ${{ steps.caddymeta.outputs.tags }}
142+ labels: ${{ steps.caddymeta.outputs.labels }}
143 platforms: ${{ env.PLATFORMS }}
144+ cache-from: type=gha
145+ cache-to: type=gha,mode=max
M
Makefile
+2,
-2
1@@ -30,7 +30,7 @@ bp-setup:
2 .PHONY: bp-setup
3
4 bp-caddy: bp-setup
5- $(DOCKER_BUILDX_BUILD) -t ghcr.io/picosh/pico/caddy:$(DOCKER_TAG) -f caddy/Dockerfile .
6+ $(DOCKER_BUILDX_BUILD) -t ghcr.io/picosh/pico/caddy:$(DOCKER_TAG) ./caddy
7 .PHONY: bp-caddy
8
9 bp-auth: bp-setup
10@@ -38,7 +38,7 @@ bp-auth: bp-setup
11 .PHONY: bp-auth
12
13 bp-bouncer: bp-setup
14- $(DOCKER_BUILDX_BUILD) -t ghcr.io/picosh/pico/bouncer:$(DOCKER_TAG) -f bouncer/Dockerfile ./bouncer
15+ $(DOCKER_BUILDX_BUILD) -t ghcr.io/picosh/pico/bouncer:$(DOCKER_TAG) ./bouncer
16 .PHONY: bp-bouncer
17
18 bp-%: bp-setup
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 "github.com/picosh/pico/feeds"
12 "github.com/picosh/pico/filehandlers"
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 uploadimgs "github.com/picosh/pico/filehandlers/imgs"
12 "github.com/picosh/pico/imgs"
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 "github.com/picosh/pico/filehandlers"
12 "github.com/picosh/pico/lists"
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 "github.com/picosh/pico/filehandlers"
12 "github.com/picosh/pico/prose"
+5,
-3
1@@ -9,7 +9,7 @@ import (
2 "strings"
3 "time"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/db"
8 "github.com/picosh/pico/shared"
9 "github.com/picosh/pico/shared/storage"
10@@ -82,7 +82,7 @@ func (h *UploadAssetHandler) Read(s ssh.Session, entry *utils.FileEntry) (os.Fil
11 fileInfo := &utils.VirtualFile{
12 FName: filepath.Base(entry.Filepath),
13 FIsDir: false,
14- FSize: int64(entry.Size),
15+ FSize: entry.Size,
16 FModTime: time.Unix(entry.Mtime, 0),
17 }
18
19@@ -97,7 +97,9 @@ func (h *UploadAssetHandler) Read(s ssh.Session, entry *utils.FileEntry) (os.Fil
20 return nil, nil, err
21 }
22
23- return fileInfo, contents, nil
24+ reader := utils.NewAllReaderAt(contents)
25+
26+ return fileInfo, reader, nil
27 }
28
29 func (h *UploadAssetHandler) List(s ssh.Session, fpath string) ([]os.FileInfo, error) {
+4,
-2
1@@ -9,7 +9,7 @@ import (
2 "path/filepath"
3 "time"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 exifremove "github.com/neurosnap/go-exif-remove"
8 "github.com/picosh/pico/db"
9 "github.com/picosh/pico/shared"
10@@ -106,7 +106,9 @@ func (h *UploadImgHandler) Read(s ssh.Session, entry *utils.FileEntry) (os.FileI
11 return nil, nil, err
12 }
13
14- return fileInfo, contents, nil
15+ reader := utils.NewAllReaderAt(contents)
16+
17+ return fileInfo, reader, nil
18 }
19
20 func (h *UploadImgHandler) List(s ssh.Session, fpath string) ([]os.FileInfo, error) {
+1,
-1
1@@ -6,7 +6,7 @@ import (
2 "fmt"
3 "strings"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/db"
8 "github.com/picosh/pico/shared"
9 "github.com/picosh/pico/shared/storage"
+4,
-2
1@@ -10,7 +10,7 @@ import (
2 "strings"
3 "time"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/db"
8 "github.com/picosh/pico/imgs"
9 "github.com/picosh/pico/shared"
10@@ -84,7 +84,9 @@ func (h *ScpUploadHandler) Read(s ssh.Session, entry *utils.FileEntry) (os.FileI
11 FModTime: *post.UpdatedAt,
12 }
13
14- return fileInfo, strings.NewReader(post.Text), nil
15+ reader := strings.NewReader(post.Text)
16+
17+ return fileInfo, reader, nil
18 }
19
20 func (h *ScpUploadHandler) List(s ssh.Session, fpath string) ([]os.FileInfo, error) {
M
go.mod
+71,
-68
1@@ -6,113 +6,116 @@ require (
2 github.com/alecthomas/chroma v0.10.0
3 github.com/antoniomika/go-rsync-receiver v0.0.0-20220901010427-e6494124f0c8
4 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
5- github.com/charmbracelet/bubbles v0.14.0
6- github.com/charmbracelet/bubbletea v0.23.1
7- github.com/charmbracelet/lipgloss v0.6.0
8- github.com/charmbracelet/promwish v0.3.0
9- github.com/charmbracelet/wish v0.7.0
10+ github.com/charmbracelet/bubbles v0.16.1
11+ github.com/charmbracelet/bubbletea v0.24.2
12+ github.com/charmbracelet/lipgloss v0.9.1
13+ github.com/charmbracelet/promwish v0.7.0
14+ github.com/charmbracelet/ssh v0.0.0-20230822194956-1a051f898e09
15+ github.com/charmbracelet/wish v1.2.0
16 github.com/disintegration/imaging v1.6.2
17- github.com/gliderlabs/ssh v0.3.5
18- github.com/google/go-cmp v0.5.9
19- github.com/gorilla/feeds v1.1.1
20+ github.com/google/go-cmp v0.6.0
21+ github.com/gorilla/feeds v1.1.2
22 github.com/kolesa-team/go-webp v1.0.4
23- github.com/lib/pq v1.10.7
24- github.com/matryer/is v1.4.0
25- github.com/microcosm-cc/bluemonday v1.0.21
26- github.com/minio/madmin-go/v3 v3.0.5
27- github.com/minio/minio-go/v7 v7.0.49
28- github.com/mmcdole/gofeed v1.1.3
29+ github.com/lib/pq v1.10.9
30+ github.com/matryer/is v1.4.1
31+ github.com/microcosm-cc/bluemonday v1.0.26
32+ github.com/minio/madmin-go/v3 v3.0.29
33+ github.com/minio/minio-go/v7 v7.0.63
34+ github.com/mmcdole/gofeed v1.2.1
35 github.com/muesli/reflow v0.3.0
36 github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577
37 github.com/patrickmn/go-cache v2.1.0+incompatible
38- github.com/pkg/sftp v1.13.5
39- github.com/sendgrid/sendgrid-go v3.12.0+incompatible
40- github.com/yuin/goldmark v1.5.3
41+ github.com/pkg/sftp v1.13.6
42+ github.com/sendgrid/sendgrid-go v3.13.0+incompatible
43+ github.com/yuin/goldmark v1.6.0
44 github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594
45 github.com/yuin/goldmark-meta v1.1.0
46 go.abhg.dev/goldmark/anchor v0.1.1
47- go.uber.org/zap v1.24.0
48- golang.org/x/crypto v0.6.0
49- golang.org/x/exp v0.0.0-20221211140036-ad323defaf05
50+ go.uber.org/zap v1.26.0
51+ golang.org/x/crypto v0.15.0
52+ golang.org/x/exp v0.0.0-20231006140011-7918f672742d
53 gopkg.in/yaml.v2 v2.4.0
54 )
55
56 require (
57- github.com/DavidGamba/go-getoptions v0.26.0 // indirect
58- github.com/PuerkitoBio/goquery v1.5.1 // indirect
59- github.com/andybalholm/cascadia v1.1.0 // indirect
60+ github.com/DavidGamba/go-getoptions v0.29.0 // indirect
61+ github.com/PuerkitoBio/goquery v1.8.1 // indirect
62+ github.com/andybalholm/cascadia v1.3.2 // indirect
63 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
64 github.com/atotto/clipboard v0.1.4 // indirect
65- github.com/aymanbagabas/go-osc52 v1.2.1 // indirect
66+ github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
67 github.com/aymerick/douceur v0.2.0 // indirect
68 github.com/beorn7/perks v1.0.1 // indirect
69- github.com/caarlos0/sshmarshal v0.1.0 // indirect
70 github.com/cespare/xxhash/v2 v2.2.0 // indirect
71- github.com/charmbracelet/keygen v0.3.0 // indirect
72- github.com/containerd/console v1.0.3 // indirect
73- github.com/dlclark/regexp2 v1.7.0 // indirect
74- github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85 // indirect
75- github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85 // indirect
76+ github.com/charmbracelet/keygen v0.5.0 // indirect
77+ github.com/charmbracelet/log v0.3.0 // indirect
78+ github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
79+ github.com/dlclark/regexp2 v1.10.0 // indirect
80+ github.com/dsoprea/go-exif v0.0.0-20230826092837-6579e82b732d // indirect
81+ github.com/dsoprea/go-exif/v2 v2.0.0-20230826092837-6579e82b732d // indirect
82 github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413 // indirect
83 github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect
84 github.com/dsoprea/go-photoshop-info-format v0.0.0-20200610045659-121dd752914d // indirect
85 github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d // indirect
86 github.com/dsoprea/go-utility v0.0.0-20221003172846-a3e1774ef349 // indirect
87 github.com/dustin/go-humanize v1.0.1 // indirect
88- github.com/go-errors/errors v1.4.2 // indirect
89- github.com/go-ole/go-ole v1.2.6 // indirect
90+ github.com/go-errors/errors v1.5.1 // indirect
91+ github.com/go-logfmt/logfmt v0.6.0 // indirect
92+ github.com/go-ole/go-ole v1.3.0 // indirect
93 github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
94- github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect
95- github.com/golang/protobuf v1.5.2 // indirect
96+ github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
97+ github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect
98+ github.com/golang/protobuf v1.5.3 // indirect
99 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
100- github.com/google/uuid v1.3.0 // indirect
101- github.com/gorilla/css v1.0.0 // indirect
102+ github.com/google/uuid v1.4.0 // indirect
103+ github.com/gorilla/css v1.0.1 // indirect
104 github.com/json-iterator/go v1.1.12 // indirect
105- github.com/klauspost/compress v1.15.15 // indirect
106- github.com/klauspost/cpuid/v2 v2.2.4 // indirect
107+ github.com/klauspost/compress v1.17.2 // indirect
108+ github.com/klauspost/cpuid/v2 v2.2.6 // indirect
109 github.com/kr/fs v0.1.0 // indirect
110- github.com/kr/pretty v0.3.0 // indirect
111 github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
112- github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect
113- github.com/mattn/go-isatty v0.0.16 // indirect
114+ github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed // indirect
115+ github.com/mattn/go-isatty v0.0.20 // indirect
116 github.com/mattn/go-localereader v0.0.1 // indirect
117- github.com/mattn/go-runewidth v0.0.14 // indirect
118+ github.com/mattn/go-runewidth v0.0.15 // indirect
119 github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
120+ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
121 github.com/minio/md5-simd v1.1.2 // indirect
122- github.com/minio/sha256-simd v1.0.0 // indirect
123- github.com/mitchellh/go-homedir v1.1.0 // indirect
124- github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf // indirect
125+ github.com/minio/sha256-simd v1.0.1 // indirect
126+ github.com/mmcdole/goxpp v1.1.0 // indirect
127 github.com/mmcloughlin/md4 v0.1.2 // indirect
128 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
129 github.com/modern-go/reflect2 v1.0.2 // indirect
130- github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a // indirect
131+ github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
132 github.com/muesli/cancelreader v0.2.2 // indirect
133- github.com/muesli/termenv v0.13.0 // indirect
134+ github.com/muesli/termenv v0.15.2 // indirect
135 github.com/neurosnap/go-jpeg-image-structure v0.0.0-20221010133817-70b1c1ff679e // indirect
136 github.com/philhofer/fwd v1.1.2 // indirect
137 github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
138- github.com/prometheus/client_golang v1.14.0 // indirect
139- github.com/prometheus/client_model v0.3.0 // indirect
140- github.com/prometheus/common v0.38.0 // indirect
141- github.com/prometheus/procfs v0.9.0 // indirect
142- github.com/rivo/uniseg v0.4.3 // indirect
143- github.com/rs/xid v1.4.0 // indirect
144+ github.com/prometheus/client_golang v1.17.0 // indirect
145+ github.com/prometheus/client_model v0.5.0 // indirect
146+ github.com/prometheus/common v0.45.0 // indirect
147+ github.com/prometheus/procfs v0.12.0 // indirect
148+ github.com/prometheus/prom2json v1.3.3 // indirect
149+ github.com/rivo/uniseg v0.4.4 // indirect
150+ github.com/rs/xid v1.5.0 // indirect
151+ github.com/safchain/ethtool v0.3.0 // indirect
152 github.com/secure-io/sio-go v0.3.1 // indirect
153 github.com/sendgrid/rest v2.6.9+incompatible // indirect
154- github.com/shirou/gopsutil/v3 v3.23.1 // indirect
155- github.com/sirupsen/logrus v1.9.0 // indirect
156- github.com/tinylib/msgp v1.1.8 // indirect
157- github.com/tklauser/go-sysconf v0.3.11 // indirect
158- github.com/tklauser/numcpus v0.6.0 // indirect
159- github.com/yusufpapurcu/wmi v1.2.2 // indirect
160- go.uber.org/atomic v1.10.0 // indirect
161- go.uber.org/multierr v1.8.0 // indirect
162- golang.org/x/image v0.2.0 // indirect
163- golang.org/x/net v0.7.0 // indirect
164- golang.org/x/sync v0.1.0 // indirect
165- golang.org/x/sys v0.5.0 // indirect
166- golang.org/x/term v0.5.0 // indirect
167- golang.org/x/text v0.7.0 // indirect
168- google.golang.org/protobuf v1.28.1 // indirect
169+ github.com/shirou/gopsutil/v3 v3.23.10 // indirect
170+ github.com/shoenig/go-m1cpu v0.1.6 // indirect
171+ github.com/sirupsen/logrus v1.9.3 // indirect
172+ github.com/tinylib/msgp v1.1.9 // indirect
173+ github.com/tklauser/go-sysconf v0.3.12 // indirect
174+ github.com/tklauser/numcpus v0.6.1 // indirect
175+ github.com/yusufpapurcu/wmi v1.2.3 // indirect
176+ go.uber.org/multierr v1.11.0 // indirect
177+ golang.org/x/image v0.14.0 // indirect
178+ golang.org/x/net v0.18.0 // indirect
179+ golang.org/x/sync v0.5.0 // indirect
180+ golang.org/x/sys v0.14.0 // indirect
181+ golang.org/x/term v0.14.0 // indirect
182+ golang.org/x/text v0.14.0 // indirect
183+ google.golang.org/protobuf v1.31.0 // indirect
184 gopkg.in/ini.v1 v1.67.0 // indirect
185 )
M
go.sum
+170,
-194
1@@ -1,12 +1,12 @@
2-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3-github.com/DavidGamba/go-getoptions v0.26.0 h1:3Hy0o6xTYs9icM5uPNqqck5PyZm5lZWRIDH/n5SV2uw=
4-github.com/DavidGamba/go-getoptions v0.26.0/go.mod h1:qLaLSYeQ8sUVOfKuu5JT5qKKS3OCwyhkYSJnoG+ggmo=
5-github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE=
6-github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
7+github.com/DavidGamba/go-getoptions v0.29.0 h1:cU8MjOyfAyPZke4hrgEuiGBJHS9PFYPAHve2fhDhdDk=
8+github.com/DavidGamba/go-getoptions v0.29.0/go.mod h1:zE97E3PR9P3BI/HKyNYgdMlYxodcuiC6W68KIgeYT84=
9+github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
10+github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
11 github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
12 github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
13-github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
14-github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
15+github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
16+github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
17+github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
18 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
19 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
20 github.com/antoniomika/go-rsync-receiver v0.0.0-20220901010427-e6494124f0c8 h1:gR27C6N8s5b+ciBRymi0zhUx8TylKFO755z6yrBuMiI=
21@@ -15,52 +15,46 @@ github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhP
22 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
23 github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
24 github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
25-github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4=
26-github.com/aymanbagabas/go-osc52 v1.2.1 h1:q2sWUyDcozPLcLabEMd+a+7Ea2DitxZVN9hTxab9L4E=
27-github.com/aymanbagabas/go-osc52 v1.2.1/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4=
28+github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
29+github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
30 github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
31 github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
32-github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
33-github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
34 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
35 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
36-github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I=
37-github.com/caarlos0/sshmarshal v0.1.0/go.mod h1:7Pd/0mmq9x/JCzKauogNjSQEhivBclCQHfr9dlpDIyA=
38 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
39 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
40-github.com/charmbracelet/bubbles v0.14.0 h1:DJfCwnARfWjZLvMglhSQzo76UZ2gucuHPy9jLWX45Og=
41-github.com/charmbracelet/bubbles v0.14.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc=
42-github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4=
43-github.com/charmbracelet/bubbletea v0.23.1 h1:CYdteX1wCiCzKNUlwm25ZHBIc1GXlYFyUIte8WPvhck=
44-github.com/charmbracelet/bubbletea v0.23.1/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU=
45-github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
46-github.com/charmbracelet/keygen v0.3.0 h1:mXpsQcH7DDlST5TddmXNXjS0L7ECk4/kLQYyBcsan2Y=
47-github.com/charmbracelet/keygen v0.3.0/go.mod h1:1ukgO8806O25lUZ5s0IrNur+RlwTBERlezdgW71F5rM=
48-github.com/charmbracelet/lipgloss v0.5.0/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs=
49-github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY=
50-github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk=
51-github.com/charmbracelet/promwish v0.3.0 h1:qRIwx1GgPwIXanf868lEPZ4pQ6NT0ltaZJw+lkiok20=
52-github.com/charmbracelet/promwish v0.3.0/go.mod h1:Qxm2h8DDuCR4SLoOM4+O1O67gKCsM5GovAHT7makJvU=
53-github.com/charmbracelet/wish v0.7.0 h1:rdfacCWaKCQpCMPbOKfi68GYqsb+9CnUzN1Ov/INZJ0=
54-github.com/charmbracelet/wish v0.7.0/go.mod h1:16EQz7k3hEgPkPENghcpEddvlrmucIudE0jnczKr+k4=
55-github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
56-github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
57-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
58-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
59+github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY=
60+github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc=
61+github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
62+github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg=
63+github.com/charmbracelet/keygen v0.5.0 h1:XY0fsoYiCSM9axkrU+2ziE6u6YjJulo/b9Dghnw6MZc=
64+github.com/charmbracelet/keygen v0.5.0/go.mod h1:DfvCgLHxZ9rJxdK0DGw3C/LkV4SgdGbnliHcObV3L+8=
65+github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg=
66+github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I=
67+github.com/charmbracelet/log v0.3.0 h1:u5aB2KJDgNZo4WOfOC8C+KvGIkJ2rCFNlPWDu6xhnqI=
68+github.com/charmbracelet/log v0.3.0/go.mod h1:OR4E1hutLsax3ZKpXbgUqPtTjQfrh1pG3zwHGWuuq8g=
69+github.com/charmbracelet/promwish v0.7.0 h1:oaMH+ey6W4DDIv1xucS8jL1ik/Q46qxjNXlh6XxEm+s=
70+github.com/charmbracelet/promwish v0.7.0/go.mod h1:WbRJN9irg8LmsBU8G2rFF8md9O3rSg63qrnqquP/+cs=
71+github.com/charmbracelet/ssh v0.0.0-20230822194956-1a051f898e09 h1:ZDIQmTtohv0S/AAYE//w8mYTxCzqphhF1+4ACPDMiLU=
72+github.com/charmbracelet/ssh v0.0.0-20230822194956-1a051f898e09/go.mod h1:F1vgddWsb/Yr/OZilFeRZEh5sE/qU0Dt1mKkmke6Zvg=
73+github.com/charmbracelet/wish v1.2.0 h1:h5Wj9pr97IQz/l4gM5Xep2lXcY/YM+6O2RC2o3x0JIQ=
74+github.com/charmbracelet/wish v1.2.0/go.mod h1:JX3fC+178xadJYAhPu6qWtVDpJTwpnFvpdjz9RKJlUE=
75+github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY=
76+github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
77 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
78 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
79 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
80 github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
81 github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
82 github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
83-github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
84-github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
85-github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85 h1:+wKSjK8wh5Ybb63Fx1QvTSIfWU/n1nmqEzZy+82pqbQ=
86-github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85/go.mod h1:lOaOt7+UEppOgyvRy749v3do836U/hw0YVJNjoyPaEs=
87+github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0=
88+github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
89+github.com/dsoprea/go-exif v0.0.0-20230826092837-6579e82b732d h1:ygcRCGNKuEiA98k7X35hknEN8RIRUF1jrz7k1rZCvsk=
90+github.com/dsoprea/go-exif v0.0.0-20230826092837-6579e82b732d/go.mod h1:lOaOt7+UEppOgyvRy749v3do836U/hw0YVJNjoyPaEs=
91 github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E=
92 github.com/dsoprea/go-exif/v2 v2.0.0-20200604193436-ca8584a0e1c4/go.mod h1:9EXlPeHfblFFnwu5UOqmP2eoZfJyAZ2Ri/Vki33ajO0=
93-github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85 h1:sgMOHQHMiddteUitH9QYgaRTwAcqqr5X9z5j4yNXDuY=
94-github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85/go.mod h1:oKrjk2kb3rAR5NbtSTLUMvMSbc+k8ZosI3MaVH47noc=
95+github.com/dsoprea/go-exif/v2 v2.0.0-20230826092837-6579e82b732d h1:yeH8wrJa3+8uKKDAdURHUK1ds2UvKhMqX2MiOdVeKPs=
96+github.com/dsoprea/go-exif/v2 v2.0.0-20230826092837-6579e82b732d/go.mod h1:oKrjk2kb3rAR5NbtSTLUMvMSbc+k8ZosI3MaVH47noc=
97 github.com/dsoprea/go-exif/v3 v3.0.0-20200717053412-08f1b6708903/go.mod h1:0nsO1ce0mh5czxGeLo4+OCZ/C6Eo6ZlMWsz7rH/Gxv8=
98 github.com/dsoprea/go-exif/v3 v3.0.0-20210512043655-120bcdb2a55e/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk=
99 github.com/dsoprea/go-iptc v0.0.0-20200609062250-162ae6b44feb/go.mod h1:kYIdx9N9NaOyD7U6D+YtExN7QhRm+5kq7//yOsRXQtM=
100@@ -81,120 +75,109 @@ github.com/dsoprea/go-utility v0.0.0-20221003172846-a3e1774ef349/go.mod h1:KVK+/
101 github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e/go.mod h1:uAzdkPTub5Y9yQwXe8W4m2XuP0tK4a9Q/dantD0+uaU=
102 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
103 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
104-github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
105-github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
106 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
107 github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
108 github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
109-github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
110-github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
111-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
112+github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
113+github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
114+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
115+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
116 github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
117+github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
118+github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
119 github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
120 github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U=
121 github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
122+github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
123+github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
124 github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
125 github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
126-github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 h1:gtexQ/VGyN+VVFRXSFiguSNcXmS6rkKT+X7FdIrTtfo=
127-github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
128+github.com/golang/geo v0.0.0-20230421003525-6adc56603217 h1:HKlyj6in2JV6wVkmQ4XmG/EIm+SCYlPZ+V4GWit7Z+I=
129+github.com/golang/geo v0.0.0-20230421003525-6adc56603217/go.mod h1:8wI0hitZ3a1IxZfeH3/5I97CI8i5cLGsYe7xNhQGs9U=
130 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
131-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
132 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
133-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
134-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
135+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
136+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
137 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
138 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
139-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
140 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
141+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
142+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
143 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
144 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
145 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
146-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
147-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
148-github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
149-github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
150-github.com/gorilla/feeds v1.1.1 h1:HwKXxqzcRNg9to+BbvJog4+f3s/xzvtZXICcQGutYfY=
151-github.com/gorilla/feeds v1.1.1/go.mod h1:Nk0jZrvPFZX1OBe5NPiddPw7CfwF6Q9eqzaBbaightA=
152+github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
153+github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
154+github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
155+github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
156+github.com/gorilla/feeds v1.1.2 h1:pxzZ5PD3RJdhFH2FsJJ4x6PqMqbgFk1+Vez4XWBW8Iw=
157+github.com/gorilla/feeds v1.1.2/go.mod h1:WMib8uJP3BbY+X8Szd1rA5Pzhdfh+HCCAYT2z7Fza6Y=
158 github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
159-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
160 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
161 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
162-github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw=
163-github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
164+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
165+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
166 github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
167-github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
168-github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
169-github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
170+github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
171+github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
172 github.com/kolesa-team/go-webp v1.0.4 h1:wQvU4PLG/X7RS0vAeyhiivhLRoxfLVRlDq4I3frdxIQ=
173 github.com/kolesa-team/go-webp v1.0.4/go.mod h1:oMvdivD6K+Q5qIIkVC2w4k2ZUnI1H+MyP7inwgWq9aA=
174 github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
175 github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
176-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
177-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
178-github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
179-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
180-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
181+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
182+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
183 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
184 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
185-github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
186-github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
187-github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
188+github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
189+github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
190 github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
191 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
192 github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
193-github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de h1:V53FWzU6KAZVi1tPp5UIsMoUWJ2/PNwYIDXnu7QuBCE=
194-github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
195-github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
196-github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
197-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
198-github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
199-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
200+github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed h1:036IscGBfJsFIgJQzlui7nK1Ncm0tp2ktmPj8xO4N/0=
201+github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
202+github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
203+github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
204+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
205+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
206 github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
207 github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
208 github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
209 github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
210-github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
211-github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
212-github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
213+github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
214+github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
215 github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
216 github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
217-github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
218-github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
219-github.com/minio/madmin-go/v3 v3.0.5 h1:ynWTsnszHnQVJWRL2OE4ysCvCNG0uHgdTvJpdLazf9c=
220-github.com/minio/madmin-go/v3 v3.0.5/go.mod h1:lPrMoc1aeiIWmmrxBthkDqzMPQwC/Lu9ByuyM2wenJk=
221+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
222+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
223+github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58=
224+github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs=
225+github.com/minio/madmin-go/v3 v3.0.29 h1:3bNLArtxIFud5wyb5/DnF5DGLBvcSJyzCA44EclX1Ow=
226+github.com/minio/madmin-go/v3 v3.0.29/go.mod h1:4QN2NftLSV7MdlT50dkrenOMmNVHluxTvlqJou3hte8=
227 github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
228 github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
229-github.com/minio/minio-go/v7 v7.0.49 h1:dE5DfOtnXMXCjr/HWI6zN9vCrY6Sv666qhhiwUMvGV4=
230-github.com/minio/minio-go/v7 v7.0.49/go.mod h1:UI34MvQEiob3Cf/gGExGMmzugkM/tNgbFypNDy5LMVc=
231-github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
232-github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
233-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
234-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
235-github.com/mmcdole/gofeed v1.1.3 h1:pdrvMb18jMSLidGp8j0pLvc9IGziX4vbmvVqmLH6z8o=
236-github.com/mmcdole/gofeed v1.1.3/go.mod h1:QQO3maftbOu+hiVOGOZDRLymqGQCos4zxbA4j89gMrE=
237-github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI=
238-github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8=
239+github.com/minio/minio-go/v7 v7.0.63 h1:GbZ2oCvaUdgT5640WJOpyDhhDxvknAJU2/T3yurwcbQ=
240+github.com/minio/minio-go/v7 v7.0.63/go.mod h1:Q6X7Qjb7WMhvG65qKf4gUgA5XaiSox74kR1uAEjxRS4=
241+github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
242+github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
243+github.com/mmcdole/gofeed v1.2.1 h1:tPbFN+mfOLcM1kDF1x2c/N68ChbdBatkppdzf/vDe1s=
244+github.com/mmcdole/gofeed v1.2.1/go.mod h1:2wVInNpgmC85q16QTTuwbuKxtKkHLCDDtf0dCmnrNr4=
245+github.com/mmcdole/goxpp v1.1.0 h1:WwslZNF7KNAXTFuzRtn/OKZxFLJAAyOA9w82mDz2ZGI=
246+github.com/mmcdole/goxpp v1.1.0/go.mod h1:v+25+lT2ViuQ7mVxcncQ8ch1URund48oH+jhjiwEgS8=
247 github.com/mmcloughlin/md4 v0.1.2 h1:kGYl+iNbxhyz4u76ka9a+0TXP9KWt/LmnM0QhZwhcBo=
248 github.com/mmcloughlin/md4 v0.1.2/go.mod h1:AAxFX59fddW0IguqNzWlf1lazh1+rXeIt/Bj49cqDTQ=
249 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
250 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
251 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
252-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
253 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
254 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
255-github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
256-github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a h1:jlDOeO5TU0pYlbc/y6PFguab5IjANI0Knrpg3u/ton4=
257-github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
258-github.com/muesli/cancelreader v0.2.0/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
259+github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
260+github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
261 github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
262 github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
263-github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ=
264 github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
265 github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
266-github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
267-github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
268-github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0=
269-github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc=
270+github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
271+github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
272 github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577 h1:hVmVNttSLNloGsbFKVXAUHonXTd8KKrv30U/8UkloKI=
273 github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577/go.mod h1:G3Cu1AW+dmRLDFpOi8eUAfc3cGoRHUjTkGjeRcndgl4=
274 github.com/neurosnap/go-jpeg-image-structure v0.0.0-20221010133817-70b1c1ff679e h1:76Dng5ms0fR+26doKZAvNqhi2UPfnLxGfPIDEr+BBlM=
275@@ -203,46 +186,49 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR
276 github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
277 github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
278 github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
279-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
280-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
281-github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
282-github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
283+github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo=
284+github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
285 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
286 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
287 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
288 github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
289 github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig=
290 github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
291-github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
292-github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
293-github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
294-github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
295-github.com/prometheus/common v0.38.0 h1:VTQitp6mXTdUoCmDMugDVOJ1opi6ADftKfp/yeqTR/E=
296-github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec=
297-github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
298-github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
299+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
300+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
301+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
302+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
303+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
304+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
305+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
306+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
307+github.com/prometheus/prom2json v1.3.3 h1:IYfSMiZ7sSOfliBoo89PcufjWO4eAR0gznGcETyaUgo=
308+github.com/prometheus/prom2json v1.3.3/go.mod h1:Pv4yIPktEkK7btWsrUTWDDDrnpUrAELaOCj+oFwlgmc=
309 github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
310 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
311-github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
312-github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
313-github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
314-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
315-github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
316-github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
317-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
318-github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
319+github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
320+github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
321+github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
322+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
323+github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
324+github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
325+github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0=
326+github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs=
327 github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
328 github.com/secure-io/sio-go v0.3.1 h1:dNvY9awjabXTYGsTF1PiCySl9Ltofk9GA3VdWlo7rRc=
329 github.com/secure-io/sio-go v0.3.1/go.mod h1:+xbkjDzPjwh4Axd07pRKSNriS9SCiYksWnZqdnfpQxs=
330 github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekueiEMJ7NEoxJo0=
331 github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE=
332-github.com/sendgrid/sendgrid-go v3.12.0+incompatible h1:/N2vx18Fg1KmQOh6zESc5FJB8pYwt5QFBDflYPh1KVg=
333-github.com/sendgrid/sendgrid-go v3.12.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
334-github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4=
335-github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA=
336-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
337-github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
338-github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
339+github.com/sendgrid/sendgrid-go v3.13.0+incompatible h1:HZrzc06/QfBGesY9o3n1lvBrRONA+57rbDRKet7plos=
340+github.com/sendgrid/sendgrid-go v3.13.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
341+github.com/shirou/gopsutil/v3 v3.23.10 h1:/N42opWlYzegYaVkWejXWJpbzKv2JDy3mrgGzKsh9hM=
342+github.com/shirou/gopsutil/v3 v3.23.10/go.mod h1:JIE26kpucQi+innVlAUnIEOSBhBUkirr5b44yr55+WE=
343+github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
344+github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
345+github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
346+github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
347+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
348+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
349 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
350 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
351 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
352@@ -250,73 +236,70 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
353 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
354 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
355 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
356-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
357-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
358-github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0=
359-github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw=
360-github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
361-github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
362-github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
363-github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
364-github.com/urfave/cli v1.22.3/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
365+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
366+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
367+github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
368+github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
369+github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
370+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
371+github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
372+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
373 github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
374 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
375-github.com/yuin/goldmark v1.5.3 h1:3HUJmBFbQW9fhQOzMgseU134xfi6hU+mjWywx5Ty+/M=
376-github.com/yuin/goldmark v1.5.3/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
377+github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=
378+github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
379 github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 h1:yHfZyN55+5dp1wG7wDKv8HQ044moxkyGq12KFFMFDxg=
380 github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594/go.mod h1:U9ihbh+1ZN7fR5Se3daSPoz1CGF9IYtSvWwVQtnzGHU=
381 github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
382 github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
383-github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
384-github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
385+github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
386+github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
387 go.abhg.dev/goldmark/anchor v0.1.1 h1:NUH3hAzhfeymRqZKOkSoFReZlEAmfXBZlbXEzpD2Qgc=
388 go.abhg.dev/goldmark/anchor v0.1.1/go.mod h1:zYKiaHXTdugwVJRZqInVdmNGQRM3ZRJ6AGBC7xP7its=
389-go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
390-go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
391-go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
392-go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
393-go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
394-go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
395-go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
396-go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
397-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
398+go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
399+go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
400+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
401+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
402+go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
403+go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
404 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
405 golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
406 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
407-golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
408 golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
409-golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
410-golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
411-golang.org/x/exp v0.0.0-20221211140036-ad323defaf05 h1:T8EldfGCcveFMewH5xAYxxoX3PSQMrsechlUGVFlQBU=
412-golang.org/x/exp v0.0.0-20221211140036-ad323defaf05/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
413+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
414+golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
415+golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
416+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
417+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
418 golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
419 golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
420-golang.org/x/image v0.2.0 h1:/DcQ0w3VHKCC5p0/P2B0JpAZ9Z++V2KOo2fyU89CXBQ=
421-golang.org/x/image v0.2.0/go.mod h1:la7oBXb9w3YFjBqaAwtynVioc1ZvOnNteUNrifGNmAI=
422+golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=
423+golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE=
424 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
425-golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
426-golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
427+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
428 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
429 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
430 golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
431-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
432-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
433 golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
434 golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
435 golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
436 golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
437 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
438+golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
439 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
440 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
441-golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
442-golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
443-golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
444+golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
445+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
446 golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
447+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
448+golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
449+golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
450 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
451 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
452 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
453-golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
454 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
455+golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
456+golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
457 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
458 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
459 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
460@@ -324,62 +307,55 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w
461 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
462 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
463 golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
464-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
465 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
466 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
467-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
468-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
469-golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
470-golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
471 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
472-golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
473 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
474 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
475-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
476-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
477-golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
478-golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
479-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
480-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
481-golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
482+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
483 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
484+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
485+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
486+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
487+golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
488+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
489+golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
490+golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
491 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
492 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
493-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
494-golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
495-golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
496+golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
497 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
498+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
499+golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
500+golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
501 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
502-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
503 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
504 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
505 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
506-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
507-golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
508+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
509 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
510+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
511+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
512+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
513 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
514 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
515 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
516-golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
517+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
518 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
519 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
520 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
521 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
522-google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
523-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
524+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
525+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
526 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
527-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
528 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
529 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
530-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
531 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
532 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
533-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
534 gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
535 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
536 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
537 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
538 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
539-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
540 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
541 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+1,
-1
1@@ -1,7 +1,7 @@
2 package imgs
3
4 import (
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/db"
8 uploadimgs "github.com/picosh/pico/filehandlers/imgs"
9 "github.com/picosh/pico/shared"
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 "github.com/picosh/pico/filehandlers"
12 "github.com/picosh/pico/shared"
+2,
-2
1@@ -4,7 +4,7 @@ import (
2 "errors"
3 "fmt"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/db"
8 "github.com/picosh/pico/shared"
9 "github.com/picosh/pico/shared/storage"
10@@ -42,7 +42,7 @@ type Cmd struct {
11 }
12
13 func (c *Cmd) output(out string) {
14- _, _ = c.session.Write([]byte(out + "\n"))
15+ _, _ = c.session.Write([]byte(out + "\r\n"))
16 }
17
18 func (c *Cmd) bail(err error) {
+3,
-3
1@@ -7,8 +7,8 @@ import (
2 "github.com/charmbracelet/bubbles/spinner"
3 tea "github.com/charmbracelet/bubbletea"
4 "github.com/charmbracelet/lipgloss"
5+ "github.com/charmbracelet/ssh"
6 bm "github.com/charmbracelet/wish/bubbletea"
7- "github.com/gliderlabs/ssh"
8 "github.com/muesli/reflow/indent"
9 "github.com/muesli/reflow/wordwrap"
10 "github.com/muesli/reflow/wrap"
11@@ -70,7 +70,7 @@ var (
12 )
13
14 func NewSpinner() spinner.Model {
15- s := spinner.NewModel()
16+ s := spinner.New()
17 s.Spinner = spinner.Dot
18 s.Style = spinnerStyle
19 return s
20@@ -154,7 +154,7 @@ type model struct {
21 }
22
23 func (m model) Init() tea.Cmd {
24- return spinner.Tick
25+ return m.spinner.Tick
26 }
27
28 func (m model) findUser() (*db.User, error) {
+1,
-1
1@@ -9,10 +9,10 @@ import (
2 "time"
3
4 "github.com/charmbracelet/promwish"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7 bm "github.com/charmbracelet/wish/bubbletea"
8 lm "github.com/charmbracelet/wish/logging"
9- "github.com/gliderlabs/ssh"
10 "github.com/picosh/pico/db/postgres"
11 uploadassets "github.com/picosh/pico/filehandlers/assets"
12 "github.com/picosh/pico/shared"
+1,
-1
1@@ -4,8 +4,8 @@ import (
2 "fmt"
3 "strings"
4
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/db"
9 uploadassets "github.com/picosh/pico/filehandlers/assets"
10 "github.com/picosh/pico/wish/cms/util"
1@@ -15,7 +15,7 @@ import (
2 "unicode"
3 "unicode/utf8"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "golang.org/x/exp/slices"
8 )
9
+1,
-1
1@@ -8,8 +8,8 @@ import (
2 "strings"
3 "time"
4
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send"
9 "github.com/picosh/pico/wish/send/utils"
10 )
+3,
-3
1@@ -7,8 +7,8 @@ import (
2 "github.com/charmbracelet/bubbles/spinner"
3 tea "github.com/charmbracelet/bubbletea"
4 "github.com/charmbracelet/lipgloss"
5+ "github.com/charmbracelet/ssh"
6 bm "github.com/charmbracelet/wish/bubbletea"
7- "github.com/gliderlabs/ssh"
8 "github.com/muesli/reflow/indent"
9 "github.com/muesli/reflow/wordwrap"
10 "github.com/muesli/reflow/wrap"
11@@ -79,7 +79,7 @@ var (
12 )
13
14 func NewSpinner() spinner.Model {
15- s := spinner.NewModel()
16+ s := spinner.New()
17 s.Spinner = spinner.Dot
18 s.Style = spinnerStyle
19 return s
20@@ -165,7 +165,7 @@ type model struct {
21 }
22
23 func (m model) Init() tea.Cmd {
24- return spinner.Tick
25+ return m.spinner.Tick
26 }
27
28 func (m model) findUser() (*db.User, error) {
+3,
-3
1@@ -94,8 +94,8 @@ func (m *CreateModel) indexBackward() {
2 func NewCreateModel(cfg *config.ConfigCms, dbpool db.DB, publicKey string) CreateModel {
3 st := common.DefaultStyles()
4
5- im := input.NewModel()
6- im.CursorStyle = st.Cursor
7+ im := input.New()
8+ im.Cursor.Style = st.Cursor
9 im.Placeholder = "erock"
10 im.Prompt = st.FocusedPrompt.String()
11 im.CharLimit = 50
12@@ -176,7 +176,7 @@ func Update(msg tea.Msg, m CreateModel) (CreateModel, tea.Cmd) {
13
14 return m, tea.Batch(
15 createAccount(m), // fire off the command, too
16- spinner.Tick,
17+ m.spinner.Tick,
18 )
19 case cancelButton: // Exit
20 m.Quit = true
+1,
-1
1@@ -77,7 +77,7 @@ func KeyValueView(stuff ...string) string {
2
3 // NewSpinner returns a spinner model.
4 func NewSpinner() spinner.Model {
5- s := spinner.NewModel()
6+ s := spinner.New()
7 s.Spinner = spinner.Dot
8 s.Style = spinnerStyle
9 return s
+3,
-3
1@@ -88,8 +88,8 @@ func (m *Model) indexBackward() {
2 func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
3 st := common.DefaultStyles()
4
5- im := input.NewModel()
6- im.CursorStyle = st.Cursor
7+ im := input.New()
8+ im.Cursor.Style = st.Cursor
9 im.Placeholder = "ssh-ed25519 AAAA..."
10 im.Prompt = st.FocusedPrompt.String()
11 im.CharLimit = 2049
12@@ -164,7 +164,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
13
14 return m, tea.Batch(
15 addPublicKey(m), // fire off the command, too
16- spinner.Tick,
17+ m.spinner.Tick,
18 )
19 case cancelButton: // Exit this mini-app
20 m.Done = true
+3,
-3
1@@ -92,8 +92,8 @@ func (m *Model) indexBackward() {
2 func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
3 st := common.DefaultStyles()
4
5- im := input.NewModel()
6- im.CursorStyle = st.Cursor
7+ im := input.New()
8+ im.Cursor.Style = st.Cursor
9 im.Placeholder = "A name used for your reference"
10 im.Prompt = st.FocusedPrompt.String()
11 im.CharLimit = 256
12@@ -176,7 +176,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
13
14 return m, tea.Batch(
15 addToken(m), // fire off the command, too
16- spinner.Tick,
17+ m.spinner.Tick,
18 )
19 case cancelButton: // Exit this mini-app
20 m.Done = true
+3,
-3
1@@ -85,7 +85,7 @@ func (m *Model) UpdatePaging(msg tea.Msg) {
2 func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
3 st := common.DefaultStyles()
4
5- p := pager.NewModel()
6+ p := pager.New()
7 p.PerPage = keysPerPage
8 p.Type = pager.Dots
9 p.InactiveDot = st.InactivePagination.Render("•")
10@@ -110,7 +110,7 @@ func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
11 // Init is the Tea initialization function.
12 func (m Model) Init() tea.Cmd {
13 return tea.Batch(
14- spinner.Tick,
15+ m.spinner.Tick,
16 )
17 }
18
19@@ -381,7 +381,7 @@ func (m Model) promptView(prompt string) string {
20 func LoadKeys(m Model) tea.Cmd {
21 return tea.Batch(
22 fetchKeys(m.dbpool, m.user),
23- spinner.Tick,
24+ m.spinner.Tick,
25 )
26 }
27
+3,
-3
1@@ -88,7 +88,7 @@ func NewModel(cfg *config.ConfigCms, urls config.ConfigURL, dbpool db.DB, user *
2 logger := cfg.Logger
3 st := common.DefaultStyles()
4
5- p := pager.NewModel()
6+ p := pager.New()
7 p.PerPage = keysPerPage
8 p.Type = pager.Dots
9 p.InactiveDot = st.InactivePagination.Render("•")
10@@ -115,7 +115,7 @@ func NewModel(cfg *config.ConfigCms, urls config.ConfigURL, dbpool db.DB, user *
11 // Init is the Tea initialization function.
12 func (m Model) Init() tea.Cmd {
13 return tea.Batch(
14- spinner.Tick,
15+ m.spinner.Tick,
16 )
17 }
18
19@@ -315,7 +315,7 @@ func LoadPosts(m Model) tea.Cmd {
20
21 return tea.Batch(
22 m.fetchPosts(m.user.ID),
23- spinner.Tick,
24+ m.spinner.Tick,
25 )
26 }
27
+3,
-3
1@@ -83,7 +83,7 @@ func (m *Model) UpdatePaging(msg tea.Msg) {
2 func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
3 st := common.DefaultStyles()
4
5- p := pager.NewModel()
6+ p := pager.New()
7 p.PerPage = keysPerPage
8 p.Type = pager.Dots
9 p.InactiveDot = st.InactivePagination.Render("•")
10@@ -108,7 +108,7 @@ func NewModel(cfg *config.ConfigCms, dbpool db.DB, user *db.User) Model {
11 // Init is the Tea initialization function.
12 func (m Model) Init() tea.Cmd {
13 return tea.Batch(
14- spinner.Tick,
15+ m.spinner.Tick,
16 )
17 }
18
19@@ -349,7 +349,7 @@ func (m Model) promptView(prompt string) string {
20 func LoadKeys(m Model) tea.Cmd {
21 return tea.Batch(
22 fetchKeys(m.dbpool, m.user),
23- spinner.Tick,
24+ m.spinner.Tick,
25 )
26 }
27
+3,
-3
1@@ -94,8 +94,8 @@ func (m *Model) indexBackward() {
2 func NewModel(dbpool db.DB, user *db.User, sshUser string) Model {
3 st := common.DefaultStyles()
4
5- im := input.NewModel()
6- im.CursorStyle = st.Cursor
7+ im := input.New()
8+ im.Cursor.Style = st.Cursor
9 im.Placeholder = sshUser
10 im.Prompt = st.FocusedPrompt.String()
11 im.CharLimit = 50
12@@ -178,7 +178,7 @@ func Update(msg tea.Msg, m Model) (Model, tea.Cmd) {
13
14 return m, tea.Batch(
15 setName(m), // fire off the command, too
16- spinner.Tick,
17+ m.spinner.Tick,
18 )
19 case cancelButton: // Exit this mini-app
20 m.Done = true
+1,
-1
1@@ -4,7 +4,7 @@ import (
2 "encoding/base64"
3 "fmt"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 )
8
9 func KeyText(s ssh.Session) (string, error) {
+2,
-2
1@@ -4,8 +4,8 @@ import (
2 "sort"
3 "strings"
4
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send/utils"
9 )
10
11@@ -36,7 +36,7 @@ func Middleware(writeHandler utils.CopyFromClientHandler) wish.Middleware {
12
13 sort.Strings(data)
14
15- _, err = session.Write([]byte(strings.Join(data, "\n")))
16+ _, err = session.Write([]byte(strings.Join(data, "\r\n")))
17 if err != nil {
18 utils.ErrorHandler(session, err)
19 }
+2,
-2
1@@ -7,8 +7,8 @@ import (
2 "strings"
3 "time"
4
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send/utils"
9 )
10
11@@ -43,7 +43,7 @@ func Middleware(writeHandler utils.CopyFromClientHandler, ext string) wish.Middl
12 }
13
14 if result != "" {
15- _, err = session.Write([]byte(fmt.Sprintf("%s\n", result)))
16+ _, err = session.Write([]byte(fmt.Sprintf("%s\r\n", result)))
17 if err != nil {
18 utils.ErrorHandler(session, err)
19 }
+1,
-1
1@@ -1,8 +1,8 @@
2 package proxy
3
4 import (
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 )
9
10 type Router func(sh ssh.Handler, s ssh.Session) []wish.Middleware
+1,
-1
1@@ -1,8 +1,8 @@
2 package auth
3
4 import (
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send/utils"
9 )
10
+3,
-3
1@@ -11,8 +11,8 @@ import (
2 "github.com/antoniomika/go-rsync-receiver/rsyncreceiver"
3 "github.com/antoniomika/go-rsync-receiver/rsyncsender"
4 rsyncutils "github.com/antoniomika/go-rsync-receiver/utils"
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send/utils"
9 )
10
11@@ -57,11 +57,11 @@ func (h *handler) Put(fileName string, content io.Reader, fileSize int64, mTime
12
13 msg, err := h.writeHandler.Write(h.session, fileEntry)
14 if err != nil {
15- errMsg := fmt.Sprintf("%s\n", err.Error())
16+ errMsg := fmt.Sprintf("%s\r\n", err.Error())
17 _, err = h.session.Stderr().Write([]byte(errMsg))
18 }
19 if msg != "" {
20- nMsg := fmt.Sprintf("%s\n", msg)
21+ nMsg := fmt.Sprintf("%s\r\n", msg)
22 _, err = h.session.Stderr().Write([]byte(nMsg))
23 }
24 return 0, err
+1,
-1
1@@ -10,7 +10,7 @@ import (
2 "regexp"
3 "strconv"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/wish/send/utils"
8 )
9
+1,
-1
1@@ -3,7 +3,7 @@ package scp
2 import (
3 "errors"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/wish/send/utils"
8 )
9
+1,
-1
1@@ -3,8 +3,8 @@ package scp
2 import (
3 "fmt"
4
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/send/utils"
9 )
10
+1,
-1
1@@ -1,8 +1,8 @@
2 package send
3
4 import (
5+ "github.com/charmbracelet/ssh"
6 "github.com/charmbracelet/wish"
7- "github.com/gliderlabs/ssh"
8 "github.com/picosh/pico/wish/pipe"
9 "github.com/picosh/pico/wish/send/auth"
10 "github.com/picosh/pico/wish/send/rsync"
+17,
-2
1@@ -1,13 +1,15 @@
2 package sftp
3
4 import (
5+ "bytes"
6 "errors"
7 "io"
8 "os"
9
10- "github.com/gliderlabs/ssh"
11+ "github.com/charmbracelet/ssh"
12 "github.com/picosh/pico/wish/send/utils"
13 "github.com/pkg/sftp"
14+ "golang.org/x/exp/slices"
15 )
16
17 type listerat []os.FileInfo
18@@ -30,7 +32,16 @@ type handler struct {
19 }
20
21 func (f *handler) Filecmd(r *sftp.Request) error {
22- return nil
23+ switch r.Method {
24+ case "Remove":
25+ entry := toFileEntry(r)
26+ entry.Reader = bytes.NewReader(nil)
27+
28+ _, err := f.writeHandler.Write(f.session, entry)
29+
30+ return err
31+ }
32+ return errors.New("unsupported")
33 }
34
35 func (f *handler) Filelist(r *sftp.Request) (sftp.ListerAt, error) {
36@@ -43,6 +54,10 @@ func (f *handler) Filelist(r *sftp.Request) (sftp.ListerAt, error) {
37 return nil, err
38 }
39
40+ listData = slices.DeleteFunc(listData, func(f os.FileInfo) bool {
41+ return f.Name() == "/"
42+ })
43+
44 return listerat(listData), nil
45 }
46
+1,
-1
1@@ -5,7 +5,7 @@ import (
2 "io"
3 "log"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 "github.com/picosh/pico/wish/send/utils"
8 "github.com/pkg/sftp"
9 )
+2,
-2
1@@ -58,11 +58,11 @@ func (f fakeWrite) WriteAt(p []byte, off int64) (int, error) {
2 func (f fakeWrite) Close() error {
3 msg, err := f.handler.writeHandler.Write(f.handler.session, f.fileEntry)
4 if err != nil {
5- errMsg := fmt.Sprintf("%s\n", err.Error())
6+ errMsg := fmt.Sprintf("%s\r\n", err.Error())
7 _, err = f.handler.session.Stderr().Write([]byte(errMsg))
8 }
9 if msg != "" {
10- nMsg := fmt.Sprintf("%s\n", msg)
11+ nMsg := fmt.Sprintf("%s\r\n", msg)
12 _, err = f.handler.session.Stderr().Write([]byte(nMsg))
13 }
14 return err
+33,
-0
1@@ -0,0 +1,33 @@
2+package utils
3+
4+import (
5+ "errors"
6+ "io"
7+ "net/http"
8+
9+ "github.com/minio/minio-go/v7"
10+)
11+
12+type AllReaderAt struct {
13+ Reader io.ReaderAt
14+}
15+
16+func NewAllReaderAt(reader io.ReaderAt) *AllReaderAt {
17+ return &AllReaderAt{reader}
18+}
19+
20+func (a *AllReaderAt) ReadAt(p []byte, off int64) (n int, err error) {
21+ n, err = a.Reader.ReadAt(p, off)
22+
23+ if errors.Is(err, io.EOF) {
24+ return
25+ }
26+
27+ resp := minio.ToErrorResponse(err)
28+
29+ if resp.StatusCode == http.StatusRequestedRangeNotSatisfiable {
30+ err = io.EOF
31+ }
32+
33+ return
34+}
+4,
-4
1@@ -9,7 +9,7 @@ import (
2 "path/filepath"
3 "strconv"
4
5- "github.com/gliderlabs/ssh"
6+ "github.com/charmbracelet/ssh"
7 )
8
9 // NULL is an array with a single NULL byte.
10@@ -71,7 +71,7 @@ func KeyText(session ssh.Session) (string, error) {
11 }
12
13 func ErrorHandler(session ssh.Session, err error) {
14- _, _ = fmt.Fprintln(session.Stderr(), err)
15+ _, _ = fmt.Fprint(session.Stderr(), err, "\r\n")
16 _ = session.Exit(1)
17 _ = session.Close()
18 }
19@@ -81,7 +81,7 @@ func PrintMsg(session ssh.Session, stdout []string, stderr []error) {
20 if len(stdout) > 0 {
21 for _, msg := range stdout {
22 if msg != "" {
23- output += fmt.Sprintf("%s\n", msg)
24+ output += fmt.Sprintf("%s\r\n", msg)
25 }
26 }
27 _, _ = fmt.Fprintln(session.Stderr(), output)
28@@ -90,7 +90,7 @@ func PrintMsg(session ssh.Session, stdout []string, stderr []error) {
29 outputErr := ""
30 if len(stderr) > 0 {
31 for _, err := range stderr {
32- outputErr += fmt.Sprintf("%v\n", err)
33+ outputErr += fmt.Sprintf("%v\r\n", err)
34 }
35 _, _ = fmt.Fprintln(session.Stderr(), outputErr)
36 }