- commit
- 5f240f0
- parent
- c26a047
- author
- Eric Bower
- date
- 2026-04-20 21:26:04 -0400 EDT
chore: rm dead code
1 files changed,
+0,
-274
+0,
-274
1@@ -1,274 +0,0 @@
2-package storage
3-
4-import (
5- "bytes"
6- "encoding/binary"
7- "fmt"
8- "io"
9- "log/slog"
10- "os"
11- "path/filepath"
12- "time"
13-
14- "github.com/picosh/pico/pkg/pssh"
15- "github.com/picosh/pico/pkg/send/utils"
16-)
17-
18-type ctxBucketKey struct{}
19-
20-func getBucket(ctx *pssh.SSHServerConnSession) (Bucket, error) {
21- bucket, ok := ctx.Value(ctxBucketKey{}).(Bucket)
22- if !ok {
23- return bucket, fmt.Errorf("bucket not set on `ssh.Context()` for connection")
24- }
25- if bucket.Name == "" {
26- return bucket, fmt.Errorf("bucket not set on `ssh.Context()` for connection")
27- }
28- return bucket, nil
29-}
30-func setBucket(ctx *pssh.SSHServerConnSession, bucket Bucket) {
31- ctx.SetValue(ctxBucketKey{}, bucket)
32-}
33-
34-type FileData struct {
35- *utils.FileEntry
36- Text []byte
37- User string
38- Bucket Bucket
39-}
40-
41-type Config struct {
42- Logger *slog.Logger
43- Storage StorageServe
44- AssetNames AssetNames
45-}
46-
47-type UploadAssetHandler struct {
48- Cfg *Config
49-}
50-
51-var _ utils.CopyFromClientHandler = &UploadAssetHandler{}
52-var _ utils.CopyFromClientHandler = (*UploadAssetHandler)(nil)
53-
54-func NewUploadAssetHandler(cfg *Config) *UploadAssetHandler {
55- if cfg.AssetNames == nil {
56- cfg.AssetNames = &AssetNamesBasic{}
57- }
58-
59- return &UploadAssetHandler{
60- Cfg: cfg,
61- }
62-}
63-
64-func (h *UploadAssetHandler) GetLogger(s *pssh.SSHServerConnSession) *slog.Logger {
65- return h.Cfg.Logger
66-}
67-
68-func (h *UploadAssetHandler) Delete(s *pssh.SSHServerConnSession, entry *utils.FileEntry) error {
69- h.Cfg.Logger.Info("deleting file", "file", entry.Filepath)
70- bucket, err := getBucket(s)
71- if err != nil {
72- h.Cfg.Logger.Error(err.Error())
73- return err
74- }
75-
76- objectFileName, err := h.Cfg.AssetNames.ObjectName(s, entry)
77- if err != nil {
78- return err
79- }
80- return h.Cfg.Storage.DeleteObject(bucket, objectFileName)
81-}
82-
83-func (h *UploadAssetHandler) Read(s *pssh.SSHServerConnSession, entry *utils.FileEntry) (os.FileInfo, utils.ReadAndReaderAtCloser, error) {
84- fileInfo := &utils.VirtualFile{
85- FName: filepath.Base(entry.Filepath),
86- FIsDir: false,
87- FSize: entry.Size,
88- FModTime: time.Unix(entry.Mtime, 0),
89- }
90- h.Cfg.Logger.Info("reading file", "file", fileInfo)
91-
92- bucketName, err := h.Cfg.AssetNames.BucketName(s)
93- if err != nil {
94- return nil, nil, err
95- }
96- bucket, err := h.Cfg.Storage.GetBucket(bucketName)
97- if err != nil {
98- return nil, nil, err
99- }
100-
101- fname, err := h.Cfg.AssetNames.ObjectName(s, entry)
102- if err != nil {
103- return nil, nil, err
104- }
105- contents, info, err := h.Cfg.Storage.GetObject(bucket, fname)
106- if err != nil {
107- return nil, nil, err
108- }
109-
110- fileInfo.FSize = info.Size
111- fileInfo.FModTime = info.LastModified
112-
113- return fileInfo, contents, nil
114-}
115-
116-func (h *UploadAssetHandler) List(s *pssh.SSHServerConnSession, fpath string, isDir bool, recursive bool) ([]os.FileInfo, error) {
117- h.Cfg.Logger.Info(
118- "listing path",
119- "dir", fpath,
120- "isDir", isDir,
121- "recursive", recursive,
122- )
123- var fileList []os.FileInfo
124-
125- cleanFilename := fpath
126-
127- bucketName, err := h.Cfg.AssetNames.BucketName(s)
128- if err != nil {
129- return fileList, err
130- }
131- bucket, err := h.Cfg.Storage.GetBucket(bucketName)
132- if err != nil {
133- return fileList, err
134- }
135-
136- fname, err := h.Cfg.AssetNames.ObjectName(s, &utils.FileEntry{Filepath: cleanFilename})
137- if err != nil {
138- return fileList, err
139- }
140-
141- if fname == "" || fname == "." {
142- name := fname
143- if name == "" {
144- name = "/"
145- }
146-
147- info := &utils.VirtualFile{
148- FName: name,
149- FIsDir: true,
150- }
151-
152- fileList = append(fileList, info)
153- } else {
154- name := fname
155- if name != "/" && isDir {
156- name += "/"
157- }
158-
159- foundList, err := h.Cfg.Storage.ListObjects(bucket, name, recursive)
160- if err != nil {
161- return fileList, err
162- }
163-
164- fileList = append(fileList, foundList...)
165- }
166-
167- return fileList, nil
168-}
169-
170-func (h *UploadAssetHandler) Validate(s *pssh.SSHServerConnSession) error {
171- var err error
172- userName := s.User()
173-
174- assetBucket, err := h.Cfg.AssetNames.BucketName(s)
175- if err != nil {
176- return err
177- }
178- bucket, err := h.Cfg.Storage.UpsertBucket(assetBucket)
179- if err != nil {
180- return err
181- }
182- setBucket(s, bucket)
183-
184- pk, _ := utils.KeyText(s)
185- h.Cfg.Logger.Info(
186- "attempting to upload files",
187- "user", userName,
188- "bucket", bucket.Name,
189- "publicKey", pk,
190- )
191- return nil
192-}
193-
194-func (h *UploadAssetHandler) Write(s *pssh.SSHServerConnSession, entry *utils.FileEntry) (string, error) {
195- var origText []byte
196- if b, err := io.ReadAll(entry.Reader); err == nil {
197- origText = b
198- }
199- fileSize := binary.Size(origText)
200- // TODO: hack for now until I figure out how to get correct
201- // filesize from sftp,scp,rsync
202- entry.Size = int64(fileSize)
203- userName := s.User()
204-
205- bucket, err := getBucket(s)
206- if err != nil {
207- h.Cfg.Logger.Error(err.Error())
208- return "", err
209- }
210-
211- data := &FileData{
212- FileEntry: entry,
213- User: userName,
214- Text: origText,
215- Bucket: bucket,
216- }
217- err = h.writeAsset(s, data)
218- if err != nil {
219- h.Cfg.Logger.Error(err.Error())
220- return "", err
221- }
222-
223- url, err := h.Cfg.AssetNames.PrintObjectName(s, entry, bucket.Name)
224- if err != nil {
225- return "", err
226- }
227- return url, nil
228-}
229-
230-func (h *UploadAssetHandler) validateAsset(_ *FileData) (bool, error) {
231- return true, nil
232-}
233-
234-func (h *UploadAssetHandler) writeAsset(s *pssh.SSHServerConnSession, data *FileData) error {
235- valid, err := h.validateAsset(data)
236- if !valid {
237- return err
238- }
239-
240- objectFileName, err := h.Cfg.AssetNames.ObjectName(s, data.FileEntry)
241- if err != nil {
242- return err
243- }
244- reader := bytes.NewReader(data.Text)
245-
246- h.Cfg.Logger.Info(
247- "uploading file to bucket",
248- "user",
249- data.User,
250- "bucket",
251- data.Bucket.Name,
252- "object",
253- objectFileName,
254- )
255-
256- var mtime time.Time
257- if data.Mtime > 0 {
258- mtime = time.Unix(data.Mtime, 0)
259- }
260- info := &ObjectInfo{
261- LastModified: mtime,
262- }
263-
264- _, _, err = h.Cfg.Storage.PutObject(
265- data.Bucket,
266- objectFileName,
267- utils.NopReadAndReaderAtCloser(reader),
268- info,
269- )
270- if err != nil {
271- return err
272- }
273-
274- return nil
275-}