diff --git a/functionality/filesharing/filesharing_functionality.go b/functionality/filesharing/filesharing_functionality.go index 0b8510f..b3436f4 100644 --- a/functionality/filesharing/filesharing_functionality.go +++ b/functionality/filesharing/filesharing_functionality.go @@ -17,6 +17,7 @@ import ( "cwtch.im/cwtch/model" "cwtch.im/cwtch/model/attr" + "cwtch.im/cwtch/model/constants" "cwtch.im/cwtch/peer" "cwtch.im/cwtch/protocol/files" "git.openprivacy.ca/openprivacy/log" @@ -29,14 +30,14 @@ type Functionality struct { // FunctionalityGate returns filesharing if enabled in the given experiment map // Note: Experiment maps are currently in libcwtch-go func FunctionalityGate(experimentMap map[string]bool) (*Functionality, error) { - if experimentMap["filesharing"] { + if experimentMap[constants.FileSharingExperiment] { return new(Functionality), nil } return nil, errors.New("filesharing is not enabled") } func PreviewFunctionalityGate(experimentMap map[string]bool) (*Functionality, error) { - if experimentMap["filesharing"] == true && experimentMap["filesharing-images"] == true { + if experimentMap[constants.FileSharingExperiment] == true && experimentMap[constants.ImagePreviewsExperiment] == true { return new(Functionality), nil } return nil, errors.New("image previews are not enabled") @@ -57,8 +58,16 @@ func (om *OverlayMessage) FileKey() string { // checks file size and file name. *DOES NOT* check user settings or contact state func (om *OverlayMessage) ShouldAutoDL() bool { + if om.Size > constants.ImagePreviewMaxSizeInBytes { + return false + } lname := strings.ToLower(om.Name) - return om.Size <= 20971520 && (strings.HasSuffix(lname, "jpg") || strings.HasSuffix(lname, "jpeg") || strings.HasSuffix(lname, "png") || strings.HasSuffix(lname, "gif") || strings.HasSuffix(lname, "webp") || strings.HasSuffix(lname, "bmp")) + for _, s := range constants.AUTODL_FILE_EXTS { + if strings.HasSuffix(lname, s) { + return true + } + } + return false } // DownloadFile given a profile, a conversation handle and a file sharing key, start off a download process diff --git a/model/constants/experiments.go b/model/constants/experiments.go new file mode 100644 index 0000000..9adb50e --- /dev/null +++ b/model/constants/experiments.go @@ -0,0 +1,14 @@ +package constants + +// Allows file sharing +const FileSharingExperiment = "filesharing" + +// Causes images (up to ImagePreviewMaxSizeInBytes, from accepted contacts) to auto-dl and preview +// requires FileSharingExperiment to be enabled +const ImagePreviewsExperiment = "filesharing-images" + +// Files up to this size will be autodownloaded using ImagePreviewsExperiment +const ImagePreviewMaxSizeInBytes = 20971520 + +// Files with these extensions will be autodownloaded using ImagePreviewsExperiment +var AUTODL_FILE_EXTS = [...]string{".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"} diff --git a/testing/filesharing/file_sharing_integration_test.go b/testing/filesharing/file_sharing_integration_test.go index 5c1bd13..47a604f 100644 --- a/testing/filesharing/file_sharing_integration_test.go +++ b/testing/filesharing/file_sharing_integration_test.go @@ -2,6 +2,11 @@ package filesharing import ( "crypto/rand" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + app2 "cwtch.im/cwtch/app" "cwtch.im/cwtch/app/utils" "cwtch.im/cwtch/event" @@ -12,14 +17,10 @@ import ( "cwtch.im/cwtch/peer" "cwtch.im/cwtch/protocol/connections" "cwtch.im/cwtch/protocol/files" - "encoding/base64" - "encoding/hex" - "encoding/json" - "fmt" "git.openprivacy.ca/openprivacy/connectivity/tor" "git.openprivacy.ca/openprivacy/log" + // Import SQL Cipher - _ "github.com/mutecomm/go-sqlcipher/v4" mrand "math/rand" "os" "os/user" @@ -28,6 +29,8 @@ import ( "runtime/pprof" "testing" "time" + + _ "github.com/mutecomm/go-sqlcipher/v4" ) func waitForPeerPeerConnection(t *testing.T, peera peer.CwtchPeer, peerb peer.CwtchPeer) { @@ -121,7 +124,7 @@ func TestFileSharing(t *testing.T) { fmt.Println("Alice and Bob are Connected!!") - filesharingFunctionality, _ := filesharing.FunctionalityGate(map[string]bool{"filesharing": true}) + filesharingFunctionality, _ := filesharing.FunctionalityGate(map[string]bool{constants.FileSharingExperiment: true}) err = filesharingFunctionality.ShareFile("cwtch.png", alice, 1)