dutchcoders/transfer.sh

By dutchcoders

Updated about 16 hours ago

Easy and fast file sharing from the command-line.

Image
42

5M+

dutchcoders/transfer.sh repository overview

transfer.sh Go Report Card Docker pulls Build Status

Easy and fast file sharing from the command-line. This code contains the server with everything you need to create your own instance.

Transfer.sh currently supports the s3 (Amazon S3), gdrive (Google Drive), storj (Storj) providers, and local file system (local).

Disclaimer

The service at transfersh.com is of unknown origin and reported as cloud malware.

Usage

Upload:
$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt
Encrypt & upload:
$ cat /tmp/hello.txt|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt
Download & decrypt:
$ curl https://transfer.sh/1lDau/test.txt|gpg -o- > /tmp/hello.txt
Upload to virustotal:
$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal
Deleting
$ curl -X DELETE <X-Url-Delete Response Header URL>

Request Headers

Max-Downloads
$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Downloads: 1" # Limit the number of downloads
Max-Days
$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Days: 1" # Set the number of days before deletion

Response Headers

X-Url-Delete

The URL used to request the deletion of a file. Returned as a response header.

curl -sD - --upload-file ./hello https://transfer.sh/hello.txt | grep 'X-Url-Delete'
X-Url-Delete: https://transfer.sh/hello.txt/BAYh0/hello.txt/PDw0NHPcqU

Examples

See good usage examples on examples.md

Create direct download link:

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/get/1lDau/test.txt

Inline file:

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/inline/1lDau/test.txt

Usage

ParameterDescriptionValueEnv
listenerport to use for http (:80)LISTENER
profile-listenerport to use for profiler (:6060)PROFILE_LISTENER
force-httpsredirect to httpsfalseFORCE_HTTPS
tls-listenerport to use for https (:443)TLS_LISTENER
tls-listener-onlyflag to enable tls listener onlyTLS_LISTENER_ONLY
tls-cert-filepath to tls certificateTLS_CERT_FILE
tls-private-keypath to tls private keyTLS_PRIVATE_KEY
http-auth-useruser for basic http auth on uploadHTTP_AUTH_USER
http-auth-passpass for basic http auth on uploadHTTP_AUTH_PASS
ip-whitelistcomma separated list of ips allowed to connect to the serviceIP_WHITELIST
ip-blacklistcomma separated list of ips not allowed to connect to the serviceIP_BLACKLIST
temp-pathpath to temp foldersystem tempTEMP_PATH
web-pathpath to static web files (for development or custom front end)WEB_PATH
proxy-pathpath prefix when service is run behind a proxyPROXY_PATH
proxy-portport of the proxy when the service is run behind a proxyPROXY_PORT
ga-keygoogle analytics key for the front endGA_KEY
providerwhich storage provider to use(s3, storj, gdrive or local)
uservoice-keyuser voice key for the front endUSERVOICE_KEY
aws-access-keyaws access keyAWS_ACCESS_KEY
aws-secret-keyaws access keyAWS_SECRET_KEY
bucketaws bucketBUCKET
s3-endpointCustom S3 endpoint.S3_ENDPOINT
s3-regionregion of the s3 bucketeu-west-1S3_REGION
s3-no-multipartdisables s3 multipart uploadfalseS3_NO_MULTIPART
s3-path-styleForces path style URLs, required for Minio.falseS3_PATH_STYLE
storj-accessAccess for the projectSTORJ_ACCESS
storj-bucketBucket to use within the projectSTORJ_BUCKET
basedirpath storage for local/gdrive providerBASEDIR
gdrive-client-json-filepathpath to oauth client json config for gdrive providerGDRIVE_CLIENT_JSON_FILEPATH
gdrive-local-config-pathpath to store local transfer.sh config cache for gdrive providerGDRIVE_LOCAL_CONFIG_PATH
gdrive-chunk-sizechunk size for gdrive upload in megabytes, must be lower than available memory (8 MB)GDRIVE_CHUNK_SIZE
lets-encrypt-hostshosts to use for lets encrypt certificates (comma seperated)HOSTS
logpath to log fileLOG
cors-domainscomma separated list of domains for CORS, setting it enable CORSCORS_DOMAINS
clamav-hosthost for clamav featureCLAMAV_HOST
rate-limitrequest per minuteRATE_LIMIT
max-upload-sizemax upload size in kilobytesMAX_UPLOAD_SIZE
purge-daysnumber of days after the uploads are purged automaticallyPURGE_DAYS
purge-intervalinterval in hours to run the automatic purge for (not applicable to S3 and Storj)PURGE_INTERVAL
random-token-lengthlength of the random token for the upload path (double the size for delete path)6RANDOM_TOKEN_LENGTH

If you want to use TLS using lets encrypt certificates, set lets-encrypt-hosts to your domain, set tls-listener to :443 and enable force-https.

If you want to use TLS using your own certificates, set tls-listener to :443, force-https, tls-cert-file and tls-private-key.

Development

Switched to GO111MODULE

go run main.go --provider=local --listener :8080 --temp-path=/tmp/ --basedir=/tmp/

Build

$ git clone [email protected]:dutchcoders/transfer.sh.git
$ cd transfer.sh
$ go build -o transfersh main.go

Docker

For easy deployment, we've created a Docker container.

docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/

S3 Usage

For the usage with a AWS S3 Bucket, you just need to specify the following options:

  • provider
  • aws-access-key
  • aws-secret-key
  • bucket
  • s3-region

If you specify the s3-region, you don't need to set the endpoint URL since the correct endpoint will used automatically.

Custom S3 providers

To use a custom non-AWS S3 provider, you need to specify the endpoint as defined from your cloud provider.

Storj Network Provider

To use the Storj Network as storage provider you need to specify the following flags:

  • provider --provider storj
  • storj-access (either via flag or environment variable STORJ_ACCESS)
  • storj-bucket (either via flag or environment variable STORJ_BUCKET)
Creating Bucket and Scope

In preparation you need to create an access grant (or copy it from the uplink configuration) and a bucket.

To get started, login to your account and go to the Access Grant Menu and start the Wizard on the upper right.

Enter your access grant name of choice, hit Next and restrict it as necessary/preferred. Aftwards continue either in CLI or within the Browser. You'll be asked for a Passphrase used as Encryption Key. Make sure to save it in a safe place, without it you will lose the ability to decrypt your files!

Afterwards you can copy the access grant and then start the startup of the transfer.sh endpoint. For enhanced security its recommended to provide both the access grant and the bucket name as ENV Variables.

Example:

export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj

Google Drive Usage

For the usage with Google drive, you need to specify the following options:

  • provider
  • gdrive-client-json-filepath
  • gdrive-local-config-path
  • basedir
Creating Gdrive Client Json

You need to create a Oauth Client id from console.cloud.google.com download the file and place into a safe directory

Usage example

go run main.go --provider gdrive --basedir /tmp/ --gdrive-client-json-filepath /[credential_dir] --gdrive-local-config-path [directory_to_save_config]

Contributions

Contributions are welcome.

Creators

Remco Verhoef

Uvis Grinfelds

Maintainer

Andrea Spacca

Stefan Benten

Code and documentation copyright 2011-2018 Remco Verhoef. Code and documentation copyright 2018-2020 Andrea Spacca. Code and documentation copyright 2020- Andrea Spacca and Stefan Benten.

Code released under the MIT license.

Tag summary

Content type

Image

Digest

sha256:7609b1cea

Size

10 MB

Last updated

about 16 hours ago

docker pull dutchcoders/transfer.sh:latest-noroot