Skip to content

Commit

Permalink
Merge pull request #385 from root-gg/remove_admin_column
Browse files Browse the repository at this point in the history
Refactor create upload and upload admin status
  • Loading branch information
camathieu authored Dec 8, 2021
2 parents 7c1d376 + ab1c1fc commit 6d0d738
Show file tree
Hide file tree
Showing 41 changed files with 1,037 additions and 548 deletions.
21 changes: 14 additions & 7 deletions plik/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ func TestCreateAndGetUploadFiles(t *testing.T) {
}
}

func TestUploadFileNotFound(t *testing.T) {
func TestUploadFile(t *testing.T) {
ps, pc := newPlikServerAndClient()
defer shutdown(ps)

Expand All @@ -314,6 +314,13 @@ func TestUploadFileNotFound(t *testing.T) {
_, _, err = pc.UploadFile(".")
require.Error(t, err, "unable to upload file")
require.Contains(t, err.Error(), "unhandled file mode", "unable to upload file")

dummyFilePath := "/tmp/plik.test.dummy.file"
_, err = os.Create(dummyFilePath)
require.NoError(t, err, "unable to create file")

_, _, err = pc.UploadFile(dummyFilePath)
require.NoError(t, err, "unable to upload file")
}

func TestRemoveFile(t *testing.T) {
Expand Down Expand Up @@ -347,7 +354,7 @@ func TestRemoveFileNotFound(t *testing.T) {

upload := &common.Upload{}
file := upload.NewFile()
upload.PrepareInsertForTests()
upload.InitializeForTests()
err = pc.removeFile(upload, file)
common.RequireError(t, err, "not found")
}
Expand All @@ -358,7 +365,7 @@ func TestRemoveFileNoServer(t *testing.T) {

upload := &common.Upload{}
file := upload.NewFile()
upload.PrepareInsertForTests()
upload.InitializeForTests()
err := pc.removeFile(upload, file)
common.RequireError(t, err, "connection refused")
}
Expand Down Expand Up @@ -396,7 +403,7 @@ func TestDeleteUploadNotFound(t *testing.T) {
require.NoError(t, err, "unable to start plik server")

upload := &common.Upload{}
upload.PrepareInsertForTests()
upload.InitializeForTests()
err = pc.removeUpload(upload)
common.RequireError(t, err, "not found")

Expand All @@ -410,7 +417,7 @@ func TestDeleteUploadNoServer(t *testing.T) {
defer shutdown(ps)

upload := &common.Upload{}
upload.PrepareInsertForTests()
upload.InitializeForTests()
err := pc.removeUpload(upload)
common.RequireError(t, err, "connection refused")
}
Expand Down Expand Up @@ -445,7 +452,7 @@ func TestGetArchiveNotFound(t *testing.T) {
require.NoError(t, err, "unable to start plik server")

upload := &common.Upload{}
upload.PrepareInsertForTests()
upload.InitializeForTests()
_, err = pc.downloadArchive(upload)
common.RequireError(t, err, "not found")

Expand All @@ -459,7 +466,7 @@ func TestGetArchiveNoServer(t *testing.T) {
defer shutdown(ps)

upload := &common.Upload{}
upload.PrepareInsertForTests()
upload.InitializeForTests()
_, err := pc.downloadArchive(upload)
common.RequireError(t, err, "connection refused")
}
2 changes: 1 addition & 1 deletion plik/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func TestNotUploadedGetFileURL(t *testing.T) {
common.RequireError(t, err, "upload has not been created yet")

upload.metadata = &common.Upload{}
upload.metadata.PrepareInsertForTests()
upload.metadata.InitializeForTests()

_, err = file.GetURL()
common.RequireError(t, err, "file has not been uploaded yet")
Expand Down
4 changes: 2 additions & 2 deletions plik/internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func TestUploadFileNoUpload(t *testing.T) {
upload := &common.Upload{}
file := upload.NewFile()
file.Name = "filename"
upload.PrepareInsertForTests()
upload.InitializeForTests()

_, err = pc.uploadFile(upload, file, bytes.NewBufferString("data"))
common.RequireError(t, err, "upload "+upload.ID+" not found")
Expand All @@ -128,7 +128,7 @@ func TestUploadFileReaderError(t *testing.T) {
upload := &common.Upload{}
file := upload.NewFile()
file.Name = "filename"
upload.PrepareInsertForTests()
upload.InitializeForTests()

_, err = pc.uploadFile(upload, file, common.NewErrorReaderString("io error"))
common.RequireError(t, err, "io error")
Expand Down
26 changes: 26 additions & 0 deletions plik/z1_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,3 +336,29 @@ func TestQuickUpload(t *testing.T) {

require.Equal(t, content, string(respBody), "invalid file content")
}

func TestCreateUploadWithForbidenOptions(t *testing.T) {
ps, pc := newPlikServerAndClient()
defer shutdown(ps)

err := start(ps)
require.NoError(t, err, "unable to start plik server")

uploadToCreate := &common.Upload{}
uploadToCreate.IsAdmin = true
uploadToCreate.DownloadDomain = "hack.me"
uploadToCreate.RemoteIP = "1.3.3.7"
uploadToCreate.UploadToken = "my-own-token"
uploadToCreate.CreatedAt = time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
uploadParams, err := pc.create(uploadToCreate)
require.NoError(t, err, "unable to create upload")
require.NotNil(t, uploadParams, "invalid nil uploads params")
require.NotZero(t, uploadParams.ID, "invalid upload id")

upload, err := pc.getUploadWithParams(&common.Upload{ID: uploadParams.ID})
require.False(t, upload.Metadata().IsAdmin, "invalid upload admin status")
require.Equal(t, "", upload.Metadata().DownloadDomain, "invalid upload download domain")
require.Equal(t, "", upload.Metadata().RemoteIP, "invalid upload download domain")
require.NotEqual(t, uploadToCreate.UploadToken, upload.Metadata().UploadToken, "invalid upload download domain")
require.NotEqual(t, uploadToCreate.CreatedAt, upload.Metadata().CreatedAt, "invalid upload download domain")
}
2 changes: 1 addition & 1 deletion plik/z2_e2e_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ func TestTTLNoLimitDisabled(t *testing.T) {
upload.TTL = -1
err = upload.Create()
require.Error(t, err, "unable to create upload")
require.Contains(t, err.Error(), "cannot set infinite ttl", "invalid error")
require.Contains(t, err.Error(), "cannot set infinite TTL", "invalid error")
}

func TestPasswordDisabled(t *testing.T) {
Expand Down
46 changes: 46 additions & 0 deletions server/common/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"os"
"testing"

"github.com/root-gg/logger"

"github.com/iancoleman/strcase"

"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -44,6 +46,13 @@ func TestInitializeConfigUploadWhitelist(t *testing.T) {
require.Equal(t, config.UploadWhitelist[0]+"/32", config.uploadWhitelist[0].String(), "invalid parsed upload IP")
require.Equal(t, config.UploadWhitelist[1], config.uploadWhitelist[1].String(), "invalid parsed upload IP")
require.Equal(t, config.UploadWhitelist[1], config.uploadWhitelist[2].String(), "invalid parsed upload IP")

config = NewConfiguration()
config.UploadWhitelist = []string{"foo", "bar", "baz"}

err = config.Initialize()
RequireError(t, err, "failed to parse upload whitelist")

}

func TestIsWhitelisted(t *testing.T) {
Expand Down Expand Up @@ -133,6 +142,23 @@ func TestGetServerUrl(t *testing.T) {
func TestString(t *testing.T) {
config := NewConfiguration()
require.NotEmpty(t, config.String())

config.DownloadDomain = "download.domain"
config.OneShot = false
config.Removable = false
config.Stream = false
config.ProtectedByPassword = false
config.DefaultTTL = -1
config.MaxTTL = -1
require.NotEmpty(t, config.String())

config.Authentication = true
require.NotEmpty(t, config.String())

config.GoogleAuthentication = true
config.OvhAuthentication = true
config.OvhAPIEndpoint = "api.ovh.com"
require.NotEmpty(t, config.String())
}

func TestConfiguration_EnvironmentOverride(t *testing.T) {
Expand Down Expand Up @@ -169,3 +195,23 @@ func TestConfiguration_EnvironmentOverride(t *testing.T) {
require.EqualValues(t, []string{"127.0.0.1"}, config.UploadWhitelist)
require.EqualValues(t, map[string]interface{}{"path": "files"}, config.MetadataBackendConfig)
}

func TestConfiguration_NewLogger(t *testing.T) {
config := NewConfiguration()
log := config.NewLogger()
require.NotNil(t, log, "invalid nil logger")
require.Equal(t, logger.INFO, log.MinLevel, "invalid logger level")

config.Debug = true
log = config.NewLogger()
require.Equal(t, logger.DEBUG, log.MinLevel, "invalid logger level")
}

func TestNewConfiguration_InitializeDebugCompat(t *testing.T) {
config := NewConfiguration()
config.LogLevel = "DEBUG"
err := config.Initialize()
require.NoError(t, err, "initialize error")
require.True(t, config.Debug)
require.True(t, config.DebugRequests)
}
34 changes: 20 additions & 14 deletions server/common/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package common
import (
"fmt"
"time"

"github.com/dustin/go-humanize"
)

// FileMissing when a file is waiting to be uploaded
Expand Down Expand Up @@ -51,35 +53,39 @@ func (file *File) GenerateID() {
file.ID = GenerateRandomID(16)
}

// Sanitize removes sensible information from
// object. Used to hide information in API.
// Sanitize clear some fields to hide sensible information from the API.
func (file *File) Sanitize() {
file.BackendDetails = ""
}

// PrepareInsert prepares a new file object to be persisted in DB ( create file ID, link upload ID, check name, ... )
func (file *File) PrepareInsert(upload *Upload) (err error) {
if upload == nil {
return fmt.Errorf("missing upload")
}

// CreateFile prepares a new file object to be persisted in DB ( create file ID, link upload ID, check name, ... )
func CreateFile(config *Configuration, upload *Upload, params *File) (file *File, err error) {
if upload.ID == "" {
return fmt.Errorf("upload not initialized")
return nil, fmt.Errorf("upload not initialized")
}

file = NewFile()
file.Status = FileMissing
file.UploadID = upload.ID

file.Name = params.Name
file.Type = params.Type
file.Size = params.Size
file.Reference = params.Reference

if file.Name == "" {
return fmt.Errorf("missing file name")
return nil, fmt.Errorf("missing file name")
}

// Check file name length
if len(file.Name) > 1024 {
return fmt.Errorf("file name %s... is too long, maximum length is 1024 characters", file.Name[:20])
return nil, fmt.Errorf("file name %s... is too long, maximum length is 1024 characters", file.Name[:20])
}

file.GenerateID()
file.Status = FileMissing
// Check file size
if file.Size > 0 && config.MaxFileSize > 0 && file.Size > config.MaxFileSize {
return nil, fmt.Errorf("file is too big (%s), maximum file size is %s", humanize.Bytes(uint64(file.Size)), humanize.Bytes(uint64(config.MaxFileSize)))
}

return nil
return file, nil
}
34 changes: 5 additions & 29 deletions server/common/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,33 +25,9 @@ func TestFileSanitize(t *testing.T) {
require.Zero(t, file.BackendDetails, "invalid backend details")
}

func TestFilePrepareInsert(t *testing.T) {
upload := &Upload{}
file := &File{}
file.BackendDetails = "value"

err := file.PrepareInsert(nil)
require.Errorf(t, err, "missing upload")

err = file.PrepareInsert(upload)
require.Errorf(t, err, "upload not initialized")

upload.PrepareInsertForTests()

err = file.PrepareInsert(upload)
require.Errorf(t, err, "missing file name")

for i := 0; i < 2048; i++ {
file.Name += "x"
}

err = file.PrepareInsert(upload)
require.Errorf(t, err, "too long")

file.Name = "file name"
err = file.PrepareInsert(upload)
require.NoError(t, err, "too long")

require.NotNil(t, file.ID, "missing file id")
require.Equal(t, FileMissing, file.Status, "missing file id")
func TestCreateFile(t *testing.T) {
config := NewConfiguration()
file, err := CreateFile(config, &Upload{}, &File{Name: "foo"})
RequireError(t, err, "upload not initialized")
require.Nil(t, file)
}
Loading

0 comments on commit 6d0d738

Please sign in to comment.