Giter Site home page Giter Site logo

szimek / sharedrop Goto Github PK

View Code? Open in Web Editor NEW
8.5K 8.5K 627.0 2.5 MB

Easy P2P file transfer powered by WebRTC - inspired by Apple AirDrop

Home Page: https://www.sharedrop.io

License: MIT License

JavaScript 61.69% HTML 2.63% Handlebars 11.79% Sass 23.65% Dockerfile 0.21% Procfile 0.02%
ember ember-cli file-sharing javascript peer-to-peer webrtc

sharedrop's Introduction

ShareDrop

ShareDrop is a web application inspired by Apple AirDrop service. It allows you to transfer files directly between devices, without having to upload them to any server first. It uses WebRTC for secure peer-to-peer file transfer and Firebase for presence management and WebRTC signaling.

ShareDrop allows you to send files to other devices in the same local network (i.e. devices with the same public IP address) without any configuration - simply open https://www.sharedrop.io on all devices and they will see each other. It also allows you to send files between networks - just click the + button in the top right corner of the page to create a room with a unique URL and share this URL with other people you want to send a file to. Once they open this page in a browser on their devices, you'll see each other's avatars.

The main difference between ShareDrop and AirDrop is that ShareDrop requires Internet connection to discover other devices, while AirDrop doesn't need one, as it creates ad-hoc wireless network between them. On the other hand, ShareDrop allows you to share files between mobile (Android and iOS) and desktop devices and even between networks.

Support ShareDrop!

ShareDrop is free, however, it still costs money to run.

If you use it and like it, please consider making a small donation either via

PayPal

or

Support ShareDrop

to help me keep it free for everyone. Thanks!

Supported browsers

  • Chrome
  • Edge (Chromium based)
  • Firefox
  • Opera
  • Safari 13+

Local development

  1. Setup Firebase:
    1. Sign up for a Firebase account and create a database.
    2. Go to "Security Rules" tab, click "Load Rules" button and select firebase_rules.json file.
    3. Take note of your database URL and its secret, which can be found in "Secrets" tab.
  2. Run npm install -g ember-cli to install Ember CLI.
  3. Run yarn to install app dependencies.
  4. Run cp .env{.sample,} to create .env file. This file will be used by Foreman to set environment variables when running the app locally.
    • SECRET key is used to encrypt cookies and generate room name based on public IP address for / route. It can be any random string - you can generate one using e.g. date | md5sum
    • NEW_RELIC_* keys are only necessary in production
  5. Run yarn develop to start the app.

Deployment

Heroku

Create a new Heroku app:

heroku create <app-name>

and push the app to Heroku repo:

git push heroku master

sharedrop's People

Contributors

austinhuynh avatar jmak avatar joystickplays avatar ldealmei avatar morgoth avatar mrchrisw avatar qoobaa avatar szimek avatar valoricde avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sharedrop's Issues

Selection for Interface

I have a non default Setup with two local bridges and a VPN connection. Unfortunatly ShareDrop uses a bridge which I only use for virtual machines.

It would be nice to have a selection, which local Interface ShareDrop will use.

add support for openid providers

Please add support for openid providers like simpleid instead of only firefox persona. If this is not possible it would be nice to offer a option to disable persona altogether.

ip for vmnet nic is being used instead of ip for en0

when I open sharedrop its picking up my virtual nic ip as my ip. It should use en0, but its not. on my virtual host I have two nics configured host-only and bridged and it is only showing the ip for the host-only. I think it would be cool if you can query to get the list of ip's and let the user choose which one to use

Fix app on Firefox 28

Looks like there's some bug in Firefox 28 (tested on Ubuntu and Windows, not sure about Mac) in idb.filesystem.min.js minified again by uglifier. Firefox 29 on Mac works fine...

Figure out a better way to deploy the app

Currently the app is hosted on Heroku and it's rebuilt after every app restart. Either remove compass gem dependency and use grunt-sass with one of available NodeJS/Grunt buildpacks or find/write custom Compass/NodeJS/Grunt buildpack.

Handle case when ICE connection fails

Peer: Data channel connection error Error: ICE connection state is 'failed'
Peer: Data channel connection error Error: ICE connection state is 'disconnected'

Investigate QuotaExceededError errors

When there's not much available storage on a device, transfers are terminated with QuotaExceededError. We're using temporary storage, which has more strict storage limits, but it was never a problem before when sending files even up to 1GB.

One thing would be to query and log storage size available to the app. At first it could simply show an error if the received file size exceeds available storage size. Later it could try to switch to persistent storage and ask user for permission, explaining why it's needed.

Resume on failure

The main reason I cannot use sharedrop, is because it does not resume where it left off after a failure. When the computer goes to sleep, or the connection drops, the sender should ask the receiver how many bytes the receiver got, and resume sending from there.

Work offline?

How possible is it to get this working for offline use?

Custom room names

This will allow users to send files across networks.

Allow users to generate unique room name and use that instead of the one based public IP and fetched from the server.

  • display an error message if ICE connection state is failed, i.e. when TURN server is needed
  • display modal with current URL when user creates a room
  • come up with content for app and room instructions modals
  • look for free/cheap server with huuuuge transfer for TURN server

Firefox support

Use idb.filesystem.js for HTML5 Filesystem API polyfill on Firefox. Promises are already provided by es6-promise polyfill.

  • figure out why files transferred to Firefox have max size of only 1MB (size of a single block)

Persona sign in does not work

When I'm signing in with Persona, there is not my gravatar picture and my email, and always the "sign in" button (where is the sign out??).

cdnjs.cloudflare.com is blocked in China

Thanks for creating such a good web tool for sharing!

But the web site cannot be opened in China because files hosted in cdnjs.cloudflare.com (like: jquery.min.js, handlebars.runtime.min.js and ember.min.js) are blocked by the GFW (Great Firewall, a nick name of the internet censorship project in China).

So could you please host these files in another CDN? such as Google?

BTW, a URL can be tested in this site to see if it is blocked in China.

QR code Sharing URL

It's easier to share if there is a qr code generator and reader on mobile devices.

Rewrite to Ember CLI

  • switch to node-sass
  • switch to express.js 4.x
  • switch to Ember CLI (figure out how to run it locally - foreman start for custom server and ember build --watch for ember app? or ember server --proxy?)
  • figure out how to deploy it to Heroku with custom server (build slug locally vs custom buildpack that runs ember build during compilation)

transfer stuck

i was sending a 484 MB big file from Chromium Version 46.0.2490.71 (64-bit) on OS X 10.9.5 to Firefox 43.0.4 on OS X 10.11.1.
after one hour its still the same status as some minutes after starting...

bildschirmfoto 2016-01-21 um 12 17 11

Chromium support

Sharedrop says chromium is not supported. Shouldn't be hard to add support for this if Google Chrome is supported.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.