aswinshenoy / BayJDO

A Fast, Simple & Secure Way to Transfer Files between Devices
https://bayjdo.com/
GNU General Public License v3.0
46 stars 8 forks source link
file-transfer filesharing hacktoberfest p2p peer-to-peer webrtc

BayJDO

A Fast, Simple & Secure Way to Transfer Files between Devices

GitHub release (latest by date including pre-releases) GitHub GitHub last commit

BayJDO App

🔥 Features

🎈 How to Use?

  1. Ensure both devices are in the same network
  2. Open Bayjdo in both devices, and from any one of the device enter the code of the other. (You may also make use of in-built QR-Scanner & Scan the QR instead)
  3. Select files to send 🗂
  4. Wait till transfer is complete, 🎉

💬 Frequently Asked Questions

What technology does it use?

The app uses web-technologies and runs on any modern web browser. For establishing the connection between two devices, a WebRTC signalling server (PeerJS) is used. This server, however, is not involved in the data transfer process.

How is privacy ensured? 🙈

All files being transmitted get encrypted by WebRTC standards, no one except the two devices would be able to read them. For further clarification, no files are ever sent to any server, and the file are always transferred directly (P2P) from one device to another through an encrypted WebRTC/WS channel.

Are all browsers supported?

Sadly no. 😞 Only browsers with the support for WebRTC can support Bayjdo, however, all modern & popular browsers do support WebRTC and hence Bayjdo 🍻

🔧 Tech Stack

NextJS / PeerJS / WebRTC / WebSocket

💎 Contributions

Being an open source project, any sort of contributions - pull requests, bug reporting, feature request, documentation help are all welcomed.

🛠 How to Run Locally & Develop ?

  1. Install docker and docker-compose. If you installed Docker desktop for Windows or Mac you don't need to install docker-compose separately.
  2. Clone this repository and rename the folder to webapp. Create file docker-compose.yml outside this folder.

    You directory structure should appear as follows:

    my-project
    ├── docker-compose.yml
    └── webapp
  3. Edit file docker-compose.yml to add the following:
    version: '3.6'
    services:
     bayjdo_server:
       container_name: bayjdo_server
       image: peerjs/peerjs-server
       ports:
         - 9000:9000
     bayjdo_webapp:
       container_name: bayjdo_webapp
       image: webapp
       ports:
         - 3000:3000
       environment:
         - PORT=3000
       volumes:
         - ./webapp:/app
         - /app/node_modules
         - /app/.next
       build:
         context: webapp
         dockerfile: Dockerfile-Dev
       command:
         "npm run dev"
  4. Modify property host of object prodConfig in hooks/usePeer.js to "localhost". Also modify the property port to "9000".

    Your prodConfig should look like:

    const prodConfig = {
      host: 'localhost', // or internal-ip
      secure: true,
      port: 9000,
      path: '/signaller',
      debug: 1
    };

    ⚠️ If you wish to test the local install on another device you will need to use your internal ip-address instead of localhost. If you are on a linux based system you can find your internal IP by issuing:

    hostname -I
  5. Run the following command to launch the server:
    sudo docker-compose up
  6. Access the client at localhost:3000 (or internal-ip:3000 in other devices connected to the same network).

🌟 How to Contribute?

  1. Fork the repository, clone it locally and run it following the installation instruction above.
  2. Find an issue or feature to work on, and put up an issue.
  3. Work on the patch or feature, test it and send a pull request referencing the issue.

🛑 Disclaimer

This project is currently only being developed, as a hobby project and does not intend to replace any popular file transfer application. The implementation of this project is currently very basic, and intends only to be a proof of concept for the technology used. This app may have technical glitches, security & privacy vulnerabilities. If you plan to use it for transferring confidential files etc., please look elsewhere for now.

🐱 Inspirations

Neither the idea for this project, nor the technology used, were conceived originally by me. This project only differs in implementations (+ some minor features), from some of the following popular projects it was inspired from -

  1. https://github.com/cowbell/sharedrop / https://www.sharedrop.io/
  2. https://github.com/RobinLinus/snapdrop / https://snapdrop.net/

✒️ License

This project is licensed under the GNU General Public License V3.

Credits

  1. Icons / illustrations - https://icons8.com/, https://icons8.com/ouch

Developed with ♥ by Ashwin Shenoy & other Open Source Contributors.