mirror of
https://github.com/skidoodle/safebin.git
synced 2026-04-28 19:27:41 +02:00
@@ -1,3 +1,2 @@
|
|||||||
storage/*
|
storage/*
|
||||||
# Added by goreleaser init:
|
|
||||||
dist/
|
dist/
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const (
|
|||||||
MinRetention = 24 * time.Hour
|
MinRetention = 24 * time.Hour
|
||||||
MaxRetention = 365 * 24 * time.Hour
|
MaxRetention = 365 * 24 * time.Hour
|
||||||
|
|
||||||
|
DBDirName = "db"
|
||||||
DBFileName = "safebin.db"
|
DBFileName = "safebin.db"
|
||||||
DBBucketName = "files"
|
DBBucketName = "files"
|
||||||
DBBucketIndexName = "expiry_index"
|
DBBucketIndexName = "expiry_index"
|
||||||
|
|||||||
+7
-1
@@ -1,6 +1,7 @@
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -15,7 +16,12 @@ type FileMeta struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func InitDB(storageDir string) (*bbolt.DB, error) {
|
func InitDB(storageDir string) (*bbolt.DB, error) {
|
||||||
path := filepath.Join(storageDir, DBFileName)
|
dbDir := filepath.Join(storageDir, DBDirName)
|
||||||
|
if err := os.MkdirAll(dbDir, PermUserRWX); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
path := filepath.Join(dbDir, DBFileName)
|
||||||
db, err := bbolt.Open(path, 0600, &bbolt.Options{Timeout: 1 * time.Second})
|
db, err := bbolt.Open(path, 0600, &bbolt.Options{Timeout: 1 * time.Second})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func TestInitDB(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
dbPath := filepath.Join(tmpDir, DBFileName)
|
dbPath := filepath.Join(tmpDir, DBDirName, DBFileName)
|
||||||
if _, err := os.Stat(dbPath); os.IsNotExist(err) {
|
if _, err := os.Stat(dbPath); os.IsNotExist(err) {
|
||||||
t.Error("Database file was not created")
|
t.Error("Database file was not created")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,9 +233,16 @@ func TestIntegration_Upload_VerifyEncryption(t *testing.T) {
|
|||||||
|
|
||||||
body := &bytes.Buffer{}
|
body := &bytes.Buffer{}
|
||||||
writer := multipart.NewWriter(body)
|
writer := multipart.NewWriter(body)
|
||||||
part, _ := writer.CreateFormFile("file", "secret.txt")
|
part, err := writer.CreateFormFile("file", "secret.txt")
|
||||||
part.Write(plaintext)
|
if err != nil {
|
||||||
writer.Close()
|
t.Fatalf("CreateFormFile failed: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := part.Write(plaintext); err != nil {
|
||||||
|
t.Fatalf("Write failed: %v", err)
|
||||||
|
}
|
||||||
|
if err := writer.Close(); err != nil {
|
||||||
|
t.Fatalf("Writer close failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
req, _ := http.NewRequest("POST", server.URL+"/", body)
|
req, _ := http.NewRequest("POST", server.URL+"/", body)
|
||||||
req.Header.Set("Content-Type", writer.FormDataContentType())
|
req.Header.Set("Content-Type", writer.FormDataContentType())
|
||||||
@@ -243,7 +250,11 @@ func TestIntegration_Upload_VerifyEncryption(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer func() {
|
||||||
|
if err := resp.Body.Close(); err != nil {
|
||||||
|
t.Errorf("Failed to close response body: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
respBytes, _ := io.ReadAll(resp.Body)
|
respBytes, _ := io.ReadAll(resp.Body)
|
||||||
slug := filepath.Base(strings.TrimSpace(string(respBytes)))
|
slug := filepath.Base(strings.TrimSpace(string(respBytes)))
|
||||||
|
|||||||
@@ -67,7 +67,11 @@ func (app *App) HandleUpload(writer http.ResponseWriter, request *http.Request)
|
|||||||
errChan <- err
|
errChan <- err
|
||||||
}()
|
}()
|
||||||
|
|
||||||
defer pr.Close()
|
defer func() {
|
||||||
|
if closeErr := pr.Close(); closeErr != nil {
|
||||||
|
app.Logger.Error("Failed to close pipe reader", "err", closeErr)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
streamer, err := crypto.NewGCMStreamer(ephemeralKey)
|
streamer, err := crypto.NewGCMStreamer(ephemeralKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user