Nothing has been indexed for 0.5.3 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.

Installation

# Add this to your shard.yml
dependencies:
  transfer_more:
    github: Nephos/transfer_more
    version: ~> 0.5.3

Then run:

shards install

shard.yml

No shard.yml has been indexed for 0.5.3. You can read it on the repository.

Dependencies

Unknown: the shard.yml for this version has not been read yet.

README

This README is the one indexed from the repository at its latest ref, not from the tag for this version.

**Upstream on <https://git.sceptique.eu/Sceptique/transfer_more>**

# transfer_more

Fast and lite file upload server ([transfer.sh](https://transfer.sh/) clone).

![screenshot](https://raw.githubusercontent.com/Nephos/transfer_more/master/sample.png)

- It's a simple online file sharing.
- Files older than 7 days are destroyed (configurable).
- Recognize shebangs, magic numbers, ...

## Installation [![Build Status](https://drone.sceptique.eu/api/badges/Sceptique/transfer_more/status.svg)](https://drone.sceptique.eu/Sceptique/transfer_more)

Compatible crystal v1.9.2

### From source

```sh
make        # build the app / deps
make test   # run unit test
make doc    # build the documentation
```

### From AUR with yay (or yaourt etc.)

```sh
yay -S transfer-more
```

### As a systemd service

    [Unit]
    Description=Tranfer more file sharing
    Documentation=https://wiki.archlinux.org/index.php/Transfer-more

    [Service]
    ExecStart=/usr/share/transfer-more/transfer-more --port 10003 --bind 127.0.0.1
    Restart=on-failure
    RestartSec=5
    Environment="TRANSFER_SSL_ENABLED=true"
    WorkingDirectory=/usr/share/transfer-more/

    # Hardening
    MemoryDenyWriteExecute=true
    SystemCallArchitectures=native
    CapabilityBoundingSet=
    NoNewPrivileges=true
    RemoveIPC=true
    LockPersonality=true

    ProtectControlGroups=true
    ProtectKernelTunables=true
    ProtectKernelModules=true
    ProtectKernelLogs=true
    ProtectClock=true
    ProtectHostname=true
    ProtectProc=noaccess

    RestrictRealtime=true
    RestrictSUIDSGID=true
    RestrictNamespaces=true
    RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6

    ProtectSystem=full
    ProtectHome=true
    PrivateDevices=true
    PrivateTmp=true

    [Install]
    WantedBy=default.target

### Behind a nginx proxy

You should configure your nginx with `/etc/nginx/servers-enabled/transfer-more.conf`:

    server {
      listen 443 ssl;
      server_name your.sub.domain;
      client_max_body_size 1G; # upload size limit, adjust as needed
      proxy_set_header Host              $host;
      proxy_set_header X-Real-IP         $remote_addr;
      proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
      location / {
          proxy_pass http://localhost:3000;
      }
    }

## Usage

### Run the Server

```sh
export TRANSFER_SSL_ENABLED=true    # true if the ssl is enabled, any other string is false
export TRANSFER_BASE_STORAGE="/tmp" # where the files will be kept
export TRANSFER_SECURE_SIZE=4       # how much characters to identify a file
export TRANSFER_STORAGE_DAYS=7      # how much time the files are kept
export TRANSFER_TIME_FORMAT="%y%m%d%H"
export TRANSFER_HOST_PORT="localhost:3000" # in pinciple it is auto solved using the http headers, optional
export TRANSFER_MORE_FOOTER="Something <strong>important</strong> on the bottom" # replace the default footer
export TRANSFER_MORE_TITLE="MyName upload"                                       # replace the default title
./transfer_more
```

```text
./transfer_more --help
    -b HOST, --bind HOST             Host to bind (defaults to 0.0.0.0)
    -p PORT, --port PORT             Port to listen for connections (defaults to 3000)
```

### Command line client

```sh
curl --progress-bar --upload-file file.mp4  http://domain/name.mp4
```

### Inside a Docker container

```sh
docker build -t transfer_more . && docker run -p 3000:3000 transfer_more
```

Or with docker-compose:

```sh
docker-compose build && docker-compose up
```

### [ShareX](https://github.com/ShareX) template

```json
{
  "Name": "Sceptique",
  "DestinationType": "ImageUploader, TextUploader, FileUploader, URLShortener",
  "RequestURL": "https://up.sceptique.eu/",
  "FileFormName": "file",
  "Headers": {
    "User-Agent": "curl"
  }
}
```

## Development

For now I don't have much plan expanding the feature of it, as it fulfills all my needs.

I will keep updating with each crystal new release.

## Contributing

Feel free to propose new feature anyway, we can just put them behind feature flag if it's overkill.

Review your own coding style as possible.

Do not try to include external CI in the upstream, I don't want big centralized service of the GAFAM as possible.

You can either propose a patch in an issue or open a merge request on <https://git.sceptique.eu/Sceptique/transfer_more/fork>.

You can propose it on github if you want, but git.sceptique.eu accept github OAuth so it's very quick to setup and it's my prefered way.

## Contributors

- [Sceptique](https://git.sceptique.eu/Sceptique) Arthur Poulet - creator, maintainer