Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexgustafsson/drop
A self-hosted, end-to-end encrypted personal file sharing service written in Go and TypeScript using React
https://github.com/alexgustafsson/drop
api end-to-end-encryption file-share file-upload go golang react typescript webapp
Last synced: 2 months ago
JSON representation
A self-hosted, end-to-end encrypted personal file sharing service written in Go and TypeScript using React
- Host: GitHub
- URL: https://github.com/alexgustafsson/drop
- Owner: AlexGustafsson
- License: mit
- Created: 2021-06-02T10:25:44.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-06-22T08:21:56.000Z (over 2 years ago)
- Last Synced: 2024-10-04T14:41:21.364Z (3 months ago)
- Topics: api, end-to-end-encryption, file-share, file-upload, go, golang, react, typescript, webapp
- Language: TypeScript
- Homepage:
- Size: 481 KB
- Stars: 10
- Watchers: 3
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Drop
### A self-hosted, end-to-end encrypted personal file sharing serviceNote: Drop is currently being actively developed. Until it reaches v1.0.0 breaking changes may occur in minor versions.
Drop is a new service for letting people easily upload end-to-end encrypted files from any device right to your own cluster, swarm or Raspberry Pi. It's design with two primary goals in mind:
1. The service must be user-friendly. A computer-novice should be able to receive a link and use the service on their own on their device of choice.
2. The service must be secure. The server must have minimal knowledge of the files shared - encryption is not optional.Beyond these primary goals, there are two secondary goals.
1. The service must be easily self-hosted, be it on a Raspberry Pi, using Docker or running in a Kubernetes cluster.
2. The service must be performant and scalable. The web-based client should easily handle uploads of hundreds of megabytes within seconds and the server must be able to handle the load shared over one or more instances.Upcoming.
## Table of contents
[Quickstart](#quickstart)
[Features](#features)
[Installation](#installation)
[Usage](#usage)
[Contributing](#contributing)* Non-optional end-to-end streaming file encryption
* Several supported state and storage backends
* Support for all the latest browsers (Chrome, Edge, Firefox, Safari)
* API-first to support third-party clients### Using Docker
Upcoming.
### Using Homebrew
Upcoming.
```sh
brew install alexgustafsson/tap/drop
```### Downloading a pre-built release
Download the latest release from [here](https://github.com/AlexGustafsson/drop/releases).
### Build from source
Clone the repository.
```sh
git clone https://github.com/AlexGustafsson/drop.git && cd drop
```Optionally check out a specific version.
```sh
git checkout v0.1.0
```Build the application.
```sh
make build
```_Note: This project is still actively being developed. The documentation is an ongoing progress._
```
Usage: drop [global options] command [command options] [arguments]A service for securely transferring files
Version: v0.1.0, build 19df17a. Built Wed Jun 9 11:29:18 CEST 2021 using go version go1.16 darwin/amd64
Options:
--verbose Enable verbose logging (default: false)
--help, -h show help (default: false)Commands:
decrypt Decrypt a file
serve Serve the application
token Create a token
version Show the application's version
help Shows a list of commands or help for one commandRun 'drop help command' for more information on a command.
```## Documentation
Upcoming.
### API
The API is documented in `api.yml` using OpenAPI 3.0.
You may use tools such as the open source [Insomnia](https://github.com/Kong/insomnia) to easily work with the API, or Swagger UI to explore the API.
## Security
Security is one of the core features of Drop and therefore it's taken very seriously. At the time of writing, Drop is not ready for production use. When it is, it will provide confidentiality via end-to-end encryption, integrity via the use of authenticated cryptography and availability by being horizontally scalable, offloading the data and state to highly available stores.
This section will be extended to provide information on how to disclose security issues, what considerations should be made when deploying and using Drop, as well as security features and limitations.
Any help with the project is more than welcome. The project is still in its infancy and not recommended for production.
### Development
```sh
# Clone the repository
https://github.com/AlexGustafsson/drop.git && cd drop# Show available commands
make help# Build the project for the native target
make build
```#### Frontend
The frontend is written entirely in TypeScript using React and built using Vite. The app uses a web worker to handle the encryption and uploading of files in the background. The entire source is found in the `frontend` directory.
The only top-level build command available for the frontend is `make build/frontend`, which builds the frontend and outputs it to the `build/frontend` directory. For development, it's recommended to use the available commands via yarn or NPM instead.
```sh
cd frontend# Install dependencies
yarn install## Building
# Build for production
yarn build
# Build in development mode on each change
yarn build:watch## Serving
# Serve the built application
yarn serve# Build in watch mode and serve the application continously with automatic reload
yarn dev
```Some features such as the Worker-based file upload does not work in Safari or Firefox when using the `yarn dev` command as these platforms have varying support for ECMAScript modules. To test in these browser, it may be easier to use `yarn build:watch` and run the go server to serve the files.
In other cases, `yarn dev` will work well and automatically point to the API running on the standard port for the server.
#### Server
The server is written entirely in Go, using the [Fiber](https://gofiber.io) web framework. Its source is scattered in the `cmd` and `internal` directories.
```sh
## Building# Build the server
make build/drop## Code quality
# Format code
make format
# Lint code
make lint
# Vet the code
make vet## Testing
# Run tests
make test
```_Note: due to a bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93082, https://bugs.llvm.org/show_bug.cgi?id=44406, https://openradar.appspot.com/radar?id=4952611266494464), clang is required when building for macOS. GCC cannot be used._